📜  csrf 令牌 (1)

📅  最后修改于: 2023-12-03 15:00:04.290000             🧑  作者: Mango

CSRF 令牌

CSRF(Cross-Site Request Forgery)攻击是一种黑客利用用户已登录的身份,在用户不知情的情况下,伪造跨站请求来获取敏感信息或进行恶意操作的攻击方式。为了防止这种攻击,我们通常会采用 CSRF 令牌的方式来保障系统的安全性。

什么是 CSRF 令牌?

CSRF 令牌(CSRF Token)是一种防止 CSRF 攻击的技术。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)  # 拒绝请求
        # 处理请求
CSRF 令牌的注意事项
  • 每次提交请求都需要带上 CSRF 令牌,包括 GET 请求。
  • CSRF 令牌应该具有足够的随机性,不能使用容易被猜测的字符串或者常量。
  • CSRF 令牌不应该在 URL 中传递,因为这样容易受到恶意网站的攻击。
  • CSRF 令牌的有效期应该比较短,以免被攻击者盗取后长时间滥用。