深度解析SQL注入 十大方式保護(hù)數(shù)據(jù)安全
保存SQLQueryStructure(也稱作SQL注入)失敗”在CWE/SANS2月16號(hào)出版的排名前25位最危險(xiǎn)編程錯(cuò)誤清單上位列第二。原因是:SQL注入式攻擊對(duì)企業(yè)用戶構(gòu)成了巨大的潛在威脅。這是因?yàn)橐坏㏒QL注入式攻擊成功,就會(huì)導(dǎo)致黑客侵入你的網(wǎng)絡(luò),訪問(wèn)和毀壞數(shù)據(jù)并控制計(jì)算機(jī)。
SQL注入是什么?
SQL注入式攻擊的原理非常簡(jiǎn)單。當(dāng)一款應(yīng)用軟件進(jìn)行用戶數(shù)據(jù)輸出時(shí),就為惡意用戶入侵制造了機(jī)會(huì),從而導(dǎo)致輸入是作為SQL序列出現(xiàn)而不是數(shù)據(jù)。
舉例來(lái)說(shuō),想象這樣一行代碼:
SELECT*FROMUsersWHEREUsername=’$username’ANDPassword=’$password
設(shè)計(jì)這行代碼是要顯示”用戶”框中用戶名和密碼的記錄。使用網(wǎng)絡(luò)界面的話,在提示輸入用戶名和密碼的時(shí)候,惡意用戶可能會(huì)鍵入:
1′or’1′=’1
1′or’1′=’1
然后產(chǎn)生這些的序列:
SELECT*FROMUsersWHEREUsername=’1′OR’1′=’1′ANDPassword=’1′OR’1′=’1′
這樣黑客就將整個(gè)OR條件成功的注入了驗(yàn)證流程。更糟糕的是,條件’1′=’1′總是正確的,因此這種SQL序列通常會(huì)導(dǎo)致黑客規(guī)避了驗(yàn)證流程。
使用諸如”;”的字符會(huì)在現(xiàn)有序列的末尾另外產(chǎn)生一行序列,作為現(xiàn)有序列注釋的一部分,黑客可能會(huì)刪除整個(gè)表格或者更改包含的數(shù)據(jù)。黑客甚至能掌控基礎(chǔ)的操作系統(tǒng)環(huán)境,從而控制整個(gè)計(jì)算機(jī),將計(jì)算機(jī)淪為供其驅(qū)使的肉雞來(lái)攻擊網(wǎng)絡(luò)中的其他計(jì)算機(jī)。概括來(lái)說(shuō)SLQ注入式攻擊的結(jié)果包括:機(jī)密數(shù)據(jù)泄露,數(shù)據(jù)完整性的損失,數(shù)據(jù)丟失,危及整個(gè)網(wǎng)絡(luò)。
如何防御SQL注入式攻擊?
最重要的措施就是數(shù)據(jù)清理和驗(yàn)證。數(shù)據(jù)清理通常會(huì)涉及任何通過(guò)某項(xiàng)功能運(yùn)行的提交數(shù)據(jù)(比如MySQL的mysql_real_escape_string()功能)來(lái)保證任何存在風(fēng)險(xiǎn)的字符(比如”‘”)不會(huì)傳遞到數(shù)據(jù)的SQL序列。
驗(yàn)證有略微的不同。數(shù)據(jù)驗(yàn)證是要確保提交的數(shù)據(jù)以希望的格式出現(xiàn)。在最基本的層面上,這包括確保電子郵件地址包含”@”標(biāo)識(shí),提交的數(shù)據(jù)長(zhǎng)度不能超出規(guī)定的最大長(zhǎng)度。驗(yàn)證經(jīng)常會(huì)以兩種形式出現(xiàn):通過(guò)風(fēng)險(xiǎn)黑名單或多余的字符和通過(guò)在指定情況下才能使用的字符的白名單,這更多會(huì)涉及編程人員的工作。雖然驗(yàn)證通常是在用戶方面發(fā)生的行為,但黑客可能會(huì)修改或繞過(guò)驗(yàn)證,因此對(duì)服務(wù)器上的數(shù)據(jù)加以驗(yàn)證也很重要。
但是數(shù)據(jù)清理和驗(yàn)證還遠(yuǎn)遠(yuǎn)不夠。以下是幫助用戶阻止或緩解SQL注入式攻擊的十種方法:
1.不要相信任何人:假設(shè)所提交的用戶數(shù)據(jù)都是存在問(wèn)題的,對(duì)所有數(shù)據(jù)加以驗(yàn)證和清潔。
2.不要使用可能被規(guī)避的動(dòng)態(tài)SQL:無(wú)論何時(shí)都盡可能采用備好的報(bào)表,參數(shù)化的查詢或者存儲(chǔ)的流程。
關(guān)鍵詞:SQL注入,數(shù)據(jù)安全
閱讀本文后您有什么感想? 已有 人給出評(píng)價(jià)!
- 0
- 0
- 0
- 0
- 0
- 0