我页面上有一个表单,用户要输入他们的信用卡数据。在HTML中,是否可以将表单的操作标记为常量,以防止恶意JavaScript更改表单的操作属性?我可以想象一种XSS攻击,它会将表单URL更改为使用户将其秘密数据发布到攻击者的站点。
这种做法是否可行?或者,Web浏览器中是否有不同的功能可以防止发生此类攻击?
这种做法是否可行?或者,Web浏览器中是否有不同的功能可以防止发生此类攻击?
GET
发送机密数据而无需提交表单。预防 XSS 攻击的正确方法是确保对页面上的所有不可信内容进行编码,这样黑客就没有能力首先执行他们自己的 JavaScript。
<script type="text/javascript">alert('foo');</script>
如果 SO 没有对上述片段进行编码,您将只会看到一个警告框。当然,这只是一个相当无害的脚本 - 我可以编写一些劫持您会话 cookie 并将其发送到 evil.com/hacked-sessions 的 JavaScript。然而,SO 不会假设每个人都有善意,并且实际上编码了内容。例如,如果您查看源代码,则会发现 SO 已经将我的完全有效的 HTML 和 JavaScript 编码为以下内容:
<script type="text/javascript">alert('foo');</script>
因此,它们已经使用其 HTML 编码的等效项(<
和 >
)替换了我使用它们的实际 <
和 >
字符,这意味着我的代码不再表示一个脚本标记。网页浏览器中是否有不同的功能,可以防止此类攻击发生?
通过新的内容安全策略头信息,较新版本的浏览器已经解决了您的担忧。
通过配置script-src,您可以完全禁止内联JavaScript。请注意,此保护措施不一定会扩展到使用旧版浏览器的用户(请参见CanIUse)。
仅允许白标签脚本将击败大多数JavaScript XSS攻击,但可能需要对您的内容进行重大修改。此外,如果您使用依赖于内联JavaScript的Web框架,则阻止内联JavaScript可能是不切实际的。
没有什么可以真正防止它。
我唯一建议的是对来自用户表单的任何信息进行一些服务器端验证。
俗话说得好:永远不要相信用户