放置 strip_tags
和 htmlspecialchars
标记的位置有区别吗?我读到示例 2 比示例 1 更好。
但我不明白怎么会这样,这不是同一件事吗?我不知道将其设置回 $_POST[]
变量是否也会产生影响。
就我而言,使用示例 1 更容易,因为无论我在哪里使用 $_POST['test']
,我都知道它是安全的......而我需要找到任何实例在示例 2 中,我 echo $_POST['test']
并在其周围放置标签。
是否有一个真正的版本能够更安全地防止 XSS 泄漏?
示例 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>
?>
最佳答案
两个示例是相同的(在输出中)。
我看到的问题是示例 #1 覆盖了 $_POST
数据。
我建议不要这样做,因为您无法在脚本中稍后恢复原始数据(例如,如果您希望将数据保存到数据库中或将其输出到非 HTML 上下文中)。
我不知何故误解了这个问题,但这部分旧答案仍然适用。
它们是两个不同的函数。
在您的情况下,您应该只使用 htmlspecialchars()
因为此函数旨在转义特殊 HTML 字符 ( <, >, "
)。
strip_tags()
相反,剥离 HTML 标签(以及其他一些东西, see the docs )。你真的想要这种行为吗?我不信。剥离 HTML 标签与转义它们不同,因为它确实删除了标签。转义只是“转义”它们,以便浏览器将它们呈现为普通文本。
关于php - 哪里使用 strip_tags() 和 htmlspecialchars(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20361529/