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,然后再来验证,感觉还不错。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。