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