欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

php token防止恶意提交

shiping1 的头像
最近后台被扫描工具塞了好多数据,前不久已经做过处理,试用了UCHOME的formhash的方法,但是效果不是很明显,所以考虑要黑盒传递一个密钥,不然如果可以抓取到你表单中的隐藏域的话,表面上的一个令牌是不行的,必须要有一个key来验证这个令牌,并且这个KEY要能够每次都获取的不一样。下面分享我的代码:
  1. <?php  
  2. /** 
  3.  * 表单令牌(防止表单恶意提交) 
  4.  */  
  5. class Form_token_Core{  
  6.     const SESSION_KEY = 'SESSION_KEY';  
  7.     /** 
  8.      * 生成一个当前的token 
  9.      * @param string $form_name 
  10.      * @return string 
  11.      */  
  12.     public static function grante_token($form_name)  
  13.     {  
  14.         $key = self::grante_key();  
  15.                 $_SESSION['SESSION_KEY.$form_name'] = $key;  
  16.         $token = md5(substr(time(), 0, 3).$key.$form_name);  
  17.         return $token;  
  18.     }  
  19.    
  20.     /** 
  21.      * 验证一个当前的token 
  22.      * @param string $form_name 
  23.      * @return string 
  24.      */  
  25.     public static function is_token($form_name,$token)  
  26.     {  
  27.         $key = $_SESSION['SESSION_KEY.$form_name']  
  28.         $old_token = md5(substr(time(), 0, 3).$key.$form_name);  
  29.         if($old_token == $token)  
  30.         {  
  31.             return true;  
  32.         } else {  
  33.             return false;  
  34.         }  
  35.     }  
  36.    
  37.     /** 
  38.      * 删除一个token 
  39.      * @param string $form_name 
  40.      * @return boolean 
  41.      */  
  42.     public static function drop_token($form_name)  
  43.     {  
  44.         $session->delete(SESSION_KEY);  
  45.         return true;  
  46.     }  
  47.    
  48.     /** 
  49.      * 生成一个密钥 
  50.      * @return string 
  51.      */  
  52.     public static function grante_key()  
  53.     {  
  54.         $encrypt_key = md5(((float) date("YmdHis") + rand(100,999)).rand(1000,9999));  
  55.         return $encrypt_key;  
  56.     }  
  57. }  

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

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


来自  
http://blog.csdn.net/jayxujia123/article/details/26566107

普通分类: