HTML5安全
HTML5新标签
新标签的XSS
XSSFilter如果建立了一个黑名单,则可能就不会覆盖的HTML5新增的标签和功能
比如HTML5中新增的<video>
标签
<video src="url" onloadedmetadata="XSS1" ondurationchanged="XSS2" ontimeupdate="XSS3" tabidnex="0"></video>
HTML5 Security Cheatsheet: https://html5sec.org
iframe的sandbox
在HTML5中,专门为iframe定义了一个新的属性叫sandbox。使用sandbox属性后,<iframe>
标签加载的内容被视为一个独立的“源”
其中的脚本禁止执行,表单禁止提交,插件禁止加载,指向其他浏览对象的链接也会被禁止
sandbox的属性值:
- allow-same-origin: 允许同源访问
- allow-top-navigation: 允许访问顶层窗口
- allow-forms: 允许提交表单
- allow-script: 允许执行脚本
可有的行为即使是设置了allow-script
也不被允许,比如“弹出窗口”
noreferrer
HTML5中为<a>
标签和<area>
标签定义了一个新的Link Types: noreferrer
浏览器在请求该标签指定的地址时将不再发送Referrer
<a href="xxx" rel="noreferrer">test</a>
Canvas
<canvas>
标签让Javascript在页面中直接操作图片对象,也可以直接操作像素。
攻击者可以通过<canvas>
来破解验证码
Cross-Origin Resource Sharing
www.a.com
向www.b.com
发送一个跨域请求的时候会带上一个Origin Header
来标记HTTP发起的源
www.b.com
返回时会带上一个Access-Control-Allow-Origin
的头
防止CSRF
postMessage——跨窗口传递消息
postMessage允许每一个window(包括当前窗口、弹出窗口、iframes等)对象往其他的窗口发送发送文本消息,从而实现跨窗口的消息传递。这个功能不受同源策略限制,
需要注意的安全问题:
- 可以在接受窗口验证Domain,甚至验证URL,以防止来自非法界面的消息。(实际上是一次同源策略的炎症过程)
- 接受的消息直接写入
innerHTML
甚至直接写入script
中可能会导致DOM based XSS
的产生。因此需要对消息进行安全检查
Web Storage
过去浏览器里能够存储信息的方法:
- Cookie
- Flash Shared Object
- IE UserData
Cookie有最大长度限制,不能存储太多信息。后两者是Adobe与微软自己功能,不是通用标准
WebStorage是一个在客户端的一个有着较为强大和方便的本地存储功能的实现
Web Storage分为Session Storage和Local Storage
Web Storage像一个非关系型数据库,由Key-Value对组成
Web Storage也受到同源策略的约束,每个域的信息只会保存在自己的域下
但是Web Storage也可能方便XSS攻击