防止HTML表单操作被更改

Mic*_*zyk 8 html javascript forms xss action

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

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

jma*_*777 5

这种攻击是可能的,但这是防止它的错误方法.如果黑客可以更改表单的详细信息,他们可以轻松地通过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编码实用程序.您的责任是确保在呈现之前始终对用户提供的(或其他不受信任的)内容进行编码.