2025好运-浏览器篇-XSS和CSRF

81 阅读2分钟

XSS(跨站脚本攻击)

攻击者向网页注入恶意脚本,当其他用户浏览该页面时,脚本会在用户浏览器中执行。

原理

  1. 攻击者将恶意脚本注入到一个网页中(例如通过用户输入的表单、评论区或 URL 参数)。
  2. 受害者访问该网页时,浏览器会执行嵌入的恶意脚本。
  3. 恶意脚本利用受害者的身份认证信息(如 Cookie)执行操作,例如窃取用户的会话信息、修改网页内容或发送虚假请求。

防御措施

  • 输入验证:对用户输入进行严格验证,过滤掉特殊字符(如 <, >, & 等)。
  • 输出编码:在显示用户输入的内容时,将其编码为 HTML 实体(如 < 转换为 &lt;)。
  • 使用 Content Security Policy (CSP) :限制网页中可以加载的脚本来源。
  • 避免使用危险的 JavaScript 方法(如 evalinnerHTML)。
  • 使用安全库:如 DOMPurify 来清理 HTML 内容
import DOMPurify from 'dompurify'; 
const dirtyHTML = '<div><script>alert("XSS!");</script><p>Safe content</p></div>'; 
const cleanHTML = DOMPurify.sanitize(dirtyHTML); 
console.log(cleanHTML); // 输出: <div><p>Safe content</p></div>

CSRF(跨站请求伪造)

攻击者利用受害者的身份认证信息(如 Cookie),在用户不知情的情况下,冒充用户向服务器发送恶意请求,执行未授权的操作。

原理

  • 用户登录目标网站并保持会话。
  • 用户访问攻击者控制的网站或点击恶意链接。
  • 攻击者利用用户的会话,向目标网站发送伪造的请求。

防御措施

  • 使用 CSRF Token:在表单或请求中添加一个随机生成的 Token,服务器验证该 Token 是否匹配
  • 验证 Referer 头: 检查请求的来源是否合法
  • SameSite Cookie 属性:设置 Cookie 的 SameSite 属性为 Strict 或 Lax,限制跨站请求
  • 双重验证:对敏感操作(如转账)要求用户进行二次验证(如输入密码或验证码)

总结

特性XSSCSRF
攻击目标用户浏览器目标网站
攻击方式注入恶意脚本伪造用户请求
防御重点输入验证、输出编码、CSPCSRF令牌、Referer检查、SameSite
危害窃取会话、重定向、钓鱼执行未经授权操作、窃取数据