CSRF(Cross-site Request Forgery)攻击是一种利用用户在已登录的状态下对指定网站发起误导性要求的网络攻击方式。攻击者会引诱用户点击歹意链接或访问歹意网站,在用户不知情的情况下向指定网站发送要求,到达非法盗取用户信息、操纵用户数据等目的。
为了避免CSRF攻击,我们需要在服务器端设置安全头部,使用以下方法:
1.设置X-CSRF-Token
头部:
在服务器端,为每一个表单页面生成一个随机的CSRF Token,并将其存储在会话中,然后将这个Token作为X-CSRF-TOKEN
的值添加到HTTP要求头部中,在验证要求时比较要求头部中的Token和会话中的Token会不会一致,以此避免CSRF攻击。
示例代码:
# 生成CSRF Token并存储到会话中 import secrets from flask import session @app.route('/') def index(): token = secrets.token_hex(16) session['csrf_token'] = token return render_template('index.html', csrf_token=token) # 验证要求头部中的Token和会话中的Token会不会一致 from flask import request @app.route('/submit', methods=['POST']) def submit(): if request.headers.get('X-CSRF-TOKEN') != session['csrf_token']: return 'Invalid CSRF Token' # 业务逻辑处理 return 'Submit Succeeded'
2.设置Referer
头部:
在服务器端,通过比较要求头部中的Referer
字段和要求URL中的域名会不会一致,以此判断要求来源会不会合法,以此避免CSRF攻击。
示例代码:
from flask import request @app.route('/submit', methods=['POST']) def submit(): referer = request.headers.get('Referer') if not referer or 'pidancode.com' not in referer: return 'Invalid Referer' # 业务逻辑处理 return 'Submit Succeeded'
以上两种方法都可以有效地避免CSRF攻击,具体应当选择哪种方法,取决于具体的业务场景,可根据实际情况选择最为合适的方法。
本文来源:https://www.yuntue.com/post/83480.html | 云服务器网,转载请注明出处!