我放置strip_tags
和htmlspecialchars
代码的位置有区别吗?我读到示例2优于示例1.
但我不明白这是怎么回事,这些不一样吗?我不知道我是否将它重新设置为$_POST[]
变量也是有意义的。
在我的情况下,使用示例1要容易得多,因为无论我在哪里使用$_POST['test']
,我都知道它是安全的...而我需要找到我echo $_POST['test']
的实例并放置示例2中的标签。
对XSS Leaks来说,一个真正的版本更安全吗?
示例1:
<?php
$_POST['test'] = htmlspecialchars(strip_tags($_POST['test']));
// other code
<form action="" method="POST">
<input type="hidden" name="test" value="<?=$_POST['test']?>" />
</form>
?>
示例2:
<?php
// other code
<form action="" method="POST">
<input type="hidden" name="test" value="<?=htmlspecialchars(strip_tags($_POST['test']))?>" />
</form>
?>
答案 0 :(得分:1)
两个例子都相同(在输出中)。
我能看到的问题是示例#1会覆盖$_POST
数据。
我建议不要这样做,因为您无法在脚本中稍后恢复原始数据(例如,如果您希望将数据保存到数据库中或在非HTML上下文中输出它)。
<小时/> 我在某种程度上误解了这个问题,但这部分旧答案仍然适用。
它们是两个不同的功能。
在您的情况下,您应该只使用htmlspecialchars()
,因为此功能旨在转义特殊HTML字符(<, >, "
)。
strip_tags()
相反剥离HTML标记(以及其他一些内容,see the docs)。你真的想要这种行为吗?我不信。剥离HTML标记与逃避它们不同之处在于它确实删除了标记。转义只是“逃避”它们,以便浏览器将它们呈现为普通文本。
答案 1 :(得分:0)
如果你必须在多个地方使用$ _POST ['test']我将使用示例1,因为你不必再处理其他函数(strip_tags,htmlspecialchars)再次清理你已经拥有的相同数据。
答案 2 :(得分:0)
这部分代码完美地阻止了XSS。
=