为什么不使用 strip_tags() 而不是 htmlspecialchars() 来防止 xss 攻击?

why not using strip_tags() to prevent xss attack instead of htmlspecialchars()?

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

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

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

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

可以使用输入标签的原始结束 > - strip_tags 可能会也可能不会捕捉到这种情况。我似乎记得它会查找 < 后跟 >,这在上面的字符串中找不到。

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

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

htmlspecialchars() - 防止 XSS
MySQLI prepared statement - 为了防止SQL注入

还有很多其他攻击,但这两个是世界上每个网站都必须的,否则,我可以在 1 分钟内破解您的网站(不骗人)。