0

有没有办法通过指定一些 HTTP 标头、服务器上的策略或类似内容来禁止浏览器执行某些页面的内联脚本(代码直接放在页面上,而不是外部资源中,即事件处理程序、脚本块等)?我正在寻找一些通用的解决方案:跨浏览器和 HTTP 服务器不可知。

4

2 回答 2

0

基本上,这称为XSS过滤,一个简单的答案是阻止它的输入,或者如果有任何通过,则根本不渲染它们。有很多方法可以做到这一点,图书馆也可以帮助你,具体取决于平台。

在入口点,您应该过滤它们。应始终过滤来自客户的提交。这称为 XSS 过滤。

在渲染方面,html_entities如果您想将特殊字符(尤其是来自用户输入的特殊字符)转义到页面中,您应该执行一些操作。

所有这些都是在服务器上完成的。

于 2013-01-18T12:35:45.330 回答
0

经过大量的谷歌搜索和与大学的一些讨论,我终于找到了解决方案 -内容安全策略(描述这个概念的好文章 - “内容安全策略简介”由 Mike West 撰写)。现在它在 W3C 的候选推荐阶段,但最流行的浏览器已经支持它(不幸的是在 IE 版本 < 10 中支持)。

它完全符合我的要求:

  • 它是一个响应 HTTP 标头,因此它与服务器无关
  • 它(或多或少......)跨浏览器
  • 它可以禁止浏览器执行内联脚本(带有指令unsafe-inline)或 eval(unsafe-eval;eval 是邪恶的)并引入了许多有用的限制(从浏览器安全的角度来看)
于 2013-01-18T21:41:31.203 回答