『壹』 高分求php表單過濾代碼。
要防止注入,過濾表單輸入固然重要,但還需要從其他方面一起入手
屏蔽用戶輸入特殊字元的實質是,禁止用戶利用程序漏洞拼裝出一些我們不想讓用戶執行的SQL
例如:
$sql="SELECT*FROMtableWHEREuser='$_POST['user']'ANDpassword='$_POST['pwd']'";
用戶輸入
$_POST['user']='john';
$_POST['pwd']="'OR''='";
要麼實際執行的sql就是
SELECT*FROMtableWHEREuser='john'ANDpassword=''OR''=''
所以我們要對用戶的輸入做出處理,避免這種情況的發生
對於表單輸入,必要的過濾是需要的,對於每一個輸入可以寫一個function來篩一下
例如:
$user_name=clean($_POST['user']);
functionclean($v){
if(get_magic_quotes_gpc()){
$v=stripslashes($v);
}
//轉義字元串中的特殊字元
$v=mysql_real_escape_string($v);
return$v;
}
至於內容中包含一些sql的關鍵字,其實不用太過緊張,但是在sql語句中必須處理
例如:
INSERTINTOtableVALUES('xxx','xxx','xxx')
要保證每個值都被單引號包起來
SELECT,UPDATE,DELETE中的WHERE條件也是如此,但凡以用戶輸入的部分作為參數的,都得用單引號括起來,這樣就能有效防止sql注入
『貳』 php中,通過$_GET 和 $_POST 取得的數據 安不安全 需要什麼過濾函數處理嗎
引號過濾有magic_quotes_gpc(伺服器配置)
函數addslashes() htmlspecialchars(,ENT_QUOTE);
注意伺服器上是否已經開啟magic_quotes_gpc
(php>=5.3 已經廢棄了它) 如果已經開啟,再進行轉義會導致雙層轉義。 另外addslashes() addcslashes() 都不能對數組進行處理,需要寫一個遞歸實現。
你可以使用函數get_magic_quotes_gpc()來檢測它是否已經開啟
不建議使用addslashes使用addslashes可能會因為資料庫編碼的問題使得單引號未被轉義了解詳情可訪問:http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string
『叄』 php多條件查詢問題,怎麼過濾空值
是的正如你所說有兩種解決方案,第一種是採用PHP的方式,先判斷數據的合法性,比如是否提交了空值(推薦使用,沒有垃圾數據);第二種不做任何判斷,空值也能提交到資料庫,只是在SQL查詢時過濾空值數據(不推薦使用,有垃圾數據)。
解決方案1(通過PHP過濾空值數據):
if($_POST['欄位']=='')exit('<scripttype="text/javascript">alert("數據不合法!");history.back();</script>');//依此類推,逐一判斷表單$_POST數據
解決方案2(通過SQL查詢來過濾空值數據):
SELECT`欄位名`FROM`表名`WHERE`欄位1`NOTIN('',NULL)AND`欄位2`NOTIN('',NULL)...;
以上就是兩種解決方案,我推薦兩種方案組合使用,這樣確保萬無一失,如有問題歡迎追問~
『肆』 使用thinkphp時,表單提交的html內容,全被" \ " 反斜杠過濾了。怎麼在前台讀取到html實際內容呢去掉 \
因為默認的使用的htmlspecialchars()進行處理的。你可以使用
htmlspecialchars_decode()轉成字元