1. 程式人生 > >WEB安全-SQL注入

WEB安全-SQL注入

什麼是SQL注入

所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程式,將(惡意的)SQL命令注入到後臺資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。

為什麼會產生SQL注入?

沒有對使用者的輸入字元進行過濾
伺服器或資料庫沒有做相應的安全配置
攻擊者可以偽造資料結構

SQL注入的方式 : post get cookie

get注入:

http://www.xxx.com/news.php?id=1’

返回錯誤

http://www.xxx.com/news.php?id=1 and 1=1 返回正常
http://www.xxx.com/news.php?id=1 and 1=2 返回錯誤

post注入:

1.利用mysql命令中的關鍵字

admin’#

admin’–

‘or 1=1 #

2.post資料包

sql注入防禦:

一、過濾

1、trim():函式過濾掉頭和尾的空格
2、Htmlspecialchars():函式把預定義字串轉化為實體,可以防止因為PHP_SELF帶來的XSS攻擊
3、Stripslashes():去掉反斜槓
4、Addslashes():新增反斜槓

5、數字型別判斷型別:is_numeric()

二、使用pdo預定義處理

提供給預處理語句的引數不需要用引號括起來,驅動程式會自動處理。如果應用程式只使用預處理語句,可以確保不會發生SQL 注入。(然而,如果查詢的其他部分是由未轉義的輸入來構建的,則仍存在 SQL 注入的風險)。
p d o >

p r e p a r e ( pdo->prepare( sql);
p d o > e x e c u t e ( a r r a y ( i d = > pdo->execute(array(“id”=> id));
備註:

magic_quotes_gpc 函式判斷