繁体   English   中英

防止HTML表单操作被更改

[英]Prevent HTML form action from being changed

我的页面上有一个表单,用户可以在其中输入信用卡数据。 是否有可能在HTML中将表单的操作标记为常量以防止恶意JavaScript更改表单的action属性? 我可以想象一个XSS攻击,它改变了表单URL,使用户将他们的秘密数据发布到攻击者的站点。

可能吗? 或者,Web浏览器中是否存在防止这类攻击发生的不同功能?

这种攻击是可能的,但这是防止它的错误方法。 如果黑客可以更改表单的详细信息,他们可以通过AJAX GET轻松发送秘密数据,而无需提交表单。 防止XSS攻击的正确方法是确保对页面上的所有不受信任的内容进行编码,以便黑客首先无法执行自己的JavaScript。


更多关于编码......

StackOverflow上的示例代码是一个很好的编码示例。 想象一下,如果每次有人发布一些示例JavaScript,它实际上是在浏览器中执行的,那会是多么糟糕。 例如,

<script type="text/javascript">alert('foo');</script>

如果不是因为SO编码上面的片段,你会看到一个警告框。 这当然是一个相当无害的脚本 - 我可以编写一些JavaScript来劫持你的会话cookie并将其发送到evil.com/hacked-sessions。 然而,幸运的是,SO并不认为每个人都是出于好意,并且实际上对内容进行了编码。 例如,如果您要查看源代码,您会看到SO已将我完全有效的HTML和JavaScript编码为:

&lt;script type="text/javascript"&gt;alert('foo');&lt;/script&gt;

因此,不是在我使用它们的地方嵌入实际的<>字符,而是用HTML编码的等价物( &lt;&gt; )替换它们,这意味着我的代码不再代表脚本标记。

无论如何,这是编码背后的一般想法。 有关如何编码的更多信息,这取决于您在服务器端使用的内容,但大多数Web框架都包含某种“开箱即用”的HTML编码实用程序。 您的责任是确保在呈现之前始终对用户提供的(或其他不受信任的)内容进行编码。

Web浏览器中是否存在防止这类攻击发生的不同功能?

此后,您通过新的Content-Security-Policy标头解决了较新的浏览器问题。

通过配置script-src ,您可以完全禁止内联javascript。 请注意,此保护不一定会扩展到旧浏览器上的用户(请参阅CanIUse )。

仅允许使用带白标签的脚本会破坏大多数javascript XSS攻击,但可能需要对您的内容进行重大修改。 此外,如果您使用的是严重依赖内联JavaScript的Web框架,阻止内联JavaScript可能是不切实际的。

没有什么可以真正阻止它。

我建议做的唯一事情就是从用户表单到服务器的任何信息进行服务器端验证。

俗话说: 永远不要相信用户

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM