当前位置: 首页 > news >正文

跨站脚本攻击(XSS)与跨站请求伪造(CSRF)的介绍、区别和预防

概念

跨站脚本攻击(XSS)

攻击者通过在网页中注入恶意脚本(如 JavaScript),当用户访问该页面时,脚本会在用户浏览器中执行,从而窃取数据、劫持会话或控制用户行为。

“我偷你的数据”(脚本注入,用户受害)。

事件:

2011 年索尼 PSN 被黑事件,用户数据泄露,其中就涉及 XSS 漏洞。这个案例展示了 XSS 如何被用来窃取用户会话,进而访问敏感信息。

核心机制

  1. 注入脚本:攻击者利用网页对用户输入的信任,将恶意代码插入评论区、搜索框等可输入区域。
    示例:在论坛评论中输入 <script>alert('XSS');</script>
  2. 用户触发:用户访问被注入脚本的页面时,浏览器会执行恶意代码。
  3. 攻击目标:直接针对用户,窃取其数据或会话信息。

常见类型

  • 存储型 XSS:脚本被永久存储在服务器(如数据库),所有访问该页面的用户都会触发。
  • 反射型 XSS:脚本存在于 URL 参数中,需诱骗用户点击特定链接。
  • DOM 型 XSS:通过修改页面 DOM 结构触发,不依赖服务器响应。

跨站请求伪造(CSRF)

攻击者伪造用户身份,在用户不知情的情况下,利用其已登录的会话向目标网站发送恶意请求,执行敏感操作(如转账、修改密码)

“我用你的身份搞破坏”(伪造请求,网站受害)。

事件:

2014 年的 WordPress 插件漏洞导致管理员账户被劫持,攻击者利用 CSRF 伪造请求,执行恶意操作。这个案例说明 CSRF 在实际应用中的威胁。

核心机制

  1. 会话劫持:用户已登录目标网站,Cookie 中包含会话凭证。
  2. 伪造请求:攻击者构造包含合法请求参数的页面(如自动提交的表单),诱骗用户访问。
    示例:钓鱼网站的 <form action="https://bank.com/transfer" method="POST">...</form>
  3. 服务器误判:服务器验证请求时,因 Cookie 合法而认为是用户的正常操作。

攻击目标
间接攻击网站,利用用户权限执行非法操作,而非直接窃取用户数据。

xss与csrf的相同和不同

相同点

  1. 攻击媒介
    均通过用户浏览器执行恶意操作,依赖浏览器与服务器的交互。
  2. 利用用户身份
    攻击者均需借助用户已登录的会话(如 Cookie)实施攻击。
  3. 潜在危害
    可能导致用户数据泄露、账户被盗或网站功能滥用。

不同点

对比维度跨站脚本攻击(XSS)跨站请求伪造(CSRF)
核心机制注入恶意脚本到网页中执行伪造用户请求欺骗服务器
攻击目标用户(窃取数据或会话)网站(执行用户权限操作)
数据流向攻击者→用户→服务器攻击者→服务器(冒用用户身份)
触发条件用户主动访问含恶意脚本的页面用户已登录且未退出的情况下访问恶意页面
常见场景评论区、搜索框注入脚本钓鱼链接诱导点击

防范措施

 跨站脚本攻击(XSS)的防护

  • 输入过滤
    对用户输入的数据进行严格验证,禁止 HTML/JavaScript 等危险字符(如 <script>)。
    // 示例:过滤<script>标签
    function sanitizeInput(input) {
      return input.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '');
    }
    
  • 输出编码
    在 HTML、JavaScript、URL 等上下文中对输出内容进行编码,防止脚本执行。
    <!-- 示例:对用户输入的name进行HTML编码 -->
    <p>欢迎用户:<%= encodeForHTML(user.name) %></p>
    
  • 内容安全策略(CSP)
    通过 HTTP 头或 meta 标签限制可执行脚本的来源。
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'">
    
  • HttpOnly Cookie
    设置 Cookie 的HttpOnly属性,防止 XSS 窃取会话。

跨站请求伪造(CSRF)的防护

  • CSRF 令牌(Token)
    在表单或请求中嵌入随机生成的令牌,服务器验证令牌合法性。
    <!-- 示例:表单中添加CSRF令牌 -->
    <input type="hidden" name="csrf_token" value="随机字符串">
    
  • 验证 Referer 头
    检查请求来源是否为可信域名,但存在绕过风险(如浏览器不发送 Referer)。
  • SameSite Cookie 属性
    设置 Cookie 的SameSite=Strict/Lax,防止第三方网站发起请求。
  • 双因素认证(2FA)
    对敏感操作(如转账、修改密码)强制使用 2FA,降低 CSRF 危害。

总结

  • XSS:重点在于防止脚本注入,通过输入过滤、输出编码和 CSP 实现。
  • CSRF:核心是验证请求的合法性,依赖令牌机制和 Cookie 安全属性。
  • 组合防护:两者可结合使用,如HttpOnly+SameSite Cookie 同时增强对 XSS 和 CSRF 的防御。

在实际开发中,需根据具体场景选择防护策略,并定期进行安全测试,如使用库博静态代码分析工具进行安全检测,及时发现代码中存在的各类XSS和CSRF漏洞,及时发现及时修复,防止软件投入使用后,造成更大的损失。

相关文章:

  • 程序化广告行业(74/89):行业发展驱动因素与未来展望
  • 帆软fvs文件中某表格新增数据来声提醒
  • Kotlin日常使用函数记录
  • JavaScript逆向工程实战:如何精准定位加密参数生成位置
  • 大模型学习七:‌小米8闲置,直接安装ubuntu,并安装VNC远程连接手机,使劲造
  • 国网B接口协议资源上报流程详解以及上报失败原因(电网B接口)
  • 嵌入式---灰度传感器
  • nginx镜像创建docker容器,及其可能遇到的问题
  • 通过 SSH 方式访问 GitHub 仓库
  • AI创业风向标:构建下一代「AI叙事创作平台」
  • 为什么在模型训练过程中,不同的张量(比如输入数据和模型参数)被放置在了不同的 GPU 设备上,而模型要求所有相关张量都在同一个设备上才能正确计算
  • AI日报 - 2025年4月10日
  • Django 生成PDF文件
  • 【无标题】linux打包utools为appimage
  • “Common::PluginInterface”: 无法实例化抽象类
  • 线程控制
  • Node.js EventEmitter 深入解析
  • 从零开始学Python游戏编程17-函数2
  • 手机静态ip地址怎么获取?方法与解析‌
  • ESModule和CommonJS在Node中的区别
  • 如何给网站做推广/产品的推广及宣传思路
  • 做网站的有哪些学校/友情链接交易购买
  • 公司网站建设 阜阳/百度竞价推广计划
  • 杭州做企业网站/市场营销手段13种手段
  • 网站建设 工业 青岛/网络营销就业前景和薪水
  • 网站制作的公司/提升关键词排名有哪些方法