阅读量:0
CSRF(跨站请求伪造)漏洞是一种网络攻击手段,攻击者利用用户已登录的身份向网站发送恶意请求,执行非法操作。
CSRF(CrossSite Request Forgery)漏洞,中文名为跨站请求伪造,是一种常见的网络攻击手段,攻击者通过诱导用户点击链接或者执行某种操作,从而在用户不知情的情况下,以用户的身份向服务器发送恶意请求,达到攻击的目的。
CSRF漏洞的原理
1、用户登录网站A,获取到了登录凭证(如Cookie)。
2、用户未登出网站A的情况下,访问了网站B。
3、网站B中包含了一个指向网站A的恶意链接或操作。
4、用户点击链接或操作,浏览器会自动带上网站A的登录凭证。
5、网站A接收到请求,以为是用户发起的,从而执行了恶意操作。
CSRF漏洞的危害
1、盗取用户账号:攻击者可以模拟用户进行敏感操作,如修改密码、转账等。
2、删除数据:攻击者可以删除用户的数据,如邮件、文件等。
3、发布虚假信息:攻击者可以以用户的身份发布虚假信息,如评论、帖子等。
防御CSRF漏洞的方法
1、验证请求来源:检查HTTP请求头中的Referer字段,判断请求是否来自合法的源。
2、添加Token:在表单中添加一个随机生成的Token,服务器验证Token是否匹配。
3、使用验证码:对于敏感操作,要求用户输入验证码进行二次确认。
4、SameSite Cookie属性:设置Cookie的SameSite属性,限制Cookie的跨站传输。
示例代码
以Python的Flask框架为例,演示如何使用Token防御CSRF漏洞:
from flask import Flask, request, render_template import random app = Flask(__name__) app.secret_key = 'some_secret' @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': token = request.form.get('csrf_token') if token and token == session['csrf_token']: # 验证成功,处理登录逻辑 pass else: # 验证失败,返回错误信息 pass csrf_token = ''.join(random.sample('abcdefghijklmnopqrstuvwxyz0123456789', 16)) session['csrf_token'] = csrf_token return render_template('login.html', csrf_token=csrf_token) if __name__ == '__main__': app.run()
在HTML模板中,将Token添加到表单中:
<form action="/login" method="post"> <input type="hidden" name="csrf_token" value="{{ csrf_token }}"> <!其他表单字段 > <input type="submit" value="登录"> </form>