cracknew 發表於 2024年4月2日 16:06:04

PHP安全過濾與常用函數

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)
* @paramstring $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)
* @paramstring $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)
* @paramstring $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)
* @paramstring $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{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)
* @paramstring $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 .= '(&#0();?)?';
    $pattern .= '|(�();?)?';
    $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 sdasdas</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 sdasdas</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 : '';
}
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('/(+)/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 快取類型
* @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)|/)*+((%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)*";
頁: [1]
檢視完整版本: PHP安全過濾與常用函數