|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧算法
读者老是问我如何才干在他们的站点上经由过程利用JavaScript来回护用户的上岸口令,我的第一个反响就是告知他们利用平安套接层(Secure Sockets Layer,SSL)。当利用准确时,SSL是平安敏感的Web法式最好的处理办法。但是,一些开辟者在宣布对平安不那末敏感的Web法式时更情愿让用户上岸时不利用SSL。
Web法式利用一种称为会话形态办理(session state management)的手艺来跟踪阅读器与办事器之间的交互,正如超文本传输协定所划定的那样,每一个阅读器的恳求都自力于其他阅读器,一个Web法式必需利用一些技能,如cookie,埋没的表格字段,或URL重写,来辨认其与特定的阅读器的特定的会话。大多半办事器端开辟情况如ASP,PHP,ColdFusion等利用cookie。
利用会话形态办理的成绩是从基本上说它是不平安的,一个黑客可以在办事器和用户阅读器之间截取用来办理会话形态的cookie,表格字段值,或是URL,一旦到手,他就能够使用这些信息来接收用户的会话!(译者注:典范的例子如假充买卖用户竞价)
大多半办事器真个剧本开辟情况答应你削减这类风险,例如你可以指定cookie的极短生效工夫,利用难展望的会话形态信息。但是最平安的仍是利用平安套接层(SSL),购置它后,你就能够不但回护用户口令,还可以回护会话形态办理信息。
假如你不利用SSL,让用户在你的法式中的平安敏感页面中每次都从头认证是个好主张,然而从用户角度动身,这其实是太费事了。最初,你必需思索你和你的用户事实情愿承当多大的风险。假如暗码口令被暴光的风险很高,仍是用SSL来构建你的法式吧,假如你不克不及利用SSL,那末就利用基于MD5的上岸进程。这最少能回护你的用户的口令。另外,选择一种答应回护会话形态信息的办事器端剧本手艺。
凡是,当用户不利用SSL(即通俗HTTP)上岸时,他(她)的口令从分开阅读器起至抵达办事器为止一直是以明文形态表露的。
但是,使用一种称为单向函数的数学函数的匡助,咱们可以设计一种其实不表露用户口令的上岸企图。一个函数是一种将纠合A的元素映照到纠合B的办法,每一个纠合A中的元素都对应于纠合B中的一个肯定元素。而一个单向函数的感化就是使逆向的推算十分坚苦,即,给定纠合B的一个元素,很难从纠合A中决意哪一个元素(假如存在的话)是映照到B纠合中的这个元素的。
一个很好的类比是碎纸机,把文件放到碎纸机中切碎很便利,而从碎片中重建原文件就相当坚苦了。
<P p 之一)。MD5算法从任何长度的一个动静发生一个16位的数字指纹,这个动静可所以一个字符串,一个文件,一串文本流,或任何其它类型的字节序列。RFC1321中将它归档。>< Adelman Shamir, Rivest是有名的RSA加密算法的三位创造人:Rivest, Rivest(Ronald Digest的缩写,MD5是一种128位的哈希算法),由Ronald 一个十分盛行且被普遍利用的单向函数使用是MD5算法(译者注:MD是Message> 咱们如今就来使用MD5算法开辟一个进程,它将可以回护从阅读器传送到办事器的口令。
用户试图上岸到一个Web使用法式时,办事器端剧本供应用户一个包括有从数十亿能够值中发生的随机数的表格,当用户在此上岸表格中输出她们的ID和口令,客户真个剧本将这个随机数值添加到口令后并加以MD5单向运算。然后以MD5算法的输入作为口令,我将称这个口令为MD5口令。
客户端剧本然后将用户ID和MD5口令传输至办事器,由于这个值是MD5算法的输入,反向推算出用户本来输出的口令是几近不成能的。(译者注:MD5算法已有被德国解密专家攻破的记载,在对平安请求很高的场所利用仍存在风险)
当用户ID和MD5算法得出的口令被Web使用法式吸收到后,Web法式履行与用户阅读器不异的操作,它将现在传给用户的随机数加到用户口令后,(此口令取自办事器中被回护区域)然后盘算出准确的MD5口令值,将此数值与从阅读器收到的值作一对照,如相等,则设置一个办事器端会话变量以肯定用户认证经由过程。
此时你能够会困惑为何要利用随机数,随机数是用来避免从头进击的,假如仅用户口令经由MD5运算,此MD5口令将一直坚持一个值,监听的黑客只需复杂地截获这个MD5口令便可用它来上岸进Web使用法式。这个随机数包管了每次新的上岸都有一个特定的MD5口令。
基于MD5的上岸计划用JavaScript来完成绝对轻易,一个开放源码的完整完成可从Paul Johnston处失掉。(译者注:见附录)
咱们如今用ASP来完成办事器端剧本(由于它撑持JScript,MicroSoft版本的JavaScript)。你固然可以用其他任何办事器端剧本,只不外你得将MD5算法翻译成那种言语。
以下是上岸表格的ASP完成,login.asp:
$#@60;%@ LANGUAGE = "JScript" %$#@62;
$#@60;HTML$#@62;
$#@60;HEAD$#@62;
$#@60;TITLE$#@62;Please log in!$#@60;/TITLE$#@62;
$#@60;% Session("sharedValue") = Math.random().toString() %$#@62;
$#@60;SCRIPT LANGUAGE="JavaScript" SRC="md5.js"$#@62;$#@60;/SCRIPT$#@62;
$#@60;SCRIPT LANGUAGE="JavaScript"$#@62;
var sharedValue = "$#@60;% =Session("sharedValue") %$#@62;"
function handleLogin() {
sendMD5Value(calculateMD5Value())
}
function calculateMD5Value() {
var pw = document.forms["login"].elements["password"].value
pw += sharedValue
return calcMD5(pw)
}
function sendMD5Value(hash) {
document.forms["login"].elements["password"].value = hash
document.forms["login"].submit()
}
$#@60;/SCRIPT$#@62;
$#@60;/HEAD$#@62;
$#@60;BODY$#@62;
$#@60;FORM NAME="login" METHOD="POST" ACTION="checkpassword.asp"$#@62;
User ID: $#@60;INPUT TYPE="TEXT" NAME="userid" SIZE="40"$#@62;$#@60;BR$#@62;
Password: $#@60;INPUT TYPE="PASSWORD" NAME="password" SIZE="40"$#@62;$#@60;BR$#@62;
$#@60;INPUT TYPE="BUTTON" NAME="startLogin" VALUE="Login" $#@62;
$#@60;/FORM$#@62;
$#@60;/BODY$#@62;
$#@60;/HTML$#@62;
以上只要三行是ASP剧本(ASP剧本由$#@60;% 和%$#@62;括起) 。
在办事器端一个名为checkpassword.asp的剧本验证用户ID和MD5口令:
$#@60;%@ LANGUAGE = "JScript" %$#@62;
$#@60;!--#include file ="md5.inc"--$#@62;
$#@60;%
function calculateMD5Value() {
var pw = "" + Application(Request.Form("userid"))
pw += Session("sharedValue")
return calcMD5(""+p br> }
clientPassword = Request.Form("password")
serverPassword = calculateMD5Value()
if(clientPassword == serverPassword) Response.Redirect("page1.htm")
else Response.Redirect("tryagain.htm")
%$#@62;
认证进程的中心由calculateMD5Value()函数后的四行语句完成。
实行此计划时,只需改动page1.html为你要回护的使用法式的第一页,假如你不必ASP,则需将以上ASP翻译为你的办事器端剧本言语。
asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了! |
|