• home > webfront > SGML > web >

    web开发前端安全问题总结——web前端安全问题汇总

    Date:

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种 "互联网软件 "采用客户端 服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点

    总结来说

    特性
    CRLF注入
    CSRF(跨站请求伪造)
    SSRF (服务器端请求伪造)

    XSS (跨站脚本攻击)

    攻击对象
    用户浏览器或服务器响应
    用户在已登录站点的会话
    服务器本身
    用户的浏览器
    攻击原理
    向HTTP流中注入特殊字符(\r\n),篡改数据包结构
    伪造请求,利用浏览器自动携带Cookie的机制
    利用服务器端发起请求的功能,将服务器作为攻击跳板


    向网页中注入恶意脚本,使其他用户浏览器执行

    关键特征
    操纵的是HTTP报文格式
    需要用户“已登录”状态,本质是身份借用
    服务器能访问到用户无法直接访问的内外部资源,本质是权限借用

    恶意脚本在受害者浏览器中执行,本质是代码注入

    防御核心思路严格过滤输入中的\r\n字符使用CSRF Token、校验Referer、设置SameSite Cookie限制服务器请求目标(白名单)、禁用危险协议(如file://)对用户输入进行过滤和转义,设置HTTP Only Cookie

    CSRF(Cross-site request forgery)跨站请求伪造

    即攻击者通过伪造请求攻击目标网站漏洞。

    CSRF漏洞检测:

    检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。

    触发CSRF的关键前提(缺一不可)

    1. 用户必须已登录可信网站 A(持有有效会话,比如有效 的cookie/session);

    2. 恶意请求必须是 “跨域” 的(网站 B 向网站 A 发请求);

    3. 网站 A 仅通过 Cookie 验证用户身份(未加额外验证)。

      1. 目标站点在敏感操作上用的是基于浏览器自动发送的凭证(Cookie、HTTP authentication 或某些自动 header),并且没有对请求来源/用途做额外校验。

      2. 攻击者能让用户在其页面触发浏览器向目标站点发请求(<form> 自动提交、<img src=...>、AJAX 在允许的情况下等)。

    工具有:CSRFTesterCSRF Request Builder等。

    防御CSRF攻击:

    1. 通过 referer、token、验证码或者自定义的HTTP头属性信息 来检测用户提交。

    2. 尽量不要在页面的链接中暴露用户隐私信息。

    3. 对于用户修改删除等操作最好都使用post 操作 。

    4. 避免全站通用的cookie,严格设置cookie的域。

    5. 设置referrer-policy规则

    推荐文章:《浅谈CSRF攻击方式

    XSS跨站脚本攻击(Cross Site Scripting)

    即攻击者在通过JS脚本攻击目标网站漏洞。可以分为三大类:

    反射性XSS(非持久性):攻击者构造可被浏览器执行输入的恶意代码(如输入框、URL地址栏),网站没有做拦截就执行攻击者的目标逻辑。

    存储型XSS:网站保存攻击者的恶意代码(服务端存储了客户端的数据,但没有做任何处理,如留言板、用户信息等),并且展示时会执行恶意代码从而实现攻击者的目的。

    DOM-Based型XSS:浏览器(客户端)在DOM解析时直接使用恶意数据

    XSS漏洞检测

    xss攻击主要还是利用白名单对HTML内容进行过滤检测。

    软件检测:Burpsuit XDT

    防御XSS攻击

    1. 输入输出白名单检查:过滤、转义

    2. 对重要cookie信息设置httpOnly

    3. 设置CSP

    推荐文章:《XSS漏洞攻击原理与解决办法》、《XSS漏洞的原理

    ClickJacking点击劫持攻击

    即攻击者劫持用户的点击完成攻击目标。如通过在色情图片上悬浮透明构造好的iframe表单。

    防御ClickJacking

    设置X-Frame-Options

    通过在网页中添加js脚本阻止被iframe嵌套

    推荐文章《再谈Hijacking——JavaScript ClickJacking原理浅析

    The target="_blank" 安全缺陷

    1. 控制跳转前的页面:攻击者在目标网站插入target="_blank"链接,用户点击插入的链接页面后,执行window.opener.location = 'https://www.zhoulujun.cn/',跳转到钓鱼页面,而用户而不知情况下完成钓鱼攻击。

      防御措施:为 target="_blank" 加上 rel="noopener noreferrer" 属性

    2. 控制跳转后的页面:具体查看《前端黑魔法之远程控制地址栏》,节选代码如下:

    <a href="https://www.baidu.com" target="baidu" id="baidu" onclick="return start()">click me</a>
    <script>
        function start() {
            setInterval(function() {
                baidu.href="http://675ba661.2m1.pw/baidu";
                baidu.click(); 
            }, 10000);
        }
    </script>

    这两种攻击我觉得都比较鸡肋,尤其是后者。

    推荐文章:《危险的 target="_blank" 与 “opener”》《神奇的opener对象

    CRLF(回车换行注入攻击)

    推荐一读《新浪某站CRLF Injection导致的安全问题

    攻击的本质是注入特殊字符,篡改协议结构。CRLF代表“回车+换行”(\r\n),在HTTP协议中用于分隔头部字段和头部与正文

    危害体现:

    • 会话固定:注入一个Set-Cookie头,为用户设置一个已知的Session ID——本质是响应头注入

    • XSS攻击:注入两个CRLF提前结束头部,然后在正文中直接写入恶意脚本,这种方式甚至可以绕过一些浏览器的XSS过滤器——本质是 CRLF 辅助注入 XSS

    这种防范很简单,只要过滤回撤换行符号即可!

    SSRF:服务器端请求伪造 —— 盗用服务器的 “网络权限漏洞”

    漏洞原理:欺骗服务器发起「未授权的网络请求」,核心逻辑:

    1. 服务器提供了 “需要发起外部请求” 的功能(比如 URL 预览、图片爬虫、第三方接口调用);

    2. 该功能允许用户输入 URL 等参数,但未过滤非法地址(比如内网 IP、敏感端口);

    3. 攻击者构造恶意 URL(比如内网地址 127.0.0.1:3306、192.168.1.1/admin);

    4. 服务器作为 “请求发起者”,执行该 URL 请求(因为服务器的网络权限远高于用户端,能访问内网资源);

    5. 服务器将请求结果返回给攻击者,导致内网信息泄露或攻击。

    核心特点:攻击目标是「服务器的网络权限」,利用服务器作为 “跳板” 访问内网,攻击发起者是服务器端

    繁殖措施:

    • 禁止用户控制完整 URL,或严格限制协议(只允许 https)。

    • 禁止访问私有 IP 地址(如 10.0.0.0/8, 192.168.0.0/16, 127.0.0.1 等)。

    • 使用白名单域名。

    • 禁用不必要的 URL 协议(如 file://, gopher://, dict://)。



    转载本站文章《web开发前端安全问题总结——web前端安全问题汇总》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/SGML/web/2015_1016_319.html