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

安全基础
网管技术:常见BIOS报错信息及解决方法
分布式拒绝服务(DDOS)攻击及防范研究
四种宽带接入方式及其传输速率
网管必读 解读无线网络的七大安全困惑
经验:识别系统的非法进程及剿杀
全面清除系统垃圾的方法
QQ、网游等账号防盗防骗的实用小经验
上网前保证Windows XP系统安全的办法
七种DDoS攻击技术方法简介
硬盘与内存检测 四种查毒绝招
当网站注册时输入验证码总是不正确解决方法
不让自己的秘密留在别人的电脑中
IE崩溃遭难不求人 快速简单处理方法
损招 让应用程序莫名其妙地失效
不再弹广告 破除隐身僵尸木马的隐身妖术
利用QQ传播 网络欺骗“绑架”奥运会
渗透测试的攻与守 认清网络面临的问题
手动剿杀“上兴远程控制”木马
个人电脑防黑客入侵八准则
关注Windows系统服务中的安全隐患

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


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