# 特征
* 用户亲手操作
* 用户不知情
* ……
# 危害
* 盗取用户资金(转账、消费)
* 获取用户敏感信息
* ……
# 原理
目标网站以透明的`iframe`的形式嵌入到攻击网站中。
# 防御
## Javascript 禁止内嵌
```javascript
// top:攻击者文档的window对象;
// window:被嵌入的iframe文档的window对象
if (top.location !== window.location) {
top.location = window.location;
}
```
但这种办法并不能完全防御,比如:
```html
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>csrf demo</title>
</head>
<body style="background:url(clickhijack.png) no-repeat">
<iframe style="opacity:0" src="http://localhost:1521/post/1" sandbox="allow-form" width="800" height="600"></iframe>
</body>
</html>
```
> 当`iframe`标签中设置了sandbox属性时,嵌入页面`http://localhost:1521/post/1`中的脚本会被禁止运行,自然`top.location = window.location`这段防御脚本就没用了。
> `sandbox="allow-form"`是说禁止包括脚本运行在内的很多功能,但是允许表单提交。
## X-FRAME-OPTIONS 禁止内嵌
对某个网页设置`http`头`X-Frame-Options`
> X-Frame-Options: DENY // 该网页不允许被内嵌
> X-Frame-Options: SAMEORIGIN // 该网页仅允许被同域名的网页内嵌
> X-Frame-Options: ALLOW-FROM // 该网页仅允许被指定的网页内嵌
## 其他辅助手段
比如:验证码