什么是 CSRF?
CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式。想象一下,如果你在银行的网站上登录了你的账户,然后去浏览其他网站,而那个恶意网站悄悄地让你发送一条消息给银行,要求转账给别人,这显然是不安全的。CSRF 攻击就是利用你已经登录的身份,在你不知情的情况下执行某些操作。
为了防止这种情况发生,网站开发者使用了一种叫做“CSRF 令牌”的东西。这个令牌就像是一个秘密的密码,只有你和网站知道。每次你要做重要操作时,比如转账,网站会检查你是否带着正确的密码。如果密码对不上,那么操作就不会被执行。
如何使用 CSRF 令牌?
当用户访问一个页面时,服务器会给用户生成一个独一无二的 CSRF 令牌,并且把这个令牌存储在用户的浏览器中(通常是以隐藏字段的形式放在表单里)。当用户提交表单时,这个令牌也会被一起发送到服务器。服务器端则会验证收到的令牌是否正确,从而确保请求确实来自合法用户。
下面是一个简单的 PHP 示例代码,它展示了如何生成和验证 CSRF 令牌:
<?php
session_start(); // 启动会话
// 定义一个函数用于生成随机字符串作为 CSRF 令牌
function generateCsrfToken() {
return bin2hex(random_bytes(32)); // 生成32字节的随机数并转换成16进制字符串
}
// 如果没有创建过 CSRF 令牌,则创建一个新的
if (!isset($_SESSION[