蜜桃精品成人影片,99国产精品偷窥熟女精品视频,啊灬啊灬啊灬快灬A片免费,b站大全永不收费免费下载软件吗,重囗味sM在线观看无码

防止SQL注入的常見方法

時(shí)間:2017-06-23 23:47:02 類型:PHP
字號(hào):    

一、SQL注入簡(jiǎn)介

    SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實(shí)現(xiàn)攻擊,而是針對(duì)程序員編程時(shí)的疏忽,通過SQL語句,實(shí)現(xiàn)無帳號(hào)登錄,甚至篡改數(shù)據(jù)庫。


二、SQL注入攻擊的總體思路

1.尋找到SQL注入的位置

2.判斷服務(wù)器類型和后臺(tái)數(shù)據(jù)庫類型

3.針對(duì)不通的服務(wù)器和數(shù)據(jù)庫特點(diǎn)進(jìn)行SQL注入攻擊

 

三、SQL注入攻擊實(shí)例

比如在一個(gè)登錄界面,要求輸入用戶名和密碼:

可以這樣輸入實(shí)現(xiàn)免帳號(hào)登錄:

用戶名: ‘or 1 = 1 –

密 碼:

點(diǎn)登陸,如若沒有做特殊處理,那么這個(gè)非法用戶就很得意的登陸進(jìn)去了.(當(dāng)然現(xiàn)在的有些語言的數(shù)據(jù)庫API已經(jīng)處理了這些問題)

這是為什么呢? 下面我們分析一下:

從理論上說,后臺(tái)認(rèn)證程序中會(huì)有如下的SQL語句:

String sql = "select * from user_table where username=

' "+userName+" ' and password=' "+password+" '";

當(dāng)輸入了上面的用戶名和密碼,上面的SQL語句變成:

SELECT * FROM user_table WHERE username=

'’or 1 = 1 -- and password='’

分析SQL語句:

條件后面username=”or 1=1 用戶名等于 ” 或1=1 那么這個(gè)條件一定會(huì)成功;

然后后面加兩個(gè)-,這意味著注釋,它將后面的語句注釋,讓他們不起作用,這樣語句永遠(yuǎn)都能正確執(zhí)行,用戶輕易騙過系統(tǒng),獲取合法身份。

這還是比較溫柔的,如果是執(zhí)行

SELECT * FROM user_table WHERE

username='' ;DROP DATABASE (DB Name) --' and password=''

….其后果可想而知…

四. 解決方法:

 1>   首先對(duì)接收到的數(shù)據(jù)先進(jìn)行字符串過濾, 如使用以下函數(shù) 

    

function post_check($post) {    
	if (!get_magic_quotes_gpc()) {    // 判斷magic_quotes_gpc是否為打開    
		$post = addslashes($post);    // 進(jìn)行magic_quotes_gpc沒有打開的情況對(duì)提交數(shù)據(jù)的過濾    
	}    
	//$post = str_replace("_", "", $post);    // 把 '_'過濾掉    
	$post = str_replace("%", "", $post);    // 把 '%'過濾掉   
	$post = str_replace("'", "", $post);
	$post = str_replace("exec", "", $post);
	$post = str_replace("select", "", $post);
	$post = str_replace("update", "", $post);
	$post = str_replace("exec", "", $post);
	$post = str_replace("from", "", $post);
	$post = str_replace("drop", "", $post);    
	$post = nl2br($post);    // 回車轉(zhuǎn)換    
	$post = htmlspecialchars($post);    // html標(biāo)記轉(zhuǎn)換      
     return $post;    
} 


2. 平臺(tái)盡量使用一些PHP 框架來操作, 因?yàn)檫@些框架在底層都使用了安全過濾機(jī)制, 如: THINKPHP框架, 在底層使用了PDO預(yù)處理機(jī)制及自動(dòng)參數(shù)綁定功能

3. 如果一定要使用原生SQL語句查詢, 請(qǐng)使用PDO的參數(shù)綁定, 或者命名點(diǎn)位符功能