日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

防止SQL注入的常見方法

時間:2017-06-23 23:47:02 類型:PHP
字號:    

一、SQL注入簡介

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


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

1.尋找到SQL注入的位置

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

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

 

三、SQL注入攻擊實例

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

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

用戶名: ‘or 1 = 1 –

密 碼:

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

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

從理論上說,后臺認(rèn)證程序中會有如下的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 那么這個條件一定會成功;

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

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

SELECT * FROM user_table WHERE

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

….其后果可想而知…

四. 解決方法:

 1>   首先對接收到的數(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沒有打開的情況對提交數(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. 平臺盡量使用一些PHP 框架來操作, 因為這些框架在底層都使用了安全過濾機制, 如: THINKPHP框架, 在底層使用了PDO預(yù)處理機制及自動參數(shù)綁定功能

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