2026年5月27日 01:03
什么是 XSS 攻击?
XSS(跨站脚本攻击)的本质是攻击者把自己的 JS 代码注入到你的网页里,在真实用户的浏览器上执行。能做的坏事包括:偷 cookie、篡改页面内容、劫持用户操作。
三种类型:
- 存储型:恶意脚本存到了服务器(数据库、评论、留言),用户访问页面时被返回执行。危害最大,不需要诱导点击。
- 反射型:恶意脚本放在 URL 参数里,服务器直接拼到响应页面中。需要诱导用户点击构造好的链接。
- DOM 型:纯客户端问题——前端 JS 把 URL 参数或用户输入直接用
innerHTML插到 DOM 里,没有经过后端。
防御三件套:
- 输出转义:所有用户输入在输出到 HTML 前做转义(
<→<等),不信任任何用户数据 - CSP(内容安全策略):HTTP 头告诉浏览器只允许执行特定来源的脚本
- HttpOnly Cookie:关键 cookie 标记 HttpOnly,JS 读不到,即使被 XSS 也偷不走
追问
XSS 和 CSRF 有什么区别?
XSS 是在受害者浏览器里执行恶意 JS,利用的是对网站的信任。CSRF 是诱导受害者发请求到已登录的网站,利用的是网站对浏览器的信任。
CSP 怎么配置?
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-xxx'。核心思想:白名单机制,不在白名单里的脚本一律不执行。但 CSP 配置需要充分测试,容易把正常功能挡掉。
富文本编辑器怎么防 XSS?
不能用简单的转义(会把格式也干掉)。正确做法:白名单过滤标签和属性(如 DOMPurify),只允许 <b>、<i>、<a> 等安全的标签,移除 onclick、onerror 等事件处理器和 javascript: 协议。