php token防止恶意提交

最近后台被扫描工具塞了好多数据,前不久已经做过处理,试用了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,然后再来验证,感觉还不错。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值