csrf攻击(Cross-Site Request Forgery)是一种常见的Web安全漏洞,攻击者利用用户已登录的身份,在用户不知情的情况下,通过捏造有效的要求信息来履行歹意操作。
以下是一些防范CSRF攻击的技术:
-
验证码(CAPTCHA):在关键操作前要求用户输入验证码,以验证用户操作的合法性。
-
Token验证:在页面中生成随机的Token,并在表单中添加Token,服务端收到要求后验证Token的合法性,从而避免CSRF攻击。
-
同源检测:在服务端根据要求的Referer信息判断要求来源会不会合法。
-
设置Cookie属性:设置Cookie的SameSite属性为Lax或Strict,表示Cookie只能在当前站点访问,从而保护用户数据。
下面是一个示例代码,摹拟了一个简单的登录页面和提交评论的功能,使用Token验证来避免CSRF攻击:
from flask import Flask, request, render_template, make_response import secrets app = Flask(__name__) # 生成随机Token def gen_token(): return secrets.token_hex(16) # 登录页面 @app.route('/') def login(): # 生成Token token = gen_token() # 将Token存储在Cookie中 resp = make_response(render_template('login.html', token=token)) resp.set_cookie('csrf_token', token) return resp # 提交评论 @app.route('/comment', methods=['POST']) def comment(): # 获得表单数据和Token comment = request.form['comment'] token = request.form['csrf_token'] # 检查Token会不会合法 if token == request.cookies.get('csrf_token'): # Token合法,处理评论逻辑 return '评论成功:{}'.format(comment) else: # Token不合法,返回毛病提示 return 'CSRF攻击!' if __name__ == '__main__': app.run()
在登录页面中生成随机Token,并将Token存储在Cookie中。当提交评论时,服务端会检查要求中的Token和Cookie中的Token会不会一致,从而避免CSRF攻击。
本文来源:https://www.yuntue.com/post/83254.html | 云服务器网,转载请注明出处!