📜  csrf token html 表单 - Html (1)

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

CSRF Token HTML表单介绍

CSRF(Cross-site request forgery)跨站请求伪造攻击是一种常见的网络攻击方式。攻击者会在已登录的用户不知情的情况下,发送伪造的请求,达到攻击的目的。为了避免这种攻击,开发人员可以使用CSRF Token进行防御。

什么是CSRF Token?

CSRF Token是一种在cookie中生成的随机字符串,通过将这个字符串嵌入到表单中,在提交表单时,服务器会验证这个字符串是否合法。如果是攻击者伪造的请求,那么在表单中的token会与cookie中储存的token不同,从而可以识别出伪造请求。

如何在HTML表单中使用CSRF Token?

在HTML表单中使用CSRF Token非常简单,只需要在表单中包含一个隐藏的输入框,并把token作为其value值即可。

<form action="/submit" method="post">
  <!-- CSRF Token -->
  <input type="hidden" name="csrf_token" value="f32ojn34hrgn24g">

  <!-- 其他表单元素 -->
  <label for="username">用户名:</label>
  <input type="text" id="username" name="username">

  <label for="password">密码:</label>
  <input type="password" id="password" name="password">

  <input type="submit" value="提交">
</form>

在服务器端处理表单时,需要先验证传递过来的Token是否与服务器中保存的Token一致,如果不一致,则判定为伪造请求。

真实的CSRF Token生成方法

上述例子中,Token是固定的字符串,实际上这是非常不安全的。攻击者可以通过从表单中提取Token,然后伪造请求。因此,应该随机生成Token,而不是写死Token。

在服务器端,可以使用如下的Python代码生成Token:

import random
import string

# Token 生成函数
def generate_token(length=32):
    # 生成随机的Token
    letters = string.ascii_letters + string.digits
    return ''.join(random.choice(letters) for i in range(length))

生成Token的代码可以灵活调整Token长度和字符集。最后,将生成的Token写入cookie或者隐藏的表单元素中,以实现防御CSRF攻击的效果。