XSS 攻击与防御
一、什么是 XSS 攻击?
XSS(Cross Site Scripting)跨站脚本攻击:是指攻击者在网页中注入恶意脚本代码(通常是 JavaScript),当用户浏览该网页时,脚本会在用户的浏览器中执行,造成信息泄露、会话劫持、伪造操作等安全问题。
常见危害
- 窃取 Cookie:如盗取用户身份令牌,冒充用户身份。
 - 钓鱼欺骗:伪造页面骗取用户敏感信息。
 - 强制操作:如自动发帖、点赞、转账等。
 - 传播蠕虫:自动传播恶意代码到其他用户(萨米_(计算机蠕虫))。
 
二、XSS 攻击类型
1. 存储型(Stored XSS)
攻击者将恶意脚本“存储”在服务器端(如数据库、评论区),其他用户访问时就会触发。
示例:评论区输入 <script>alert('xss')</script>,其他用户浏览页面时弹窗。
2. 反射型(Reflected XSS)
攻击代码不是存储在服务器,而是通过 URL 参数等方式“反射”到页面,用户访问恶意链接时触发。
示例:访问 http://example.com/?name=<script>alert('xss')</script>,页面直接输出 name 参数内容。
3. DOM 型(DOM-based XSS)
攻击代码通过前端 JavaScript 操作 DOM 时插入,比如用 document.write、innerHTML 等不安全方式插入用户输入。
三、XSS 防御方法
1. 输入校验与过滤
- 对所有用户输入进行白名单校验,拒绝非法字符。
 - 过滤特殊字符:如 
< > " ' & /等。 
2. 输出编码(最重要!)
- HTML 输出:将用户输入通过转义后再输出到页面。如 
<转为<,>转为>。 - 前端使用 
textContent或innerText,而不是innerHTML。 
常用函数/库:
- 后端:PHP 的 
htmlspecialchars(),Python 的html.escape(),Java 的StringEscapeUtils.escapeHtml4(),Nodejs 的xss()。 - 前端:推荐自己实现或用成熟库(如 DOMPurify,js-xss,he)
 
3. 使用安全的 API
- 不要直接用 
eval、document.write、innerHTML等插入用户内容。 - 推荐用安全 DOM API:
createElement、appendChild、textContent 
4. 设置安全 HTTP 头
- Content Security Policy (CSP),强制脚本来源:
Content-Security-Policy: default-src 'self';
 - X-XSS-Protection(兼容旧浏览器):
X-XSS-Protection: 1; mode=block
 
5. Cookie 安全
- 设置 
HttpOnly,防止 JS 读取 Cookie。 - 设置 
Secure,仅允许 HTTPS 发送 Cookie。 
6. 模板引擎选择
- 选用自动转义的模板引擎(如 doT.js、ejs、FreeMarker、Django 等)。
 
7. 定期更新依赖
- 框架和第三方库要及时升级,修复已知 XSS 漏洞。
 
四、实际代码示例
1. 后端过滤与转义(Node ejs 示例)
ejs.render("<div><%- user_input %></div>");
# 类似 encodeURIComponent(user_input)
2. 前端防御(避免直接使用 innerHTML 或者 v-html)
<div id="output"></div>
<script>
  const userInput = '<script>alert("xss")</script>';
  document.getElementById('output').textContent = userInput; // 安全
</script>
<template>
<div id="output">{{ userInput }}</div>
</template>
<script>
    const userInput = '<script>alert("xss")</script>';
</script>
3. CSP 头部设置(Nginx 示例)
add_header Content-Security-Policy "default-src 'self'; script-src 'self'";
五、总结
- XSS 是网页安全最常见的攻击之一。
 - 防御重点是:所有用户输入都必须经过 输出编码,而不仅仅是输入校验。
 - 使用安全 API,设置 CSP,选择安全模板引擎,及时升级依赖,可以显著降低 XSS 风险。
 
XSS 攻击与防御的更多相关文章
- web安全-XSS攻击及防御
		
XSS攻击的原理 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻 ...
 - XSS攻击的防御
		
XSS攻击的防御 XSS 攻击是什么 XSS 又称 CSS,全称 Cross SiteScript,跨站脚本攻击,是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式,所以容易被忽略 ...
 - 前端XSS攻击和防御
		
xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...
 - XSS攻击及防御
		
XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.其原理是攻击者向有XSS漏洞的网站中输入 ...
 - XSS攻击及防御(转)
		
add by zhj: 略有修改.另外还有一篇文章值得参考,使用 PHP 构建的 Web 应用如何避免 XSS 攻击,总得来说防御XSS的方法是客户端和服务端都 要对输入做检查,如果只有客户端做检查, ...
 - xss攻击与防御
		
一.XSS攻击 Cross Site Scripting跨站脚本攻击 利用js和DOM攻击. 盗用cookie,获取敏感信息 破坏正常页面结构,插入恶意内容(广告..) 劫持前端逻辑 DDos攻击效果 ...
 - Web 安全之 XSS 攻击与防御
		
前言 黑客,相信大家对这一名词并不陌生,黑客们往往会利用 Web 应用程序的漏洞来攻击咱们的系统.开放式 Web 应用程序安全项目(OWASP, Open Web Application Securi ...
 - 转---如何让前端更安全?——XSS攻击和防御详解
		
前言 平时很少关注安全这块的技术,曾经也买过一本<Web前端黑客技术揭秘>但至今还没翻过,尴尬.今天的早读文章由腾讯优测@小吉带来的分享. 正文从这开始~ 最近深入了解了一下XSS攻击.以 ...
 - Web 攻击之 XSS 攻击及防御策略
		
XSS 攻击 介绍 XSS 攻击,从最初 netscap 推出 javascript 时,就已经察觉到了危险. 我们常常需要面临跨域的解决方案,其实同源策略是保护我们的网站.糟糕的跨域会带来危险,虽然 ...
 - XSS 攻击实验 & 防御方案
		
XSS 攻击&防御实验 不要觉得你的网站很安全,实际上每个网站或多或少都存在漏洞,其中xss/csrf是最常见的漏洞,也是最容易被开发者忽略的漏洞,一不小心就要被黑 下面以一个用户列表页面来演 ...
 
随机推荐
- Windows下python环境安装与管理
			
Python功能强大,适合多种应用场景.安装合适的python环境是开发的第一步.下面是Windows环境下Python环境的安装与管理实战方法. 一.在线环境安装 如果需要安装的环境可以连接互联网, ...
 - vue v-show 失效
			
简介 RT 解决方案 采用 直接 操控dom赋值属性的方式
 - “造芯”之 Proprietary闭源 与 Open Source开源(RISC-V) 对比
			
一.造芯的RISC-V(Open Source) 与 Proprietary 历史鉴证: 共和的Top-Down 与 Bottom-Up的民主 是统一的. Open Source开源 与 Propri ...
 - MacOS-“System Information”这个App用做USB设备的检测与设备文件的确定
			
"System Information"这个Apple自带的GUI小App是检测USB硬件的; 如图所示: 而Linux上是 lsusb 与 lspci 这类command lin ...
 - BIgdataAIML-IBM-A neural networks deep dive - An introduction to neural networks and their programming
			
https://developer.ibm.com/articles/cc-cognitive-neural-networks-deep-dive/ By M. Tim Jones, Publishe ...
 - tauri学习(1)-初体验
			
tauri是一个类似Electron的框架,允许前端程序员来开发桌面应用程序,外层的壳采用Rust语言开发,相比Electron生成的可执行程序更小,今天尝试了下,感觉还不错,按官网的教程只需执行下的 ...
 - Windows关闭自动更新
			
方法1:修改注册表编辑器 文字流程 Win+R 输入 regedit 输入路径 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Uso ...
 - 20212109 实验二《Python程序设计》实验报告
			
实验二 计算器设计 # 20212109 2021-2022-2 <Python程序设计>实验二报告课程:<Python程序设计>班级: 2121姓名: 施铖哲学号:20212 ...
 - win10系统用蓝牙键盘连接无法使用的问题
			
有电脑系统用户说他的电脑win10系统用蓝牙键盘,显示已连接蓝牙,但是键盘就是无法使用该怎么办?电脑想使用无线键盘,多以买了蓝牙键盘,可以,连接以后却发现不能用,我的是win10系统,该怎么办呢?下面 ...
 - Spring的@Import注解简单介绍
			
目录 Spring的@Import注解 作用 示例 1. 将普通Class加入到Spring容器 普通class 2. @Import Java Config 3. 实现了ImportSelector ...