你无法阅读任何关于安全性的内容而不会遇到关于HTML安全性的夸大其词。这是正确的吗?布拉德说不是。网络安全状况比以往任何时候都更好,而HTML5在很大程度上要为此负责。
XSS
脚本注入(或XSS,或“跨站点脚本”)是最常见的应用程序漏洞(约占所有Web应用程序的95%)。
“如果其他人的代码能够在你的Web应用程序中运行,那么它就不再是你的Web应用程序了。”
当前防御措施
- 输入过滤 - 删除危险内容
- 输出过滤 - 对用户数据进行编码,使其不被视为标记
HTML5中对此有更多内容(因此出现了夸大其词),但这些过滤器已经失效了。

关于此主题的书籍:Web应用程序混淆。
“XSS过滤器从一开始就注定要失败。”
因为:浏览器不同,算法是保密的,浏览器具有专有功能等。
HTML5现在首次拥有“官方”解析模型。通过标准化它,这改变了网络安全的态势。
@hillbrad:“封闭平台通过提供功能来争夺开发者。开放平台通过提供质量来争夺用户” #w3conf
— Tim Hettler (@timhettler) 2013年2月22日
内容安全策略(由Mozilla发明,现在在W3C中)。HTTP标头用于在客户端为脚本和其他内容强制执行最小权限环境。这不是一个新想法。布拉德将此与荷马的故事联系起来,荷马把自己绑在桅杆上并告诉每个人不要听他所说的话。
内容安全策略就像一组关于忽略/允许事物的指令(白名单/黑名单)。例如,只允许来自此域的脚本。仅允许来自这些其他域的iframe(可能是YouTube和Vimeo)。仅允许来自这些其他域的字体(可能是你的CDN)。让我想起了应用程序缓存清单文件。我以前不知道它的存在。通过元标记应用。
模板是构建Web应用程序最常见的模式。“它们是XSS漏洞的温床”。有一个新的模板规范可以解决这个问题。
安全混搭
这些类型的应用程序在一个应用程序中整合了来自多个来源的内容。几乎每个应用程序都是这样,或多或少。
过去,Flash允许这样做,因为它有一个cross-domain-policy
。
“crossdomain.xml中的星号(“*”)是一场巨大的灾难。”
#w3conf @hillbrad:crossdomain.xml主文件中包含“*”会使互联网上的每个SWF都能利用你的网站/内容。
— Faruk Ateş (@KuraFire) 2013年2月22日
如何在HTML中进行跨域操作?一直存在一个漏洞。你可以从另一个域加载脚本,并且可以在该脚本中放置要使用的内容。(JSONP)。布拉德很早就担心这个问题,但没有人听。几周前Facebook遇到一个大问题时,他们才开始听。
跨源资源共享(CORS)(存在4-6年)是解决这个问题的未来方向。
#w3conf @hillbrad:script src提供你必须信任的代码;CORS提供你可以验证的数据
— Kevin Marks (@kevinmarks) 2013年2月22日
(我们在 CodePen 上越来越多地使用它。这个 HTML5 Rocks教程 非常棒。)
“自愿放松同源策略。”
有些人说在CORS中也要“警惕滥用的星号”,但实际上它并没有那么严重。
如果你需要来自其他地方的数据,则有更多选择。
- 沙盒iframe -
<iframe sandbox="allow-scripts" src="different.domain"></iframe>
- postMessage -
window.parent.postMessage(loginName, "trusted.mydomain.com");
,在收到时进行测试
“长期以来Web安全领域最重要的论文之一:” HTML5应用程序中的权限分离(PDF),作者:Devdatta Akhawe、Prateek Saxena和Dawn Song。
“将你自己的代码视为混搭。”
未来将有大量安全方面的改进。未来是光明的。
那么,在Web应用程序中使用Iframe怎么样?谷歌不是因为这个受到惩罚吗?我的意思是,人们在他们的网站上使用Iframe已经过时了,所以……?