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

安全基础
可以用于交换环境下SNIFFER的几种攻击技术手段
嗅探的时候,防火墙能发现吗?
wincap and sniffer(1)
wincap and sniffer(2)
客户端登录到Win 2000域
网络故障问答集萃
软件开发项目控制浅谈(1)
软件开发项目控制浅谈(2)
软件开发项目控制浅谈(3)
软件开发项目控制浅谈(4)
用Telnet快速收发电子邮件(1)
用Telnet快速收发电子邮件(2)
Windows XP系统启动提速专题
让Google长个好“记性”
恢复EXE文件关联补完版
真真假假的安全警告
网络安全应急三观
全力打造个人网络安全
系统自动启动程序之十大藏身之所
访问权限问题问答集锦

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 62 ::
收藏到网摘: 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