我熟悉常见的持久性 XSS,其中来自用户输入的内容应该在传递到模板(html 实体)时进行转义。
最近,我遇到了一种非持久性的问题,即用户只需在 URL 上发送脚本,该 URL 将显示在页面上的某处。就我而言,它是一个链接标记。
所以我有以下使用当前 URL 的链接标记。
<link rel="next" href="{current_url}" />
问题是当有人发送链接时,例如:
www.example.com/?%27;alert...
它可以是 %27(单引号)和 %22(双引号)来关闭标记,从而允许用户输入脚本等。
我知道防止 XSS 的常用方法是使用 html 实体。在这种情况下,这不会破坏 URL 吗?是否可以使用 url 编码代替?
顺便说一句,我正在使用 PHP,并且更喜欢使用 native 函数。
最佳答案
来自用户的所有内容都应该进行转义,无论是来自 URL 还是来自数据库。在这种情况下,您只需进行 URL 编码而不是 HTML 实体。您的模板引擎可能已经足够智能,可以对进入 HTML 属性的值执行此操作。
关于javascript - 如何通过URL防止XSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140509/