php添加token防止csrf攻击的方法代码
浏览量:232
rand()是可预测的
uniqid()只能添加多达29位的熵
md5()不添加熵,它只是确定性地混合它
PS:(以上内容基于Google翻译)
推荐以下代码:
1、生成CSRF令牌
php 7
session_start();
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];
PHP 5.3+ (or with ext-mcrypt)
session_start();
if (empty($_SESSION['token'])) {
if (function_exists('mcrypt_create_iv')) {
$_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
} else {
$_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
}
}
$token = $_SESSION['token'];
不要只使用==或甚至===,使用hash_equals()(仅限PHP 5.6+,但可以使用hash-compat库的早期版本)。
if (!empty($_POST['token'])) {
if (hash_equals($_SESSION['token'], $_POST['token'])) {
// Proceed to process the form data
} else {
// Log this as a warning and keep an eye on these attempts
}
}


感谢支持与鼓励~