CSRF 和 XSS 攻击分析与防范

CSRF 和 XSS 攻击分析与防范

CSRF (跨站请求伪造)

什么是 CSRF?

CSRF (Cross-Site Request Forgery) 是一种攻击方式,攻击者诱使用户在已登录目标网站的情况下,执行非预期的操作。

攻击流程

  1. 用户登录可信网站 A
  2. 在不登出 A 的情况下访问恶意网站 B
  3. B 诱导用户点击链接或加载资源,向 A 发起请求
  4. A 的服务器认为这是用户的合法请求,执行操作

CSRF 防范措施

1. 使用 CSRF Token
python 复制代码
# Django 示例
from django.middleware.csrf import get_token

def some_view(request):
    csrf_token = get_token(request)
    # 将 token 放入表单
    return render(request, 'template.html', {'csrf_token': csrf_token})

# 在表单中
<form method="post">
    {% csrf_token %}
    <!-- 其他表单字段 -->
</form>
javascript 复制代码
// 设置 SameSite 属性
Set-Cookie: sessionid=xxxxxx; SameSite=Strict; Secure; HttpOnly
  • Strict: 完全禁止第三方 Cookie
  • Lax: 宽松模式,允许部分安全请求携带 Cookie
3. 检查 Referer/Origin 头部
python 复制代码
# Flask 示例
from flask import request

@app.before_request
def check_referer():
    if request.method == "POST":
        referer = request.headers.get("Referer")
        origin = request.headers.get("Origin")
        if not (referer and referer.startswith("https://yourdomain.com")) and \
           not (origin and origin == "https://yourdomain.com"):
            abort(403)

XSS (跨站脚本攻击)

什么是 XSS?

XSS (Cross-Site Scripting) 是攻击者向网页注入恶意脚本,当其他用户访问时执行的攻击方式。

三种类型

  1. 存储型 XSS:恶意脚本存储在服务器上
  2. 反射型 XSS:恶意脚本作为请求的一部分返回
  3. DOM 型 XSS:完全在客户端执行的攻击

XSS 防范措施

1. 输入输出转义
javascript 复制代码
// 转义 HTML
function escapeHtml(text) {
    const div = document.createElement('div');
    div.textContent = text;
    return div.innerHTML;
}

// 转义属性
function escapeAttr(value) {
    return value.replace(/"/g, '&quot;')
               .replace(/'/g, '&#39;')
               .replace(/</g, '&lt;')
               .replace(/>/g, '&gt;');
}
2. 使用 CSP (内容安全策略)
http 复制代码
Content-Security-Policy: 
    default-src 'self';
    script-src 'self' https://trusted.cdn.com;
    img-src 'self' data:;
    style-src 'self' 'unsafe-inline';
    object-src 'none';
javascript 复制代码
Set-Cookie: session=xxxxxx; HttpOnly; Secure; SameSite=Strict
  • HttpOnly: 防止 JavaScript 访问 Cookie
  • Secure: 仅通过 HTTPS 传输
4. 使用现代框架的安全特性
jsx 复制代码
// React 自动转义
const userInput = "<script>alert('xss')</script>";
return <div>{userInput}</div>; // 安全,会被转义

// Vue 自动转义
<template>
  <div>{{ userInput }}</div> <!-- 安全,会被转义 -->
</template>

综合防御建议

  1. 最小权限原则:所有资源请求使用最小必要权限
  2. 定期更新:保持框架和库的最新版本
  3. 自动化测试:使用安全扫描工具如 OWASP ZAP
  4. 安全编码培训:提高团队安全意识

通过组合使用这些技术,可以显著降低 CSRF 和 XSS 攻击的风险。

相关推荐
白帽子黑客罗哥9 小时前
渗透测试技术:从入门到实战的完整指南
网络·安全·web安全·渗透测试·漏洞挖掘·网络安全培训
北邮刘老师9 小时前
【智能体互联协议解析】ACPs/AIP为什么还在用“落后”的“中心化”架构?
网络·人工智能·架构·大模型·智能体·智能体互联网
winfield8219 小时前
MCP 协议详解
开发语言·网络·qt
sdszoe49229 小时前
IP地址规划与VLSM技术
网络·网络协议·tcp/ip·vlsm·ip地址规划
m0_5695310110 小时前
《K8s 网络入门到进阶:Service 与 Ingress 原理、部署方案及核心区别对比》
网络·容器·kubernetes
广东大榕树信息科技有限公司10 小时前
当运维管理面临挑战时,如何借助动环监控系统提升响应能力?
运维·网络·物联网·国产动环监控系统·动环监控系统
狂奔的sherry11 小时前
WIFI后端功能问题解决
网络
yimengsama11 小时前
VMWare虚拟机如何连接U盘
linux·运维·服务器·网络·windows·经验分享·远程工作
Xの哲學11 小时前
Linux NAT 深度剖析: 从设计哲学到实现细节
linux·服务器·网络·架构·边缘计算
鲨莎分不晴12 小时前
强化学习第七课 —— 策略网络设计指南:赋予 Agent“大脑”的艺术
网络·人工智能·机器学习