php - 哪里使用 strip_tags() 和 htmlspecialchars()

标签 php xss

放置 strip_tagshtmlspecialchars 标记的位置有区别吗?我读到示例 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/

相关文章:

html - 在这个 domxss.com 挑战中如何进行 HTML 注入(inject)

java - OutputStream 写入 byteArray - XSS 预防

javascript - 在 CMS 中的何处放置简单的 "Accept Conditions and Book"脚本

javascript - Web 资源的用户凭据是否需要 Html.Encode?

php - 用于 PHP/MySQL 开发的 Linux 安装机器

php - MYSQL 一对一关系

php 处理 POS 打印机和现金抽屉

PHP:作为数组中键的值之一

php - 使用触发器来防止在 MySQL 中插入代码

php - 来自 3 个表的内连接