一,HTML防注入。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、仁和網(wǎng)站維護、網(wǎng)站推廣。
一般的html注入都是在字符串中加入了html標簽,用下JAVA代碼可以去掉這部分代碼。
代碼如下,自己封裝成方法即可。
String msge = "asdasdasdasd div id=\"f\"asdfsdf";
System.out.println(msge);
msge = msge.replace("", "");
msge = msge.replace("", "");
msge = msge.replace(" ", " ");
msge = msge.replace("", "");
msge = msge.replace("\"", """);
msge = msge.replace("'", "qpos;");
System.out.println(msge);
二、防SQL注入
最簡單最容易的是限制用戶輸入。
簡單點的就是不允許用戶輸入單引號 和 --,因為單引號號--在SQL中都是影響執(zhí)行的。
但SQL注入是多方面的,防止的方法也有很多種。
1、地址欄禁止特殊字符防SQL注入
把特殊字符(如and、or、'、")都禁止提交就可以防止注入了。
2、php過濾html字符串,防止SQL注入
批量過濾post,get敏感數(shù)據(jù)
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
數(shù)據(jù)過濾函數(shù)
function stripslashes_array($array) {
while(list($key,$var) = each($array)) {
if ($key != 'argc' $key != 'argv' (strtoupper($key) != $key || ''.intval($key) == "$key")) {
if (is_string($var)) {
$array[$key] = stripslashes($var);
}
if (is_array($var)) {
$array[$key] = stripslashes_array($var);
}
}
}
return $array;
}
3、替換HTML尾標簽
function lib_replace_end_tag($str)
{
if (empty($str)) return false;
$str = htmlspecialchars($str);
$str = str_replace( '/', "", $str);
$str = str_replace("\\", "", $str);
$str = str_replace("", "", $str);
$str = str_replace("", "", $str);
$str = str_replace("SCRIPT", "", $str);
$str = str_replace("/SCRIPT", "", $str);
$str = str_replace("script", "", $str);
$str = str_replace("/script", "", $str);
$str=str_replace("select","select",$str);
$str=str_replace("join","join",$str);
$str=str_replace("union","union",$str);
$str=str_replace("where","where",$str);
$str=str_replace("insert","insert",$str);
$str=str_replace("delete","delete",$str);
$str=str_replace("update","update",$str);
$str=str_replace("like","like",$str);
$str=str_replace("drop","drop",$str);
$str=str_replace("create","create",$str);
$str=str_replace("modify","modify",$str);
$str=str_replace("rename","rename",$str);
$str=str_replace("alter","alter",$str);
$str=str_replace("cas","cast",$str);
$str=str_replace("","",$str);
$str=str_replace("","",$str);
$str=str_replace("","",$str);
$str=str_replace(" ",chr(32),$str);
$str=str_replace(" ",chr(9),$str);
$str=str_replace(" ",chr(9),$str);
$str=str_replace("",chr(34),$str);
$str=str_replace("'",chr(39),$str);
$str=str_replace("br /",chr(13),$str);
$str=str_replace("''","'",$str);
$str=str_replace("css","'",$str);
$str=str_replace("CSS","'",$str);
return $str;
}
三、專業(yè)的事情交給專業(yè)的工具去做。
安裝安全軟件。例如,在服務(wù)器中安裝“服務(wù)器安全狗”,可以設(shè)置防注入,防攻擊的設(shè)置,只要設(shè)置好安全規(guī)則,就可以屏蔽大多數(shù)攻擊入侵。
防止SQL注入
opensns
對于WEB應(yīng)用來說,SQL注入攻擊無疑是首要防范的安全問題,系統(tǒng)底層對于數(shù)據(jù)安全方面本身進行了很多的處理和相應(yīng)的防范機制,例如:
$User = M("User"); // 實例化User對象
$User-find($_GET["id"]);
即便用戶輸入了一些惡意的id參數(shù),系統(tǒng)也會強制轉(zhuǎn)換成整型,避免惡意注入。這是因為,系統(tǒng)會對數(shù)據(jù)進行強制的數(shù)據(jù)類型檢測,并且對數(shù)據(jù)來源進行數(shù)據(jù)格式轉(zhuǎn)換。而且,對于字符串類型的數(shù)據(jù),ThinkPHP都會進行escape_string處理(real_escape_string,mysql_escape_string)。
通常的安全隱患在于你的查詢條件使用了字符串參數(shù),然后其中一些變量又依賴由客戶端的用戶輸入,要有效的防止SQL注入問題,我們建議:
查詢條件盡量使用數(shù)組方式,這是更為安全的方式;
如果不得已必須使用字符串查詢條件,使用預(yù)處理機制(3.1版本新增特性);
開啟數(shù)據(jù)字段類型驗證,可以對數(shù)值數(shù)據(jù)類型做強制轉(zhuǎn)換;(3.1版本開始已經(jīng)強制進行字段類型驗證了)
使用自動驗證和自動完成機制進行針對應(yīng)用的自定義過濾;
字段類型檢查、自動驗證和自動完成機制我們在相關(guān)部分已經(jīng)有詳細的描述。
查詢條件預(yù)處理
where方法使用字符串條件的時候,支持預(yù)處理(安全過濾),并支持兩種方式傳入預(yù)處理參數(shù),例如:
$Model-where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))-select();
或者
$Model-where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)-select();
模型的query和execute方法 同樣支持預(yù)處理機制,例如:
$model-query('select * from user where id=%d and status=%d',$id,$status);
或者
$model-query('select * from user where id=%d and status=%d',array($id,$status));
execute方法用法同query方法。
(1)查詢條件盡量使用數(shù)組方式,這是更為安全的方式;
(2)如果不得已必須使用字符串查詢條件,使用預(yù)處理機制;
(3)使用綁定參數(shù);
(4)強制進行字段類型驗證,可以對數(shù)值數(shù)據(jù)類型做強制轉(zhuǎn)換;
(5)使用自動驗證和自動完成機制進行針對應(yīng)用的自定義過濾;
(6)使用字段類型檢查、自動驗證和自動完成機制等避免惡意數(shù)據(jù)的輸入;
(7)做一些過濾。
function?clean($v)?{?
//判斷magic_quotes_gpc是否為打開
if?(!get_magic_quotes_gpc())?{
//進行magic_quotes_gpc沒有打開的情況對提交數(shù)據(jù)的過濾
$v?=?addslashes($v);
}
//把'_'過濾掉
$v?=?str_replace("_",?"\_",?$v);
//把'%'過濾掉?
$v?=?str_replace("%",?"\%",?$v);
//把'*'過濾掉?
$v?=?str_replace("*",?"\*",?$v);
//回車轉(zhuǎn)換
$v?=?nl2br($v);
//html標記轉(zhuǎn)換
$v?=?htmlspecialchars($v);
return?$v;?
}
如果需要,還可以屏蔽一下危險字符,例如insert, update, delete等
//將update去掉
$v?=?str_replace("update",?"",?$v);
最后,在拼裝sql語句時,用戶輸入的東西,全括在單引號內(nèi)
網(wǎng)站題目:php防注入數(shù)據(jù)過濾 phpsql防注入函數(shù)
網(wǎng)址分享:http://m.kartarina.com/article36/dodeepg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站導航、ChatGPT、靜態(tài)網(wǎng)站、搜索引擎優(yōu)化、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)