入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

php token防止恶意提交

创建时间:2014-05-22 投稿人: 浏览次数:9267
最近后台被扫描工具塞了好多数据,前不久已经做过处理,试用了UCHOME的formhash的方法,但是效果不是很明显,所以考虑要黑盒传递一个密钥,不然如果可以抓取到你表单中的隐藏域的话,表面上的一个令牌是不行的,必须要有一个key来验证这个令牌,并且这个KEY要能够每次都获取的不一样。下面分享我的代码:
<?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;
    }
}

转载自:http://www.qinbin.me/phptoken/

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

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。