php token防止恶意提交

in cn •  6 years ago  (edited)

传递一个密钥,避免表单中的隐藏域表面上的一个令牌暴露,必须要有一个key来验证这个令牌,并且这个KEY要能够每次都获取的不一样。下面的php实现这个功能。

<?php /** * 表单令牌(防止表单恶意提交) */ class Form_token_Core{ const SESSION_KEY = 'SESSION_KEY'; /** * 生成一个当前的token * @param string $form_name * @return string */ public static function grante_token($form_name) { $key = self::grante_key(); $_SESSION['SESSION_KEY.$form_name'] = $key; $token = md5(substr(time(), 0, 3).$key.$form_name); return $token; }
/**
 * 验证一个当前的token
 * @param string $form_name
 * @return string
 */
public static function is_token($form_name,$token)
{
    $key = $_SESSION['SESSION_KEY.$form_name']
    $old_token = md5(substr(time(), 0, 3).$key.$form_name);
    if($old_token == $token)
    {
        return true;
    } else {
        return false;
    }
}

/**
 * 删除一个token
 * @param string $form_name
 * @return boolean
 */
public static function drop_token($form_name)
{
    $session->delete(SESSION_KEY);
    return true;
}

/**
 * 生成一个密钥
 * @return string
 */
public static function grante_key()
{
    $encrypt_key = md5(((float) date("YmdHis") + rand(100,999)).rand(1000,9999));
    return $encrypt_key;
}

}

这个就是不在表单隐藏那个token,而是在程序中利用 md5(时间戳+随机数+随机数)产生一个每次都不相同的key,然后再来验证。

【php代码加密的几种方法】:
https://blog.csdn.net/DickyQie/article/details/79168657

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!