【发布时间】:2013-12-20 03:40:37
【问题描述】:
是使用 foreach 安全还是这样做会导致更多安全漏洞?
<?php
foreach ($_POST as $key=>$value){
$_POST[$key] = htmlspecialchars($_POST[$key]);
}
?>
<form method="POST" action="">
<input type="text" name="test" value="<?=isset($_POST['test'])?$_POST['test']:''?>"/>
<input type="submit" />
</form>
VS.
<?php
$_POST['test'] = htmlspecialchars($_POST['test']);
?>
<form method="POST" action="">
<input type="text" name="test" value="<?=isset($_POST['test'])?$_POST['test']:''?>"/>
<input type="submit" />
</form>
【问题讨论】:
-
foreach不会造成更多的安全漏洞,否则我们都会遇到麻烦。如果您认为这可能,那么您可能需要阅读有关数据清理的信息。 -
无论如何,您都不应该更改 $_POST 中的值。您在需要执行转义/消毒的地方进行转义/消毒,而不是在您不知道如何使用数据的开始。你基本上是在重新创建一个相当于魔术引号的 html。
-
@FruityP 我只是想确保循环通过 $_POST 变量是获取 $_POST 下所有变量的有效方法。
-
@MarcB 为什么你不应该更改
$_POST中的变量,人们总是这么说,但我不明白为什么?仅仅是因为您想确保数据不受影响吗? -
那我一定是误解了你的问题,抱歉。看看这个问题:stackoverflow.com/questions/16659356/…