最常用見的可能就是
首先將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;
}
|
這個的代碼然後在所有頁面都載入這個函數,這樣過濾個人發現好像上傳檔案時會有問題哦。