【问题标题】:why not using strip_tags() to prevent xss attack instead of htmlspecialchars()?为什么不使用 strip_tags() 而不是 htmlspecialchars() 来防止 xss 攻击?
【发布时间】:2015-08-11 08:00:29
【问题描述】:

如果我需要在模板中显示$_GET 值,为什么不使用strip_tags() 而不是htmlspecialchars() 来防止xss 攻击?

【问题讨论】:

    标签: xss htmlspecialchars strip-tags


    【解决方案1】:

    因为 strip_tags 并不能解决所有可能的滥用情况。诚然,它修复了最严重的违规者,但还有其他情况,例如当自己将值插入<input>标签时,引号可以被打破。

    考虑: <input type="text" value="my string" />

    如果my string 来自其他不受 XSS 保护的数据源,它可能包含以下内容: "><script ....

    它可以使用输入标签的原始关闭> - 并且strip_tags 可能会也可能不会遇到这种情况。我似乎记得它会查找<,然后是>,这在上面的字符串中找不到。

    【讨论】:

    • 谢谢。非常有用的答案。两者都使用怎么样:strip_tags(htmlspecialchars($_GET))?有道理? strip_tags 是否仍然适用于转义的 html 特殊字符?
    • 否,因为此时它不再包含<> 标签。
    • 先strip_tags,然后htmlspecialchars怎么样?我认为这样,只有在您提到的那些特殊情况下,标签仍然存在,并且在大多数情况下它们会被删除,这样更好吗?
    • 是的,如果您要获得最漂亮的输入,那将是可行的。我想这取决于您要实现的目标;如果您打算允许基本格式设置,则在任何时候都不能真正 strip_tags。
    • 我的代码中不应输入格式,输入应仅包含 id 或字符串等。
    【解决方案2】:

    htmlspecialchars() 可以转义所有可以添加的特殊字符,例如<script>alert('You've been hacked');</script>

    受保护的网站的主要部分是:

    htmlspecialchars() - 防止 XSS
    MySQLI 准备好的语句 - 防止 SQL 注入

    还有很多其他的攻击,但这两个是世界上每个网站都必须的,否则,我将能够在 1 分钟内黑掉你的网站(没有谎言)。

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多