最常用見的可能就是
首先將magic_quotes_gpc設定為On,display_errors設定為Off,如果id型,我們利用intval()將其轉換成整數類型,如代碼:
$id=intval($id);
好了下面我來介紹php提交資料過濾的基本原則
1)提交變數進資料庫時,我們必須使用addslashes()進行過濾,像我們的注入問題,一個addslashes()也就搞定了。其實在涉及到變數取值時,intval()函數對字串的過濾也是個不錯的選擇。
2)在php.ini中開啟magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie裡的引號變為斜杠。magic_quotes_runtime對於進出資料庫的資料可以起到格式話的作用。其實,早在以前注入很瘋狂時,這個參數就很流行了。
3)在使用系統函數時,必須使用escapeshellarg(),escapeshellcmd()參數去過濾,這樣你也就可以放心的使用系統函數。
4)對於跨站,strip_tags(),htmlspecialchars()兩個參數都不錯,對於使用者提交的的帶有html和php的標記都將進行轉換。比如角括弧"<"就將轉化為 "<"這樣無害的字元。
代碼如下 |
複製代碼 |
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); strip_tags($text,); |
5)對於相關函數的過濾,就像先前的include(),unlink,fopen()等等,只要你把你所要執行操作的變數指定好或者對相關字元過濾嚴密,我想這樣也就無懈可擊了。
2、PHP簡單的資料過濾
1)入庫: trim($str),addslashes($str)
2)出庫: stripslashes($str)
3)顯示: htmlspecialchars(nl2br($str))
分享一個執行個體
具體的代碼:
代碼如下 |
複製代碼 |
<?php //security.php /** * @author zhengwei * @copyright 2007 */ /* 函數名稱:inject_check() 函數作用:檢測提交的值是不是含有SQL注射的字元,防止注射,保護伺服器安全 參 數:$sql_str: 提交的變數 返 回 值:返回檢測結果,ture or false 函數作者:heiyeluren */ function inject_check($sql_str) { return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str); // 進行過濾 } /* 函數名稱:verify_id() 函數作用:校正提交的ID類值是否合法 參 數:$id: 提交的ID值 返 回 值:返回處理後的ID 函數作者:heiyeluren */ function verify_id($id=null) { if (!$id) { exit('沒有提交參數!'); } // 是否為空白判斷 elseif (inject_check($id)) { exit('提交的參數非法!'); } // 注射判斷 elseif (!is_numeric($id)) { exit('提交的參數非法!'); } // 數字判斷 $id = intval($id); // 整型化 return $id; } /* 函數名稱:str_check() 函數作用:對提交的字串進行過濾 參 數:$var: 要處理的字串 返 回 值:返回過濾後的字串 函數作者:heiyeluren */ function str_check( $str ) { if (!get_magic_quotes_gpc()) { // 判斷magic_quotes_gpc是否開啟 $str = addslashes($str); // 進行過濾 } $str = str_replace("_", "_", $str); // 把 '_'過濾掉 $str = str_replace("%", "%", $str); // 把 '%'過濾掉 return $str; } /* 函數名稱:post_check() 函數作用:對提交的編輯內容進行處理 參 數:$post: 要提交的內容 返 回 值:$post: 返回過濾後的內容 函數作者:heiyeluren */ function post_check($post) { if (!get_magic_quotes_gpc()) { // 判斷magic_quotes_gpc是否為開啟 $post = addslashes($post); // 進行magic_quotes_gpc沒有開啟的情況對提交資料的過濾 } $post = str_replace("_", "_", $post); // 把 '_'過濾掉 $post = str_replace("%", "%", $post); // 把 '%'過濾掉 $post = nl2br($post); // 斷行符號轉換 $post = htmlspecialchars($post); // html標記轉換 return $post; } foreach ($_POST as $post_key=>$post_var) { if (is_numeric($post_var)) { $post[strtolower($post_key)] = get_int($post_var); } else { $post[strtolower($post_key)] = get_str($post_var); } }
/* 過濾函數 */ //整型過濾函數 function get_int($number) { return intval($number); } //字串型過濾函數 function get_str($string) { if (!get_magic_quotes_gpc()) { return addslashes($string); } return $string; } ?> 在有些cms中我會看到 foreach($HTTP_POST_VARS as $key=>$value){ $ArrPostAndGet[]=$value; } foreach($HTTP_GET_VARS as $key=>$value){ $ArrPostAndGet[]=$value; }
|
這個的代碼然後在所有頁面都載入這個函數,這樣過濾個人發現好像上傳檔案時會有問題哦。