当前位置: 首页 > 图文教程 > 网络安全 > 安全基础 > 用户口令保护新招(2)

安全基础
IE浏览器防黑十大秘籍,黑客也没招
网络工程师讲解系统安全漏洞的形成和防治
清除导致XP系统反复重启的新网银木马
识破QQ欺骗网络地址的几种方法汇总
安全基础知识 细说暴库的原理与方法
排除无线突然中断故障实例
强搜天线 搜出WiFi世界的安全漏洞
网管应用技巧 内网安全十大策略说明
如何修改局域网内部打印机的IP地址
如何找出IIS中隐藏的网站
EFS加密技术的概念分析及一次解密经过
提高Windows XP系统安全性要关闭的10种服务
PHPBB 2.0.22 MOD版最新注入漏洞
修复Windows系统忘记密码的9个高招
用SockOnline软件轻松突破端口限制
安全基础知识 最强0到33600端口详解
执行文件方式加密FLASH文件的解密方法
网吧被入侵后的应对解决方法
网页“黑手”如何攻击你的Windows系统
不要让别人读了你的信 谈私密数据保护

安全基础 中的 用户口令保护新招(2)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 29 ::
收藏到网摘: n/a

  以下内容就是一个在ASP环境下实现的登录表格login.asp。你可以进行在线模拟登录模拟用户名为jason, 用户口令为f2#5%rsq。

<%@ LANGUAGE = "JScript" %>
<HTML>
<HEAD>
<TITLE>Please log in!</TITLE>
<% Session("sharedValue") = Math.random().toString() %>
<SCRIPT LANGUAGE="JavaScript" SRC="md5.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
var sharedValue = "<% =Session("sharedValue") %>"
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()
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="login" METHOD="POST" ACTION="checkpassword.asp">
User ID: <INPUT TYPE="TEXT" NAME="userid" SIZE="40"><BR>
Password: <INPUT TYPE="PASSWORD" NAME="password" SIZE="40"><BR>
<INPUT TYPE="BUTTON" NAME="startLogin" VALUE="Login" onClick="handleLogin()">
</FORM>
</BODY>
</HTML>

  以上内容中只有三行包含ASP脚本。(在<%和%>之间的内容为ASP脚本。)文件的第一行把ASP语言确定为JScript 。

<%@ LANGUAGE = "JScript" %>

  在第二行ASP中,名为“sharedValue”的服务器端会话变量的值被设置成随机浮点数的字符串表示形式“String”。在用户会话的全过程中,这个会话变量会存在于服务器中。

<% Session("sharedValue") = Math.random().toString() %>

  下面一行将名为“sharedValue”的用户端JavaScript变量设置为同名的服务器端变量的值。

var sharedValue = "<% =Session("sharedValue") %>"

  用户在表格中输入他的用户名和口令,并点击“登录”键,这样就会激活handlelogin()函数。handlelogin()函数启动calculateMD5Value()函数,为用户口令附加随机值并计算出相应的MD5值。接着,sendMD5Value()函数会收取这个值,并以之替换原表格中所填写的用户口令,最后提交表格。

  这里有一点应注意:单独一行的SCRIPT标记表示脚本中包含md5.js文件。以上就是MD5的实现,你可以(而且应该)从Paul Johnston的站点上拷贝此算法。calculateMD5Value()函数所使用的calcMD5()函数在md5.js中有详细定义。

  在服务器一方,我们使用一个名为checkpassword.asp的ASP脚本对用户名 和MD5值进行确认。此脚本内容如下:

<%@ LANGUAGE = "JScript" %>
<!--#include file ="md5.inc"-->
<%
function calculateMD5Value() {
var pw = "" + Application(Request.Form("userid"))
pw += Session("sharedValue")
return calcMD5(""+pw)
}
clientPassword = Request.Form("password")
serverPassword = calculateMD5Value()
if(clientPassword == serverPassword) Response.Redirect("page1.htm")
else Response.Redirect("tryagain.htm")
%>

  下面一行表示在checkpassword.asp脚本中包含文件md5.inc(在服务器端):

<!--#include file ="md5.inc"-->

  这个文件就是处在ASP的<% 和 %>标记之间的文件md5.js。标准ASP语言都带inc.后缀。

  另一个服务器端脚本描述了calculateMD5Value()函数。字段Request.Form("userid")把用户在提交表格时所输入的用户名返回。通过返回的用户名在一个应用变量中找到真正的用户口令值。(如果你打算使用ASP,你可能希望使用另一种办法,让脚本可以通过其它方式获取口令。)使用pw变量储存用户口令。从会话变量中取回发送给用户的原始随机值,并附加到用户口令上。然后,函数对附加了随机值的用户口令进行计算并将所得结果返回。

function calculateMD5Value() {
var pw = "" + Application(Request.Form("userid"))
pw += Session("sharedValue")
return calcMD5(""+pw)
}

  用户身份认证这一过程的核心部分是由四行代码来执行完成,这四行代码均使用calculateMD5Value()函数。由用户提交的MD5口令被划为“客户口令”(clientPassword)变量,由服务器计算得出的值被划为“服务器口令”(serverPassword)变量。将这两个值进行比较。如果两值相符,那么用户浏览器就会打开page1.htm,这是已写保护的网络应用的首页。如果两值不符,用户浏览器会打开tryagain.htm,用户被告知此次登录失败,需要重新登录。

clientPassword = Request.Form("password")
serverPassword = c