📅  最后修改于: 2023-12-03 15:00:04.290000             🧑  作者: Mango
CSRF(Cross-Site Request Forgery)攻击是一种黑客利用用户已登录的身份,在用户不知情的情况下,伪造跨站请求来获取敏感信息或进行恶意操作的攻击方式。为了防止这种攻击,我们通常会采用 CSRF 令牌的方式来保障系统的安全性。
CSRF 令牌(CSRF Token)是一种防止 CSRF 攻击的技术。CSRF 令牌是由服务器生成的随机字符串,每次向服务器提交请求时都要带上这个随机字符串。服务器会比对请求中的 CSRF 令牌和服务器端存储的令牌是否一致,如果不一致就会拒绝请求。
在服务器端生成 CSRF 令牌,将其存储在 session 或者 cookie 中。在生成页面时,将 CSRF 令牌插入到表单中:
<form action="/submit" method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<!-- 表单元素 -->
<input type="submit" value="提交">
</form>
在提交表单时,把 CSRF 令牌一同提交到服务器端:
POST /submit HTTP/1.1
Content-Type: application/x-www-form-urlencoded
csrf_token=xxxxx&field1=value1&field2=value2
在服务器端验证 CSRF 令牌的有效性:
def submit(request):
if request.method == 'POST':
csrf_token = request.form.get('csrf_token')
if csrf_token != session.get('csrf_token'):
abort(403) # 拒绝请求
# 处理请求