浏览器安全
跨站脚本攻击 (XSS)
XSS 攻击(Cross-Site Scripting)是一种安全漏洞,攻击者通过在网页中插入恶意脚本来窃取用户的敏感信息、劫持会话、篡改网页内容等。
1. XSS 攻击类型
XSS 攻击主要分为以下三种类型:
1. 反射型 XSS(Reflected XSS):
- 恶意脚本通过 URL 参数等被立即反射回用户的浏览器并执行
- 攻击过程:
- 攻击者构造一个带有恶意脚本的 URL 并诱骗用户点击
- 用户点击链接后,服务器将恶意脚本包含在响应中
- 浏览器执行恶意脚本
2. 存储型 XSS(Stored XSS):
- 恶意脚本被存储在服务器上,当其他用户访问相关页面时,恶意脚本被加载和执行
- 攻击过程:
- 攻击者将恶意脚本提交到服务器(如通过留言板、论坛帖子等)
- 恶意脚本被存储在服务器的数据库中
- 其他用户访问该页面时,恶意脚本被加载并执行
3. DOM 型 XSS(DOM-based XSS):
- 恶意脚本通过修改页面的 DOM 结构在浏览器端执行,而不经过服务器
- 攻击过程:
- 攻击者构造一个带有恶意脚本的 URL 并诱骗用户点击
- 用户点击链接后,浏览器解析 URL 并在客户端修改 DOM 结构
- 浏览器执行恶意脚本
2. XSS 防御措施
1. 输入验证和输出编码:
- 对用户输入进行严格验证,拒绝不合法的输入
- 对输出进行编码(如 HTML 编码、JavaScript 编码)以防止恶意脚本执行
2. 使用安全的 JavaScript 库:
- 使用经过验证的 JavaScript 库和框架,这些库和框架默认会对输出进行 编码处理
3. 内容安全策略 (CSP):
- 配置 CSP,通过指定允许加载的内容源来防止 XSS 攻击
4. HTTPOnly 和 Secure 标志:
- 设置 HTTPOnly 和 Secure 标志来保护 cookies,防止被恶意脚本读取和窃取
跨站请求伪造 (CSRF)
CSRF 攻击(Cross-Site Request Forgery)是一种攻击方式,攻击者诱导用户在已认证的情况下执行未授权的操作,从而冒充用户身份进行恶意行为。
1. CSRF 攻击过程
- 用户登录到受信任的网站(如银行网站),并获得会话 cookie
- 攻击者诱导用户访问包含恶意请求的网页(如通过邮件、聊天工具等)
- 用户在不知情的情况下访问恶意网页,恶意请求在用户已认证的状态下被发送到受信任的网站
- 受信任的网站误认为请求是合法用户发出的,执行恶意操作(如转账、修改密码等)
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 请求,并结合其他防御措施,增加攻击难度。