Files
2025-09-25 03:32:26 +08:00

31 lines
2.1 KiB
Markdown

### XSS 防御方法
**1. 对用户输入进行严格的过滤和验证**
永远不要信任用户的任何输入
- **白名单过滤**:只允许输入符合预定规则的字符。比如,如果一个输入框只用于输入姓名,那么只允许汉字、字母和空格通过
- **黑名单过滤**:过滤掉危险的HTML标签和属性,如 `<script>``<iframe>``<img>``onerror` 属性等。然而,这种方法容易被绕过,不推荐作为主要的防御手段。攻击者可以通过大小写混合、特殊编码或利用不常见的HTML标签来绕过黑名单
**2. 对输出进行编码(转义)**
这是防御 XSS 最有效、最关键的方法。当动态内容被渲染到页面时,必须对其中的特殊字符进行**转义**,使其失去代码的含义,而只作为纯文本显示
- **HTML实体编码**:将一些HTML特殊字符转换成HTML实体,例如:
- `<` 转换为 `&lt;`
- `>` 转换为 `&gt;`
- `"` 转换为 `&quot;`
- `'` 转换为 `&#39;`
- **不同上下文的编码**:转义需要根据输出的上下文来选择不同的编码方式。
- **在HTML元素中**:使用 HTML 实体编码
- **在JavaScript代码中**:使用 JavaScript 转义,将特殊字符转成 `\uXXXX` 的形式
- **在URL参数中**:使用 URL 编码,将特殊字符转成 `%XX` 的形式
**3. 使用HTTP响应头增强防御**
通过配置 Web 服务器或应用程序的 HTTP 响应头,可以进一步增强对 XSS 的防御
- **CSP (Content Security Policy)**:这是一个强大的防御机制,它可以告诉浏览器哪些外部资源(脚本、样式、图片等)可以被加载。通过配置 CSP 策略,你可以:
- **限制脚本来源**:只允许从可信域名加载 JavaScript 脚本,从而阻止外部恶意脚本的注入
- **限制内联脚本**:禁止执行 HTML 中的内联脚本(`<script>...</script>`),强制所有脚本都以文件的形式加载
- **X-XSS-Protection**:这是一个 HTTP 响应头,可以启用浏览器内置的 XSS 过滤器。虽然它不是一个完美的解决方案,但在一些旧版浏览器中仍然有一定作用