点击劫持简介
点击劫持是一种欺骗性攻击,攻击者通过将一个不可见或伪装的iframe
覆盖在一个网页上,是一种视觉上的欺骗手段
攻击者诱惑用户在该网页上进行操作,在用户不知情的情况下点击透明的iframe
页面
从而使受害者无意中执行了攻击者希望的操作
示例(简HTML CSS,拟)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Clickjacking Example</title>
<style>
.clickjack-layer {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0);
z-index: 1000;
}
.fake-button {
display: block;
width: 200px;
height: 50px;
margin: 100px auto;
background-color: #f00;
text-align: center;
line-height: 50px;
color: #fff;
font-size: 16px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="fake-button">Click Me!</div>
<iframe id="clickjack-iframe" src="http://target.example.com" class="clickjack-layer" frameborder="0"></iframe>
</body>
</html>
HTML结构
div class="fake-button"
:这是一个吸引用户点击的按钮
iframe src="http://target.example.com"class="clickjack-layer"frameborder="0"
: 这是嵌套的iframe
class="clickjack-layer"
设置了透明背景,并使它覆盖整个页面
CSS样式
clickjack-layer
:设置了透明背景和绝对定位,使得iframe覆盖在整个页面之上
fake-button
:定义了按钮的样式。
防御
X-Frame-Options头部
设置HTTP响应头
X-Frame-Options
为DENY
或 SAMEORIGIN
来阻止或限制页面被嵌入到iframe
中
Content Security Policy (CSP)
使用CSP指令frame-ancestors
来更精细地控制哪
些源可以嵌入你的页面
Content-Security-Policy: frame-ancestors 'self';
JavaScript检测
使JavaScript来检查是否在iframe
中运行,并如果检测到这种情况,则可以重新定向或显示警告信息