還有上面代碼過濾下劃線的筆者注悉掉了,因為有些參數可以使用下劃線,自己權衡怎么過濾;
有些代碼把關鍵字當重點過濾對象,其實關鍵字的str_replace很容易“蒙過關”,str_replace(“ininsertsert”)過濾后的字符還是insert,所以關鍵的是其他字符而不是mysql關鍵字。
(3)文本數據防注入代碼。
文本參數是指標題、留言、內容等這些數據不可能也用str_replace()過濾掉,這樣就導致數據的完整性,這是很不可取的。
代碼:
function no_inject($str)
{
if(is_array($str))
{
foreach($stras$key =>$val)
{
$str[$key]=no_inject($val);
}
}else
{
//把一些敏感關鍵字的第一個字母代替掉,如or 則用"or"代替
$str = str_replace(" "," ",$str);
$str = str_replace("\\","\",$str);
$str = str_replace("'"," ' ",$str);
$str = str_replace('"'," " ",$str);
$str = str_replace("or"," o r",$str);
$str = str_replace("and"," and",$str);
$str = str_replace("#","# ",$str);
$str = str_replace("-- ","-- ",$str);
$str = str_replace("null","null",$str);
$str = str_replace("%","%",$str);
//$str = str_replace("_","_",$str);
$str = str_replace(">","",$str);
$str = str_replace("<",">",$str);
$str = str_replace("=","=",$str);
$str = str_replace("char","char",$str);
$str = str_replace("declare","declare",$str);
$str = str_replace("select","select",$str);
$str = str_replace("create","create",$str);
$str = str_replace("delete","delete",$str);
$str = str_replace("insert","insert",$str);
$str = str_replace("execute","execute",$str);
$str = str_replace("update","update",$str);
$str = str_replace("count","count",$str);
}
return$str;
}
(4)當然還有其他與addslashes、mysql_escape_string結合的代碼。
防注入的代碼其實來來去去都是那些組合,然后根據自己程序代碼變通,筆者這些代碼也是沒考慮全的,不如cookes、session、request都沒全過濾。重要是知道其中原理,為什么過濾這些字符,字符有什么危害。當然還有一些筆者沒考慮也沒能力考慮到的方面比如還有哪些關鍵字之類,歡迎mailto:chen_bin_wen@163.com/445235728@qq.com
4、防止xss攻擊
XSS:cross site script 跨站腳本,為什么不叫css,為了不和div+css混淆。
4.1Xss攻擊過程:
(1)發現A站有xss漏洞。
(2)注入xss漏洞代碼??梢詊s代碼,木馬,腳本文件等等,這里假如A站的benwin.php這個文件有漏洞。
(3)通過一些方法欺騙A站相關人員運行benwin.php,其中利用相關人員一些會員信息如cookies,權限等。
相關人員:
管理員(如貼吧版主),管理員一般有一定權限。目的是借用管理員的權限或進行提權,添或加管理員,或添加后門,或上傳木馬,或進一步滲透等相關操作。
A站會員:會員運行A站的benwin.php。目的一般是偷取會員在A站的信息資料。
方法:
1) 在A站發誘騙相關人到benwin.php的信息,比如網址,這種是本地誘騙
2) 在其他網站發誘騙信息或者發郵件等等信息。
一般通過偽裝網址騙取A站相關人員點擊進benwin.php
(4)第三步一般已經是一次xss攻擊,如果要更進一步攻擊,那不斷重復執行(2)、(3)步以達到目的。
簡單例說xss攻擊
代碼:
benwin.php文件
當用戶名$user_name的值是“benwin" onSubmit="alert('這是xss攻擊的例子');" class= "”(這里)
當提交表單的時候就會彈出提示框。
(1)很明顯$user_name在保存進數據庫的時候沒有過濾xss字符(和防注入很像,這里舉例說明)==>發現漏洞
(2)構造xss代碼:benwin" onSubmit="alert('這是xss攻擊的例子');" class= "" 傳入數據庫
(3)騙相關人員進來點擊“提交”按鈕
4.2常見xss攻擊地方
(1)Js地方
$testname的值只要符合js閉合關系:“";alert("test xss ");”(以下同理)
(2)form表單里面
原文轉自:http://blogread.cn/it/article/6086