1. 安全過濾類-通用過濾
- /**
- * 安全過濾類-通用過濾
- * Controller中使用方法:$this->controller->fliter_escape($value)
- * @param string $value 需要過濾的變量
- * @return string|array
- */
- function fliter_escape($value) {
- if (is_array($value)) {
- foreach ($value as $k => $v) {
- $value[$k] = self::fliter_str($v);
- }
- } else {
- $value = self::fliter_str($value);
- }
- return $value;
- }
複製程式碼
2. 安全過濾類-過濾javascript,css,iframes,object等不安全參數
- /**
- * 安全過濾類-過濾javascript,css,iframes,object等不安全參數 過濾級別高
- * Controller中使用方法:$this->controller->fliter_script($value)
- * @param string $value 需要過濾的值
- * @return string
- */
- function fliter_script($value) {
- $value = preg_replace("/(javascript:)?on(click|load|key|mouse|error|abort|move|unload|change|dblclick|move|reset|resize|submit)/i","&111n\\2",$value);
- $value = preg_replace("/(.*?)<\/script>/si","",$value);
- $value = preg_replace("/(.*?)<\/iframe>/si","",$value);
- $value = preg_replace ("//iesU", '', $value);
- return $value;
- }
複製程式碼
3. 安全過濾類-過濾HTML標籤
使用PHP提供的htmlentities函式過濾HTML,函式會將所有HTML標籤字元(&、<、>等)轉換為對應的HTML,以便在應用存儲層取出後安全渲染。但是有時候我們是允許輸入某些HTML元素的,尤其是輸入 rich text 的時候,比如圖片、連結。輸入既要驗證也要過濾,以確保其符合預期且安全。
- /**
- * 安全過濾類-過濾HTML標籤
- * Controller中使用方法:$this->controller->fliter_html($value)
- * @param string $value 需要過濾的值
- * @return string
- */
- function fliter_html($value) {
- if (function_exists('htmlspecialchars')) return htmlspecialchars($value);
- return str_replace(array("&", '"', "'", "<", ">"), array("&", """, "'", "<", ">"), $value);
- }
- /**
- * 安全過濾類-過濾HTML標籤
- * Controller中使用方法:$this->controller->fliter_html($value)
- * @param string $value 需要過濾的值
- * @return string
- */
- function fliter_html($value) {
- if (function_exists('htmlspecialchars')) return htmlspecialchars($value);
- return str_replace(array("&", '"', "'", "<", ">"), array("&", """, "'", "<", ">"), $value);
- }
複製程式碼
4.安全過濾類-字串過濾 過濾特殊有危害字元
- /**
- * 安全過濾類-字串過濾 過濾特殊有危害字元
- * Controller中使用方法:$this->controller->fliter_str($value)
- * @param string $value 需要過濾的值
- * @return string
- */
- function fliter_str($value) {
- $badstr = array("\0", "%00", "\r", '&', ' ', '"', "'", "<", ">", " ", "%3C", "%3E");
- $newstr = array('', '', '', '&', ' ', '"', ''', "<", ">", " ", "<", ">");
- $value = str_replace($badstr, $newstr, $value);
- $value = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $value);
- return $value;
- }
複製程式碼
5.路徑安全轉換
- /**
- * 路徑安全轉換
- * Controller中使用方法:$this->controller->filter_dir($fileName)
- * @param string $fileName
- * @return string
- */
- function filter_dir($fileName) {
- $tmpname = strtolower($fileName);
- $temp = array(':/',"\0", "..");
- if (str_replace($temp, '', $tmpname) !== $tmpname) {
- return false;
- }
- return $fileName;
- }
複製程式碼
6.目錄過濾
- /**
- * 目錄過濾
- * Controller中使用方法:$this->controller->filter_path($path)
- * @param string $path
- * @return array
- */
- public function filter_path($path) {
- $path = str_replace(array("'",'#','=','`','$','%','&',';'), '', $path);
- return rtrim(preg_replace('/(\/){2,}|(\\\){1,}/', '/', $path), '/');
- }
複製程式碼
7.過濾PHP標籤
- /**
- * 過濾PHP標籤
- * Controller中使用方法:$this->controller->filter_phptag($string)
- * @param string $string
- * @return string
- */
- public function filter_phptag($string) {
- return str_replace(array(''), array('<?', '?>'), $string);
- }
複製程式碼
8. 安全過濾類-返回函式
- /**
- * 安全過濾類-返回函式
- * Controller中使用方法:$this->controller->str_out($value)
- * @param string $value 需要過濾的值
- * @return string
- */
- public function str_out($value) {
- $badstr = array("<", ">", "%3C", "%3E");
- $newstr = array("<", ">", "<", ">");
- $value = str_replace($newstr, $badstr, $value);
- return stripslashes($value); //底線
- }
複製程式碼
9.php判斷檔案上傳類型及過濾不安全資料的方法
- /*
- php判斷檔案上傳類型及過濾不安全資料的方法
- */
- function s_addslashes($string, $force = 0) {
- if(!get_magic_quotes_gpc()) {
- if(is_array($string)) {
- foreach($string as $key => $val) {
- $string[$key] = s_addslashes($val, $force);
- }
- } else {
- $string=str_replace("&#x","& # x",$string); //
-
- //過濾一些不安全字元
- $string = addslashes($string);
- }
- }
- return $string;
- }
- //用法實例:
- $_COOKIE = c_addslashes($_COOKIE);
- $_POST = c_addslashes($_POST);
- $_GET = c_addslashes($_GET);
-
- //在公共檔案中加入
- if($_FILES){
- foreach( $_FILES as $key => $_value )
- {
- $_FILES[$key]['type'] =$_value['type'];
- }
- if(substr($_FILES[$key]['type'],0,6) !='image/')
- {
- exit;
- }
- }
複製程式碼
10. xss過濾函式
- /**
- * xss過濾函式
- *
- * @param $string
- * @return string
- */
- function remove_xss($string) {
- $string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S|<|>', '', $string);
- $parm1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
- $parm2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate',
- 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange',
- 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut',
- 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate',
- 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop',
- 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin',
- 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload',
- 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste',
- 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend',
- 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll',
- 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit',
- 'onunload');
- $parm = array_merge($parm1, $parm2);
- for ($i = 0; $i < sizeof($parm); $i++) {
- $pattern = '/';
- for ($j = 0; $j < strlen($parm[$i]); $j++) {
- if ($j > 0) {
- $pattern .= '(';
- $pattern .= '(&#[x|X]0([9][a][b]);?)?';
- $pattern .= '|(�([9][10][13]);?)?';
- $pattern .= ')?';
- }
- $pattern .= $parm[$i][$j];
- }
- $pattern .= '/i';
- $string = preg_replace($pattern, ' ', $string);
- }
- return $string;
- }
複製程式碼
11. 過濾ASCII碼從0-28的控制字元
- /**
- * 實用
- * 過濾ASCII碼從0-28的控制字元
- * @return String
- */
- function trim_unsafe_control_chars($str) {
- $rule = '/[' . chr ( 1 ) . '-' . chr ( 8 ) . chr ( 11 ) . '-' . chr ( 12 ) . chr ( 14 ) . '-' . chr ( 31 ) . ']*/';
- return str_replace ( chr ( 0 ), '', preg_replace ( $rule, '', $str ) );
- }
- echo trim_unsafe_control_chars(" asdasdas</script>");
- echo "<br>";
複製程式碼
12.格式化文字欄位內容
- /**
- * 格式化文字欄位內容
- *
- * @param $string 文字欄位內容
- * @return string
- */
- function trim_textarea($string) {
- $string = nl2br ( str_replace ( ' ', ' ', $string ) );
- return $string;
- }
- echo trim_textarea("<a> asc sda sdas</a>");
- echo "<br>";
複製程式碼
13.將文字格式成適合js輸出的字串
- /**
- * 將文字格式成適合js輸出的字串
- * @param string $string 需要處理的字串
- * @param intval $isjs 是否執行字串格式化,預設為執行
- * @return string 處理後的字串
- */
- function format_js($string, $isjs = 1) {
- $string = addslashes(str_replace(array("\r", "\n", "\t"), array('', '', ''), $string));
- return $isjs ? 'document.write("'.$string.'");' : $string;
- }
- echo format_js("<a> asc sda sdas</a>");
- echo "<br>";
複製程式碼
14.獲得完整URL地址
- /**
- * 實用
- * 獲得完整URL地址
- */
- function get_url() {
- $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
- $php_self = $_SERVER['PHP_SELF'] ? safe_replace($_SERVER['PHP_SELF']) : safe_replace($_SERVER['SCRIPT_NAME']);
- $path_info = isset($_SERVER['PATH_INFO']) ? safe_replace($_SERVER['PATH_INFO']) : '';
- $relate_url = isset($_SERVER['REQUEST_URI']) ? safe_replace($_SERVER['REQUEST_URI']) : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.safe_replace($_SERVER['QUERY_STRING']) : $path_info);
- return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$relate_url;
- }
- echo get_url();
- echo "<br>";
複製程式碼
15.獲得 ip
- /**
- * 實用
- * 獲得 ip
- *
- * @return ip地址
- */
- function ip() {
- if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
- $ip = getenv('HTTP_CLIENT_IP');
- } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
- $ip = getenv('HTTP_X_FORWARDED_FOR');
- } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
- $ip = getenv('REMOTE_ADDR');
- } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
- $ip = $_SERVER['REMOTE_ADDR'];
- }
- return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
- }
- function get_cost_time() {
- $microtime = microtime ( TRUE );
- return $microtime - SYS_START_TIME;
- }
- echo ip();
- echo "<br>";
複製程式碼
16.範本調用
- /**
- * 範本調用
- *
- * @param $module
- * @param $template
- * @param $istag
- * @return unknown_type
- */
- function template($module = 'content', $template = 'index', $style = '') {
- if(strpos($module, 'plugin/')!== false) {
- $plugin = str_replace('plugin/', '', $module);
- return p_template($plugin, $template,$style);
- }
- $module = str_replace('/', DIRECTORY_SEPARATOR, $module);
- if(!empty($style) && preg_match('/([a-z0-9\-_]+)/is',$style)) {
- } elseif (empty($style) && !defined('STYLE')) {
- if(defined('SITEID')) {
- $siteid = SITEID;
- } else {
- $siteid = param::get_cookie('siteid');
- }
- if (!$siteid) $siteid = 1;
- $sitelist = getcache('sitelist','commons');
- if(!empty($siteid)) {
- $style = $sitelist[$siteid]['default_style'];
- }
- } elseif (empty($style) && defined('STYLE')) {
- $style = STYLE;
- } else {
- $style = 'default';
- }
- if(!$style) $style = 'default';
- $template_cache = app_base::load_sys_class('template_cache');
- $compiledtplfile = ROOT_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php';
- if(file_exists(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')) {
- if(!file_exists($compiledtplfile) || (@filemtime(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html') > @filemtime($compiledtplfile))) {
- $template_cache->template_compile($module, $template, $style);
- }
- } else {
- $compiledtplfile = ROOT_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php';
- if(!file_exists($compiledtplfile) || (file_exists(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html') && filemtime(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html') > filemtime($compiledtplfile))) {
- $template_cache->template_compile($module, $template, 'default');
- } elseif (!file_exists(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')) {
- showmessage('Template does not exist.'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html');
- }
- }
- return $compiledtplfile;
- }
複製程式碼
17.計算字元數的大小單位
- /**
- * 實用
- * 計算字元數的大小單位
- *
- *
- * @param string $filesize 字元大小
- * @return string 返回大小
- */
- function sizecount($filesize) {
- if ($filesize >= 1073741824) {
- $filesize = round($filesize / 1073741824 * 100) / 100 .' GB';
- } elseif ($filesize >= 1048576) {
- $filesize = round($filesize / 1048576 * 100) / 100 .' MB';
- } elseif($filesize >= 1024) {
- $filesize = round($filesize / 1024 * 100) / 100 . ' KB';
- } else {
- $filesize = $filesize.' Bytes';
- }
- return $filesize;
- }
- echo sizecount(35632454);
- echo "<br>";
複製程式碼
18.字串加密、解密
- /**
- * 實用
- * 字串加密、解密函式
- *
- *
- * @param string $txt 字串
- * @param string $operation ENCODE為加密,DECODE為解密,可選參數,預設為ENCODE,
- * @param string $key 金鑰:數字、字母、底線
- * @param string $expiry 到期時間
- * @return string
- */
- function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) {
- $key_length = 4;
- $key = md5($key != '' ? $key : app_base::load_config('system', 'auth_key'));
- $fixedkey = md5($key);
- $egiskeys = md5(substr($fixedkey, 16, 16));
- $runtokey = $key_length ? ($operation == 'ENCODE' ? substr(md5(microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';
- $keys = md5(substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16));
- $string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length));
- $i = 0; $result = '';
- $string_length = strlen($string);
- for ($i = 0; $i < $string_length; $i++){
- $result .= chr(ord($string{$i}) ^ ord($keys{$i % 32}));
- }
- if($operation == 'ENCODE') {
- return $runtokey . str_replace('=', '', base64_encode($result));
- }
- else {
- if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$egiskeys), 0, 16)) {
- return substr($result, 26);
- }
- else
- {
- return '';
- }
- }
- }
- $a1 = sys_auth("liman123456789aaaaa阿薩德//dsas",'ENCODE','manasdas123',1);
- echo $a1."<br>";
- $a2 = sys_auth($a1,'DECODE','manasdas123',1);
- echo $a2."<br>";
複製程式碼
19.查詢字元是否存在於某字串
- /**
- * 查詢字元是否存在於某字串
- *
- * @param $haystack 字串
- * @param $needle 要尋找的字元
- * @return bool
- */
- function str_exists($haystack, $needle)
- {
- return !(strpos($haystack, $needle) === FALSE);
- }
- echo str_exists('liman','c');
- echo "<br>";
複製程式碼
20.取得檔案副檔名
- /**
- *實用
- *
- * 取得檔案副檔名
- *
- * @param $filename 檔案名稱
- * @return 副檔名
- */
- function fileext($filename) {
- return strtolower(trim(substr(strrchr($filename, '.'), 1, 10)));
- }
- echo fileext('liman.c');
- echo "<br>";
複製程式碼
20.加載範本標籤快取
- /**
- * 加載範本標籤快取
- * @param string $name 快取名
- * @param integer $times 快取時間
- */
- function tpl_cache($name,$times = 0) {
- $filepath = 'tpl_data';
- $info = getcacheinfo($name, $filepath);
- if (SYS_TIME - $info['filemtime'] >= $times) {
- return false;
- } else {
- return getcache($name,$filepath);
- }
- }
複製程式碼
21. 寫入快取,預設是檔案快取,不預讀快取設定。
- /**
- * 寫入快取,預設是檔案快取,不讀入快取設定。
- * @param $name 快取名稱
- * @param $data 快取資料
- * @param $filepath 資料路徑(模組名稱) caches/cache_$filepath/
- * @param $type 快取類型[file,memcache,apc]
- * @param $config 設定名稱
- * @param $timeout 到期時間
- */
- function setcache($name, $data, $filepath='', $type='file', $c ='AND ', $in_column = false) {
- if($in_column && is_array($data)) {
- $ids = '\''.implode('\',\'', $data).'\'';
- $sql = "$in_column IN ($ids)";
- return $sql;
- } else {
- if ($front == '') {
- $front = ' AND ';
- }
- if(is_array($data) && count($data) > 0) {
- $sql = '';
- foreach ($data as $key => $val) {
- $sql .= $sql ? " $front $key = '$val' " : " $key = '$val' ";
- }
- return $sql;
- } else {
- return $data;
- }
- }
- }
複製程式碼
22.判斷email格式是否正確
- /**
- * 判斷email格式是否正確
- * @param $email
- */
- function is_email($email) {
- return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
- }
複製程式碼
23.iconv 編輯轉換
- /**
- * iconv 編輯轉換
- */
- if (!function_exists('iconv')) {
- function iconv($in_charset, $out_charset, $str) {
- $in_charset = strtoupper($in_charset);
- $out_charset = strtoupper($out_charset);
- if (function_exists('mb_convert_encoding')) {
- return mb_convert_encoding($str, $out_charset, $in_charset);
- } else {
- app_base::load_sys_func('iconv');
- $in_charset = strtoupper($in_charset);
- $out_charset = strtoupper($out_charset);
- if ($in_charset == 'UTF-8' && $out_charset == 'BIG5') {
- return utf8_to_big5($str);
- }
- if ($in_charset == 'BIG5' && $out_charset == 'UTF-8') {
- return big5_to_utf8($str);
- }
- return $str;
- }
- }
- }
複製程式碼
24.檔案下載
- /**
- * 檔案下載
- * @param $filepath 檔案路徑
- * @param $filename 檔案名稱
- */
- function file_down($filepath, $filename = '') {
- if(!$filename) $filename = basename($filepath);
- if(is_ie()) $filename = rawurlencode($filename);
- $filetype = fileext($filename);
- $filesize = sprintf("%u", filesize($filepath));
- if(ob_get_length() !== false) @ob_end_clean();
- header('Pragma: public');
- header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
- header('Cache-Control: no-store, no-cache, must-revalidate');
- header('Cache-Control: pre-check=0, post-check=0, max-age=0');
- header('Content-Transfer-Encoding: binary');
- header('Content-Encoding: none');
- header('Content-type: '.$filetype);
- header('Content-Disposition: attachment; filename="'.$filename.'"');
- header('Content-length: '.$filesize);
- readfile($filepath);
- exit;
- }
複製程式碼
25.產生縮略圖
- /**
- * 產生縮略圖
- * @param $imgurl 圖路徑
- * @param $width 縮略圖寬度
- * @param $height 縮略圖高度
- * @param $autocut 是否自動裁切 預設裁切,當高度或寬度有一個為0是,自動關閉
- * @param $smallpic 無圖片時使用預設圖片路徑
- */
- function thumb($imgurl, $width = 100, $height = 100 ,$autocut = 1, $smallpic = 'nopic.gif') {
- global $image;
- $upload_url = app_base::load_config('system','upload_url');
- $upload_path = app_base::load_config('system','upload_path');
- if(empty($imgurl)) return IMG_PATH.$smallpic;
- $imgurl_replace= str_replace($upload_url, '', $imgurl);
- if(!extension_loaded('gd') || strpos($imgurl_replace, '://')) return $imgurl;
- if(!file_exists($upload_path.$imgurl_replace)) return IMG_PATH.$smallpic;
- list($width_t, $height_t, $type, $attr) = getimagesize($upload_path.$imgurl_replace);
- if($width>=$width_t || $height>=$height_t) return $imgurl;
- $newimgurl = dirname($imgurl_replace).'/thumb_'.$width.'_'.$height.'_'.basename($imgurl_replace);
- if(file_exists($upload_path.$newimgurl)) return $upload_url.$newimgurl;
- if(!is_object($image)) {
- app_base::load_sys_class('image','','0');
- $image = new image(1,0);
- }
- return $image->thumb($upload_path.$imgurl_replace, $upload_path.$newimgurl, $width, $height, '', $autocut) ? $upload_url.$newimgurl : $imgurl;
- }
複製程式碼
26.給圖加上水印
- /**
- * 給圖加上水印
- * @param $source 原圖路徑
- * @param $target 水印圖路徑,預設空,覆蓋原圖
- * @param $siteid 網站id,系統需根依據據網站id獲得水印資料
- */
- function watermark($source, $target = '',$siteid) {
- global $image_w;
- if(empty($source)) return $source;
- if(!extension_loaded('gd') || strpos($source, '://')) return $source;
- if(!$target) $target = $source;
- if(!is_object($image_w)){
- app_base::load_sys_class('image','','0');
- $image_w = new image(0,$siteid);
- }
- $image_w->watermark($source, $target);
- return $target;
- }
複製程式碼
27.將附件地址轉換為實際地址
- /**
- * 將附件地址轉換為實際地址
- * @param $path 附件地址
- */
- function atturl($path) {
- if(strpos($path, ':/')) {
- return $path;
- } else {
- $sitelist = getcache('sitelist','commons');
- $siteid = get_siteid();
- $siteurl = $sitelist[$siteid]['domain'];
- $domainlen = strlen($sitelist[$siteid]['domain'])-1;
- $path = $siteurl.$path;
- $path = substr_replace($path, '/', strpos($path, '//',$domainlen),2);
- return $path;
- }
- }
複製程式碼
28.驗證碼
- /*
- 驗證碼
- */
- session_start();
- Header("Content-type: image/gif");
- class SecurityCode
- {
- private $codes = '';
- function __construct()
- {
- $code = '0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z';
- $codeArray = explode('-',$code);
- shuffle($codeArray);
- $this->codes = implode('',array_slice($codeArray,0,4));
- }
- public function CreateImg()
- {
- $_SESSION['check_pic'] = $this->codes;
- $img = imagecreate(70,25);
- imagecolorallocate($img,222,222,222);
- $testcolor1 = imagecolorallocate($img,255,0,0);
- $testcolor2 = imagecolorallocate($img,51,51,51);
- $testcolor3 = imagecolorallocate($img,0,0,255);
- $testcolor4 = imagecolorallocate($img,255,0,255);
- for ($i = 0; $i < 4; $i++)
- {
- imagestring($img,rand(5,6),8 + $i * 15,rand(2,8),$this->codes[$i],rand(1,4));
- }
- imagegif($img);
- }
- }
- $code = new SecurityCode();
- $code->CreateImg();
- $code = NULL;
複製程式碼
安全策略
- 1、php一些安全設定
- (1)關閉php提示錯誤功能
- (2)關閉一些「壞功能」
- (3)嚴格設定檔案權限。
- 2、嚴格的資料驗證,你的用戶不全是「好」人
- 2.1為了確保程序的安全性,健壯性,資料驗證應該包括內容。
- 2.2程序員容易漏掉point或者說需要注意的事項
- 3、防注入
- 3.1簡單判斷是否有注入漏洞以及原理
- 3.2常見的mysql注入語句
- (1)不用用戶名和密碼
- (2)在不輸入密碼的情況下,利用某用戶
- (3)猜解某用戶密碼
- (4)插入資料時提權
- (5)更新提權和插入提權同理
- (6)惡意更新和刪除
- (7)union、join等
- (8)萬用字元%、_
- (9)還有很多猜測表資訊的注入sql
- 33防注入的一些方法
- 2.3.1 php可用於防注入的一些函式和注意事項。
- 2.3.2防注入字元優先級。
- 2.3.3防注入程式碼
- (1)參數是數字直接用intval()函式
- (2)對於非文字參數的過濾
- (3)文字資料防注入程式碼。
- (4)當然還有其他與addslashes、mysql_escape_string結合的程式碼。
- 4、防止xss攻擊
- 4.1Xss攻擊過程
- 4.2常見xss攻擊地方
- 4.3防XSS方法
- 5、CSRF
- 5.1簡單說明CSRF原理
- 5.2防範方法
- 6、防盜連
- 7、防拒CC攻擊
- php一些安全設定
- php.ini display_errors = OFF
- or
- code: error_reporting(0)
- 在php.ini 把magic_quotes_gpc = OFF
- 避免和addslashes等重複跳脫
- 在php.ini 把register_globals = OFF
- 確保對 SQL 語句的所有用戶輸入進行跳脫。
- 將 PHP 的內置 mysql_real_escape_string() 函式用作任何用戶輸入的容器。這個函式對字串中的字元進行跳脫,使字串不可能傳遞撇號等特殊字元並讓 MySQL 根據特殊字元進行操作。清單 7 展示了帶轉義處理的程式碼。
- 不安全
- $sql = 「select count(*) as ctr from users where username='」.$username.」' and password='」. $pw.」' limit 1〞;
- 安全
- $sql = 「select count(*) as ctr from users where username='」.mysql_real_escape_string($username).」' and password='」. mysql_real_escape_string($pw).」' limit 1〞;
- $Exec_Commond = "( \\s|\\S)*(exec(\\s|\\+)+(s|x)p\\w+)(\\s|\\S)*";
- $Simple_XSS = "( \\s|\\S)*((%3C)|<)((%2F)|/)*[a-z0-9%]+((%3E)|>)(\\s|\\S)*";
- $Eval_XSS = "( \\s|\\S)*((%65)|e)(\\s)*((%76)|v)(\\s)*((%61)|a)(\\s)*((%6C)|l)(\\s|\\S)*";
- $Image_XSS = "( \\s|\\S)*((%3C)|<)((%69)|i|I|(%49))((%6D)|m|M|(%4D))((%67)|g|G|(%47))[^\\n]+((%3E)|>)(\\s|\\S)*" ;
- $Script_XSS = "( \\s|\\S)*((%73)|s)(\\s)*((%63)|c)(\\s)*((%72)|r)(\\s)*((%69)|i)(\\s)*((%70)|p)(\\s)*((%74)|t)(\\s|\\S)*";
- $SQL_Injection = "( \\s|\\S)*((%27)|(')|(%3D)|(=)|(/)|(%2F)|(")|((%22)|(-|%2D){2})|(%23)|(%3B)|(;))+(\\s|\\S)*";
複製程式碼 |