常用的项目安全函数 //富文本编辑器标签过滤(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))