跳到主要内容

浏览器安全

跨站脚本攻击 (XSS)

XSS 攻击(Cross-Site Scripting)是一种安全漏洞,攻击者通过在网页中插入恶意脚本来窃取用户的敏感信息、劫持会话、篡改网页内容等。

1. XSS 攻击类型

XSS 攻击主要分为以下三种类型:

1. 反射型 XSS(Reflected XSS)

  • 恶意脚本通过 URL 参数等被立即反射回用户的浏览器并执行
  • 攻击过程:
    1. 攻击者构造一个带有恶意脚本的 URL 并诱骗用户点击
    2. 用户点击链接后,服务器将恶意脚本包含在响应中
    3. 浏览器执行恶意脚本

2. 存储型 XSS(Stored XSS)

  • 恶意脚本被存储在服务器上,当其他用户访问相关页面时,恶意脚本被加载和执行
  • 攻击过程:
    1. 攻击者将恶意脚本提交到服务器(如通过留言板、论坛帖子等)
    2. 恶意脚本被存储在服务器的数据库中
    3. 其他用户访问该页面时,恶意脚本被加载并执行

3. DOM 型 XSS(DOM-based XSS)

  • 恶意脚本通过修改页面的 DOM 结构在浏览器端执行,而不经过服务器
  • 攻击过程:
    1. 攻击者构造一个带有恶意脚本的 URL 并诱骗用户点击
    2. 用户点击链接后,浏览器解析 URL 并在客户端修改 DOM 结构
    3. 浏览器执行恶意脚本

2. XSS 防御措施

参考:如何防止 XSS 攻击?- 美团技术团队

1. 输入验证和输出编码

  • 对用户输入进行严格验证,拒绝不合法的输入
  • 对输出进行编码(如 HTML 编码、JavaScript 编码)以防止恶意脚本执行

2. 使用安全的 JavaScript 库

  • 使用经过验证的 JavaScript 库和框架,这些库和框架默认会对输出进行编码处理

3. 内容安全策略 (CSP):在服务器端设置 CSP 头,限制页面可以加载的资源

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'

4. HTTPOnly 和 Secure 标志

  • 设置 HTTPOnly 和 Secure 标志来保护 cookies,防止被恶意脚本读取和窃取

跨站请求伪造 (CSRF)

CSRF 攻击(Cross-Site Request Forgery)是一种攻击方式,攻击者诱导用户在已认证的情况下执行未授权的操作,从而冒充用户身份进行恶意行为。

1. CSRF 攻击过程

  1. 用户登录到受信任的网站(如银行网站),并获得会话 cookie
  2. 攻击者诱导用户访问包含恶意请求的网页(如通过邮件、聊天工具等)
  3. 用户在不知情的情况下访问恶意网页,恶意请求在用户已认证的状态下被发送到受信任的网站
  4. 受信任的网站误认为请求是合法用户发出的,执行恶意操作(如转账、修改密码等)

2. CSRF 防御措施

1. CSRF 令牌

  • 在每个敏感请求中包含一个唯一的 CSRF 令牌,服务器验证令牌的有效性,防止伪造请求
  • 令牌应在服务器端生成并验证,确保每次请求的令牌是唯一且有效的

2. 双提交 cookie

  • 在请求中同时提交 cookie 和令牌,服务器验证二者一致性
  • 这种方法适用于不能使用服务器端存储状态的场景

3. Referer 和 Origin 头验证

  • 通过验证请求头中的 Referer 和 Origin 字段,确保请求来源于合法页面
  • 这种方法需要小心处理 Referer 和 Origin 字段的缺失和伪造问题

4. Samesite 属性

  • 设置 cookie 的 Samesite 属性为 Strict 或 Lax,限制跨站请求携带 cookie
  • Strict 模式完全禁止跨站请求携带 cookie,Lax 模式允许部分安全的跨站请求

5. POST 请求

  • 对于敏感操作,使用 POST 请求而不是 GET 请求,并结合其他防御措施,增加攻击难度。