JavaScript的脆弱性
發(fā)布時(shí)間:2008-08-21 閱讀數(shù): 次 來源:網(wǎng)樂原科技
這雖然是一個(gè)很顯而易見的漏洞,只要有一點(diǎn)編程基礎(chǔ)的人都可以很容易的發(fā)現(xiàn),用JavaScript做密碼欄,是很危險(xiǎn)的事情。因?yàn)槠胀ㄓ脩艉苋菀卓梢酝ㄟ^“查看源文件”來得到HTML的源文件,下面給出我以前“網(wǎng)絡(luò)安全”認(rèn)證頁面的代碼:
<script>
function passwd()
{
var password2 = document.form1.user_id.value;
var password1=document.form1.pas-sword.value;
var g="h";var u="o";var e="l";var s="e";var t="t";var d="x";var a="p";var b="i";var n="o";var z="t";f=".";q="m";var p="s";
var back="index.html";
if (password2 ==g+u+e+s+t);
if (password1 ==s+d+a+e+n+b+z)
{
confirm("登陸成功 \n"+password2);
location.href= g+u+e+s+p+f+g+t+q }
else{
alert("密碼錯(cuò)誤\n" + password1 + "沒有注冊\n 再見!");
location.href=back }
}
</script>
只要稍加分析,不難看出:
var g="h";var u="o";var e="l";var s="e";var t="t";var d="x";var a="p";var b="i";var n="o";var z="t";f=".";q="m";var p="s";
是一個(gè)密碼對照表,其中的g對應(yīng)的真實(shí)字母為h,以次類推,再分析下去……
if (password2 ==g+u+e+s+t);
if (password1 ==s+d+a+e+n+b+z)
這句話就是對用戶名和密碼的認(rèn)證的語句了,通過密碼對照表,我們可以知道當(dāng)password2(即用戶名)=holes,password1(即密碼)=exploits的時(shí)候,就執(zhí)行confirm("登陸成功 \n"+password2); location.href= g+u+e+s+p+f+g+t+q }, 其實(shí)這句話才是真正重要的,因?yàn)樗嬖V了我們,當(dāng)認(rèn)證成功后,頁面將自動轉(zhuǎn)到holes.htm這個(gè)頁面中。這樣我們只要稍加分析,就可以不經(jīng)認(rèn)證就進(jìn)入本來需要認(rèn)證才能進(jìn)入的頁面了。如果這個(gè)頁面包括了其他用戶的密碼的話,就會造成普通用戶密碼的泄露,那么使用JavaScirpt就顯得更加不安全了。甚至有些頁面連密碼對照表也沒有,直接把用戶名與密碼以明文的形式儲存(多可怕啊?。?。
解決方案:
使用CGI、ASP或者php3。