您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何从代码角度分析及防护CSRF
## 什么是CSRF攻击?
跨站请求伪造(Cross-Site Request Forgery, CSRF)是一种利用用户已登录的身份,在用户不知情的情况下执行非预期操作的攻击方式。攻击者诱导用户访问恶意页面,该页面自动向目标网站发起请求(如转账、修改密码等),由于浏览器会自动携带用户的Cookie,服务器会误认为是合法请求。
## 代码层面的CSRF攻击分析
### 典型攻击流程示例
```html
<!-- 恶意页面伪造请求 -->
<img src="https://bank.com/transfer?to=attacker&amount=10000" width="0" height="0">
当已登录银行网站的用户访问该页面时,浏览器会自动发起GET请求,携带用户的会话Cookie完成转账。
# Flask漏洞示例
@app.route('/transfer', methods=['GET'])
def transfer():
if 'user' in session: # 仅检查登录状态
execute_transfer(request.args.get('to'), request.args.get('amount'))
return "Success"
// 不安全的API设计
app.get('/api/change-email', (req, res) => {
updateEmail(req.query.newEmail);
});
# Flask-WTF实现示例
from flask_wtf.csrf import CSRFProtect
app = Flask(__name__)
app.secret_key = 'secure_key'
CSRFProtect(app)
# 表单中自动生成令牌
<form action="/transfer" method="POST">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<!-- 其他表单字段 -->
</form>
// 前端设置自定义Header
fetch('/api/sensitive-action', {
method: 'POST',
headers: {
'X-CSRF-TOKEN': getCookie('csrf_token')
}
});
// 后端校验(Express示例)
app.post('/api/sensitive-action', (req, res) => {
if (req.cookies.csrf_token !== req.headers['x-csrf-token']) {
return res.status(403).send('Invalid CSRF token');
}
// 处理逻辑
});
# Django配置示例
SESSION_COOKIE_SAMESITE = 'Strict' # 或'Lax'
CSRF_COOKIE_SAMESITE = 'Strict'
# 敏感操作要求重新认证
def change_password(request):
if not request.user.check_password(request.POST.get('current_password')):
return HttpResponse("密码验证失败", status=403)
# 更新密码逻辑
// Express限流中间件
const rateLimit = require('express-rate-limit');
const csrfLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15分钟
max: 5 // 每个IP最多5次请求
});
app.use('/sensitive-action', csrfLimiter);
HttpOnly
和SameSite
属性有效的CSRF防护需要:
✅ 敏感操作使用POST/PUT/DELETE方法
✅ 实现同步令牌或双重Cookie验证
✅ 合理设置Cookie安全属性
✅ 关键操作增加二次验证
✅ 配合日志监控和异常检测
通过代码层面的多重防护,可以显著降低CSRF攻击风险,建议结合OWASP CSRF防护指南进行定期安全审计。 “`
(注:实际字数为约720字,可根据需要扩展具体框架的实现细节或增加案例分析)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。