一、XSS(跨站脚本攻击)预防
XSS 是指攻击者向目标网站注入恶意脚本,从而在用户浏览器中执行。
1. 输入过滤
- 清理用户输入 :
- 拦截或清理HTML特殊字符(如
<
,>
,'
,"
,&
)。 - 使用安全库,如:
- JavaScript:
DOMPurify
。 - Python:
bleach
。
- JavaScript:
- 在前端和后端同时验证输入。
- 拦截或清理HTML特殊字符(如
2. 输出转义
- HTML转义 :
- 输出动态数据时,将特殊字符转义。例如:
&
→&
<
→<
>
→>
"
→"
'
→'
- 使用模板引擎(如 React、Vue.js)会自动对变量进行转义。
- 输出动态数据时,将特殊字符转义。例如:
3. 使用安全的库或框架
- React 和 Angular 默认会对数据进行 HTML 转义,避免直接操作 DOM。
- 不要使用
innerHTML
、document.write
等会插入未经处理的 HTML。
4. 内容安全策略(CSP)
- 配置 CSP 限制资源加载:
- 限制脚本来源:
Content-Security-Policy: script-src 'self' https://trusted-source.com;
- 禁止内联脚本:
unsafe-inline
。
- 限制脚本来源:
5. HTTP-only 和 Secure Cookies
- 使用
HttpOnly
属性防止 JavaScript 访问 Cookies。 - 使用
Secure
属性防止 Cookies 被++非 HTTPS 传输++。
6. 定期安全测试
- 使用工具检查 XSS 漏洞,例如:
- OWASP ZAP
- Burp Suite
二、CSRF(跨站++请求++伪造)预防
CSRF 是指攻击者利用受害者的身份发送伪造请求。
1. 使用 CSRF Token
- 每次表单提交时生成唯一的 CSRF Token。
- 后端验证 CSRF Token 是否有效。
- 常见框架自带支持:
- Django:
{% csrf_token %}
。 - Spring Security:
<input type="hidden" name="_csrf" value="${_csrf.token}">
。
- Django:
2. SameSite Cookies
-
设置 Cookie 的
SameSite
属性为Strict
或Lax
,防止跨站点发送:Set-Cookie: session_id=abc123; SameSite=Strict;
3. 验证请求来源
- 检查 Referer 或 Origin 头 :
- 验证请求的来源是否为可信域。
- 如果来源为空或不可信,拒绝请求。
4. 使用验证码
- 在重要的操作中(如转账、账户设置),添加用户验证码验证。
5. 限制请求方法
- 对敏感操作使用
POST
而非GET
,避免 CSRF 的默认触发机制。
6. 强制登录验证
- 对所有敏感操作,要求用户重新登录或输入密码。