当前位置 : 主页 > 网络编程 > PHP >

常用安全函数

来源:互联网 收集:自由互联 发布时间:2021-06-28
常用的项目安全函数 //富文本编辑器标签过滤(htmlpurifier插件)function removeXSS($data){require_once './HtmlPurifier/HTMLPurifier.auto.php';$_clean_xss_config = HTMLPurifier_Config::createDefault();$_clean_xss_config-s
常用的项目安全函数
//富文本编辑器标签过滤(htmlpurifier插件)
function removeXSS($data)
{
	require_once './HtmlPurifier/HTMLPurifier.auto.php';
	$_clean_xss_config = HTMLPurifier_Config::createDefault();
	$_clean_xss_config->set('Core.Encoding', 'UTF-8');
	// 设置保留的标签
	$_clean_xss_config->set('HTML.Allowed','div,b,strong,i,em,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src]');
	$_clean_xss_config->set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align');
	$_clean_xss_config->set('HTML.TargetBlank', TRUE);
	$_clean_xss_obj = new HTMLPurifier($_clean_xss_config);
	// 执行过滤
	return $_clean_xss_obj->purify($data);
}

/**
 * 登录原地址跳转过滤函数
 * redirect('home/login?from='__SELF__,0,'正在跳转'); 通过I('get.from')获取原地址,但是如果from被恶意手动输入外部网址,则登录就会跳转到外部网站,所以需要做下面的地址过滤 from=后面的url地址
 * @param  [type] $url [description]
 * @return [type]      [description]
 */
function gt($url){
	// 如果存在http://开头
	if(preg_match("/^http:\/\//i", $url)){
		// 白名单
		if(preg_match("/^http:\/\/(localhost)|(www.baidu.com)/i")){
			return $url;
		}else{
			return 'home/index/index';
		}
	}else{
		return $url;
	}
}

/**************onethink加解密码方法********************
 使用demo 加密cookie
setcookie('user',think_encrypt(serialize($user_login,C('KEY')),time()+3600,"/"))
*/

/**
 * 系统加密方法
 * @param string $data 要加密的字符串
 * @param string $key  加密密钥
 * @param int $expire  过期时间 单位 秒
 * @return string
 * @author 麦当苗儿 
 
  
 */
function think_encrypt($data, $key = '', $expire = 0) {
    $key  = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
    $data = base64_encode($data);
    $x    = 0;
    $len  = strlen($data);
    $l    = strlen($key);
    $char = '';

    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) $x = 0;
        $char .= substr($key, $x, 1);
        $x++;
    }

    $str = sprintf('%010d', $expire ? $expire + time():0);

    for ($i = 0; $i < $len; $i++) {
        $str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1)))%256);
    }
    return str_replace(array('+','/','='),array('-','_',''),base64_encode($str));
}

/**
 * 系统解密方法
 * @param  string $data 要解密的字符串 (必须是think_encrypt方法加密的字符串)
 * @param  string $key  加密密钥
 * @return string
 * @author 麦当苗儿 
  
    */ function think_decrypt($data, $key = ''){ $key = md5(empty($key) ? C('DATA_AUTH_KEY') : $key); $data = str_replace(array('-','_'),array('+','/'),$data); $mod4 = strlen($data) % 4; if ($mod4) { $data .= substr('====', $mod4); } $data = base64_decode($data); $expire = substr($data,0,10); $data = substr($data,10); if($expire > 0 && $expire < time()) { return ''; } $x = 0; $len = strlen($data); $l = strlen($key); $char = $str = ''; for ($i = 0; $i < $len; $i++) { if ($x == $l) $x = 0; $char .= substr($key, $x, 1); $x++; } for ($i = 0; $i < $len; $i++) { if (ord(substr($data, $i, 1))
  
 
上一篇:php反射插件
下一篇:ioc容器demo
网友评论