JavaScript的脆弱性
· Niking·遠望資訊
這雖然是一個很顯而易見的漏洞,只要有一點編程基礎的人都可以很容易的發現,用JavaScript做密碼欄,是很危險的事情。因為普通用戶很容易可以通過“查看源文件”來得到HTML的源文件,下面給出我以前“網絡安全”認證頁面的代碼:
<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("密碼錯誤\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對應的真實字母為h,以次類推,再分析下去……
if (password2 ==g+u+e+s+t);
if (password1 ==s+d+a+e+n+b+z)
這句話就是對用戶名和密碼的認證的語句了,通過密碼對照表,我們可以知道當password2(即用戶名)=holes,password1 (即密碼)=exploits的時候,就執行confirm("登陸成功 \n"+password2); location.href= g+u+e+s+p+f+g+t+q },其實這句話才是真正重要的,因為它告訴了我們,當認證成功后,頁面將自動轉到holes.htm這個頁面中。這樣我們只要稍加分析,就可以不經認證就進入本來需要認證才能進入的頁面了。如果這個頁面包括了其他用戶的密碼的話,就會造成普通用戶密碼的泄露,那么使用JavaScirpt就顯得更加不安全了。甚至有些頁面連密碼對照表也沒有,直接把用戶名與密碼以明文的形式儲存(多可怕?。。?。
解決方案:
使用CGI、ASP或者php3。