Python中的CSRF攻击与加密技术
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攻击。
相关文章