更新時間:2022-08-16 來源:黑馬程序員 瀏覽量:
所謂SQL注入就是把SQL命令人為地輸入URL、表格域或者其他動態(tài)生成的SQL查詢語句的輸入?yún)?shù)中,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令。
假設(shè)某個網(wǎng)站通過網(wǎng)頁獲取用戶輸入的數(shù)據(jù),并將其插入數(shù)據(jù)庫。正常情況下的URL地址如下。
http://localhost/id=222
此時,用戶輸入的id數(shù)據(jù)222會被插入數(shù)據(jù)庫執(zhí)行下列SQL語句。
select * from users where id = 222
但是,如果我們不對用戶輸入數(shù)據(jù)進行過濾處理,那么可能發(fā)生SQL注入。例如,用戶可能輸入下列URL。
1=1
此時用戶輸入的數(shù)據(jù)插入到數(shù)據(jù)庫后執(zhí)行的SQL語句如下。
select * from users where id = '' or '1'='1'
通過比較兩個SQL語句,發(fā)現(xiàn)這兩條SQL查詢語句意義完全不同,正常情況下,SQL語句可以查詢出指定id的用戶信息,但是SQL注入后查詢的結(jié)果是所有用戶信息。
SQL注入是風險非常高的安全漏洞,我們可以在應(yīng)用程序中對用戶輸入的數(shù)據(jù)進行合法性檢測,包括用戶輸入數(shù)據(jù)的類型和長度,同時,對SQL語句中的特殊字符(如單引號、雙引號、分號等)進行過濾處理。
值得一提的是,由于SQL注入攻擊的Web應(yīng)用程序處于應(yīng)用層,因此大多防火墻不會進行攔截。除了完善應(yīng)用代碼外,還可以在數(shù)據(jù)庫服務(wù)器端進行防御,對數(shù)據(jù)庫服務(wù)器進行權(quán)限設(shè)置,降低了Web程序連接數(shù)據(jù)庫的權(quán)限,撤銷不必要的公共許可,使用強大的加密技術(shù)保護敏感數(shù)據(jù),并對被讀取走的敏感數(shù)據(jù)進行審查跟蹤等。