[W3Conf] 布拉德·希尔: “HTML5 安全现实”

Avatar of Chris Coyier
克里斯·科耶

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200美元免费额度!

布拉德·希尔 (@hillbrad) 在贝宝工作,并与W3C合作处理安全问题。

这些是我在旧金山举行的 W3Conf 上他演讲的笔记,作为 这个现场博客系列 的一部分。

你无法阅读任何关于安全性的内容而不会遇到关于HTML安全性的夸大其词。这是正确的吗?布拉德说不是。网络安全状况比以往任何时候都更好,而HTML5在很大程度上要为此负责。

XSS

脚本注入(或XSS,或“跨站点脚本”)是最常见的应用程序漏洞(约占所有Web应用程序的95%)。

“如果其他人的代码能够在你的Web应用程序中运行,那么它就不再是你的Web应用程序了。”

当前防御措施

  • 输入过滤 - 删除危险内容
  • 输出过滤 - 对用户数据进行编码,使其不被视为标记

HTML5中对此有更多内容(因此出现了夸大其词),但这些过滤器已经失效了。

“我刚刚向你展示了恐怖大陆的海岸线。”

关于此主题的书籍:Web应用程序混淆

“XSS过滤器从一开始就注定要失败。”

因为:浏览器不同,算法是保密的,浏览器具有专有功能等。

HTML5现在首次拥有“官方”解析模型。通过标准化它,这改变了网络安全的态势。

内容安全策略(由Mozilla发明,现在在W3C中)。HTTP标头用于在客户端为脚本和其他内容强制执行最小权限环境。这不是一个新想法。布拉德将此与荷马的故事联系起来,荷马把自己绑在桅杆上并告诉每个人不要听他所说的话。

内容安全策略就像一组关于忽略/允许事物的指令(白名单/黑名单)。例如,只允许来自此域的脚本。仅允许来自这些其他域的iframe(可能是YouTube和Vimeo)。仅允许来自这些其他域的字体(可能是你的CDN)。让我想起了应用程序缓存清单文件。我以前不知道它的存在。通过元标记应用。

模板是构建Web应用程序最常见的模式。“它们是XSS漏洞的温床”。有一个新的模板规范可以解决这个问题。

安全混搭

这些类型的应用程序在一个应用程序中整合了来自多个来源的内容。几乎每个应用程序都是这样,或多或少。

过去,Flash允许这样做,因为它有一个cross-domain-policy

“crossdomain.xml中的星号(“*”)是一场巨大的灾难。”

如何在HTML中进行跨域操作?一直存在一个漏洞。你可以从另一个域加载脚本,并且可以在该脚本中放置要使用的内容。(JSONP)。布拉德很早就担心这个问题,但没有人听。几周前Facebook遇到一个大问题时,他们才开始听。

跨源资源共享(CORS)(存在4-6年)是解决这个问题的未来方向。

(我们在 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。

“将你自己的代码视为混搭。”

未来将有大量安全方面的改进。未来是光明的。

幻灯片