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;
	}
}

php token防止恶意提交》上有4条评论

  1. 朱磊

    $key = $_SESSION[‘SESSION_KEY.$form_name’]
    27行末尾 少了个冒号,难怪我运行出错了!

发表评论

电子邮件地址不会被公开。 必填项已用*标注