Web 防御基础知识笔记

103 阅读6分钟

Web 防御基础知识笔记


一、针对 XSS 的防御

XSS(跨站脚本攻击)是 Web 安全中常见的攻击类型,攻击者通过在网站页面中注入恶意脚本,窃取用户敏感数据或操控用户的行为。以下是常见的 XSS 防御方法。

1. 前端主流框架默认防御 XSS

现代前端框架(如 React、Angular、Vue 等)已经内置了许多防范 XSS 的机制。

  • React:默认采用了 自动转义(Auto-escaping)技术,任何插入到 HTML 中的内容都会被转义,防止恶意脚本执行。
    例如,React 会自动转义用户输入中的
  • Angular:Angular 在模板中内置了防止 XSS 的机制,通过 绑定来自动处理用户输入并进行转义。它的 Angular Sanitizer 会清理可能导致 XSS 的内容。
  • Vue:Vue 会自动处理插值表达式中插入的 HTML,避免恶意代码的执行。
2. Google Closure Library

Google Closure Library 是一个 JavaScript 工具库,提供了内置的安全机制来防御 XSS。通过库中的 goog.string或 goog.html 模块,可以防止不安全的用户输入直接插入到 HTML 中。它提供了 DOM 扩展来处理和过滤潜在的恶意内容。Closure Library 的设计哲学是 最小化风险,并通过合理的类型系统和代码审查确保安全。

3. DOM Purify

DOMPurify 是一个用来清理 HTML、SVG 等内容的 JavaScript 库,旨在防止 DOM-based XSS 攻击。它通过移除可能导致 XSS 攻击的标签、属性和事件处理器,确保在浏览器中呈现的内容是安全的。DOMPurify 的优势在于 高效兼容性好,能够与不同浏览器配合使用。它适用于 用户输入外部内容的插入,能有效防止 XSS 攻击。

4. Content Security Policy(CSP)

CSP(Content Security Policy)是一种浏览器安全机制,用于检测和控制网页资源的加载和执行。CSP 可以有效防止 XSS 攻击,因为它能限制哪些脚本、图片、样式表等资源可以加载,并防止加载不可信的外部资源。

通过设置 CSP 策略,开发者可以限制页面内脚本的来源。例如,设置 CSP 为只允许来自同源(即与当前域名相同)的脚本执行:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self';">

CSP 不仅可以防止 XSS,还可以减少数据泄露、点击劫持等安全问题。


二、CSRF 防御

CSRF(跨站请求伪造)攻击通过冒充合法用户发起恶意请求,通常利用用户的身份验证信息。防御 CSRF 攻击的常见方法包括请求头部的设置、令牌验证等。

1. 请求头部防御

通过检查请求头部中的 OriginReferer 字段,可以有效防止来自恶意网站的跨站请求。如果请求的来源不合法,可以阻止该请求。

  • Origin:通常用于检查请求的来源,防止其他站点的请求伪造。
  • Referer:检查请求的来源页面,确保请求是从合法页面发起。
2. CSRF Token

CSRF Token 是防御 CSRF 攻击的常见方法。每次用户发起请求时,服务器都会生成一个唯一的 Token,并将该 Token 隐藏在表单中或作为请求的一部分。当用户提交请求时,服务器会检查请求中携带的 Token 是否与服务器存储的 Token 匹配,若不匹配则拒绝请求。

通过使用 CSRF Token,攻击者无法伪造合法的请求,因为他们无法获取有效的 Token。

3. CSRF Iframe

CSRF Iframe 防御方法通过嵌入一个隐藏的 Iframe 来传递 CSRF Token。此方法将 Token 保存在 Iframe 的页面中,并通过 JavaScript 读取它进行验证。由于 Iframe 是跨域的,攻击者无法访问该 Token,从而避免 CSRF 攻击。

4. CSRF Anti-Pattern

有些防御方法可能并不安全,比如依赖 HTTP RefererOrigin 字段进行防御。由于这些字段可以被客户端伪造,因此不推荐依赖它们作为唯一的防护手段。


三、避免用户信息被携带

1. SameSite Cookie

SameSite 是一种 Cookie 属性,用于防止跨站请求时将 Cookie 自动发送。通过设置 SameSite 属性为 StrictLax,可以有效避免恶意网站在未授权的情况下携带用户的身份信息进行请求。

  • Strict:仅在同源请求中发送 Cookie。
  • Lax:在导航到目标站点时发送 Cookie,但跨站请求时不会发送。
2. SameSite VS CORS

SameSiteCORS(跨源资源共享) 都是防止 CSRF 攻击的策略。

  • SameSite:主要用于控制 Cookie 的发送行为,限制 Cookie 在跨站请求中的携带。
  • CORS:允许服务器声明哪些外部域可以访问其资源。

两者可以结合使用,以提升安全性。


四、Injection 攻击防御

1. Regex DoS

正则表达式拒绝服务(Regex DoS)攻击是通过精心构造的正则表达式,使服务器在处理时消耗大量资源,导致服务崩溃。防御 Regex DoS 的方法包括:

  • 优化正则表达式,避免使用过于复杂的模式。
  • 使用更高效的正则引擎和技术,如提前编译正则。
2. DDoS(分布式拒绝服务)防御

DDoS 攻击通过分布式网络对目标进行大规模的流量攻击,导致服务器资源耗尽。常见防御措施包括:

  • 使用 CDN(内容分发网络) 分散流量,缓解流量冲击。
  • 配置 Web 应用防火墙(WAF) 来检测和拦截恶意请求。

五、HTTPS 和中间人攻击防御

HTTPS(HyperText Transfer Protocol Secure)是一种安全的 HTTP 协议,通过 SSL/TLS 加密 保证通信过程中的数据不被窃取或篡改。HTTPS 可以有效防止中间人攻击。

1. HTTPS 特性
  • 加密通信:数据在传输过程中加密,防止被窃听。
  • 身份验证:通过 SSL/TLS 证书验证服务器身份,防止遭遇伪装。
  • 数据完整性:通过哈希校验确保数据在传输过程中没有被篡改。
2. Subresource Integrity(SRI)

SRI 是一种浏览器安全特性,允许网页验证外部资源的完整性。它通过将哈希值嵌入 HTML 标签中,确保加载的资源未被篡改。
例如:

<script src="https://example.com/script.js" integrity="sha384-..."></script>

总结

Web 安全防御包括多种技术和策略,从 XSS 和 CSRF 的防御到 Injection 攻击、DDoS 和 HTTPS 的保护,每种方法都有其特定的应用场景。结合这些防御措施可以显著提高 Web 应用的安全性,降低被攻击的风险。在设计和开发时,遵循最佳安全实践并持续进行安全审计和更新,能够有效保护用户和服务的安全。