小魔女 发表于 2015-1-16 22:11:55

ASP编程:用户口令回护新招

对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。  常常有读者扣问,怎样在其站点上利用JavaScript,以确保用户登录时的口令不会外泄。关于如许的成绩,我的第一反响就是告知他们利用SSL(平安套接字协定层)。如利用准确,SSL关于平安请求较高的Web使用是最好的办理计划。可是,也有相称一部分隔发者,他们的Web使用对平安性的请求其实不高,因而他们其实不但愿会见者利用SSL登录。

  Web使用一样平常利用一种叫做“会话形态办理”(SessionStateManagement)的手艺来追踪和办理扫瞄器与服务器之间的互相举动。由于每一个扫瞄器的扫瞄请求相对其他扫瞄器都是自力的(正如超文本传输协定中界说的那样),以是Web使用一定利用某些技能,如Cookie、埋没表格字段、或重写URL,它们能够辨认出服务器与某个扫瞄器举行的自力会话。年夜多半的服务器端编程情况(如ASP、PHP、ColdFusion等)都利用Cookie。

  会话形态办理的成绩在于从基本上讲它是不平安的。这些被用来办理会话形态的Cookie、表单值、或URL要在扫瞄器和服务器之间来往传送,黑客能够在途中拦阻它们。一旦拦阻乐成,黑客就能够使用这些信息强行接受用户会话。

  在年夜多半服务器端剧本编写情况里,你都能够接纳一些措施以削减此类保密的产生。比方,你能够为Cookie设定很短的利用刻日,使用“难预期会话形态”信息。但是,最平安的办理计划仍是利用SSL。利用SSL,不管用户口令,仍是会话形态信息城市遭到回护。

  假如你不利用SSL,那末能够请求用户对你的使用中的每一个敏感页举行从头认证。可是,从用户的角度来说,这类体例不免太甚贫苦。总之,你必需分明你和你的用户事实乐意承当多高的风险。假如口令保守的风险太高,你就必要利用SSL创建使用。假如你不克不及利用SSL,能够接纳基于MD5的登录体例作为取代。它最少能够回护你的用户的口令免于外泄。别的,再选用一种能够避免会话形态信息被窃的服务器端剧本编写手艺。

  一般,假如一个用户不利用SSL登录(即本来的HTTP),那末从分开扫瞄器直到抵达方针收集服务器的这段工夫里,用户口令都处于无回护的表露形态,正以下页中的图表所示。

  不外,我们能够使用一种不成逆的函数开辟一种登录计划,使用这类计划就不会表露用户的口令。函数是汇合的元素之间的一种对应干系,在从汇合A到汇合B的函数中,A中每一个元素在B中都有一个独一的元素与之绝对应。不成逆函数在盘算上很难逆转――即给定汇合B中的一个元素,很难断定在汇合A中的哪一个元素与之绝对应。

  这比如是一台碎纸机。把文件放进碎纸机中烧毁是很简单的。可是反之,假如要把烧毁后的碎纸屑从头拼集成原文可就难上加难了。

  接纳MD5办理计划

  现今最盛行的不成逆函数使用程序之一就是由RonaldRivest开辟的MD5算法。RonaldRivest仍是出名的RSA(Rivest,Shamir,Adelman)加密算法的开辟者之一。MD5算法能为任何长度的信息天生一个16字节巨细的“数字指纹”。这个信息能够是一个字符串、一个文件、一个文本流或任何别的情势的字节序列。在RFC1321中有MD5算法的具体形貌。

  我们要开辟一种利用MD5算法的登录体例,用以回护从一个扫瞄器发送至收集服务器的用户口令。

  当一位用户对某个收集使用提出登录哀求时,其收集服务器就会供应给用户一个登录表格。这是一个带有随机天生值的表格。个中的随机天生值由服务器端剧本从一个数亿记的取值空间中随机拔取天生。
  用户在登录表格中输出他或她的用户名和口令,用户端剧本给口令附加一个随机值,然后用MD5不成逆算法对了局举行盘算。再用盘算得出的值取代原口令。我把这个值称为MD5口令。

  最初,用户端剧本把用户名和这个MD5口令发送到收集服务器。由于在扫瞄器与服务器之间传送的是MD5的运算了局,以是任何人都没法经由过程盘算得出用户所输出的原始口令。

  收集服务器在吸收用户名和MD5口令后,会实行与用户扫瞄器不异的运算。它给用户口令(从服务器的被回护地区中提取)附加上随机值(即已发送给用户的随机值),并盘算出准确的MD5口令值。然后收集使用程序把这个值和它从扫瞄器收取的值比拟较。假如两值相称,收集使用程序就会天生一个服务器端会话变量,证实此用户身份准确。
  说到这里,你大概会置疑利用随机值的需要性。实在,这个随机值是用来避免再度打击的。假如只要原始用户口令经由过程MD5,那末响应得出的MD5口令就会老是统一个值。黑客只需截获MD5口令就一样能够登录进进收集使用。利用了随机值后,每次登录时天生的MD5口令都是独一的,如许就制止了上述成绩的呈现。

  JavaScript完成
  在JavaScript中完成利用MD5加密的登录计划是对照简单的。PaulJohnston的站点为您供应了MD5算法完成的丰厚材料。别的有关MD5的信息能够在此站点中找到。请将代码拷贝至一个文本文件,并定名为md5-js.txt。

  我们将在ASP情况下完成服务器真个剧本编写(由于ASP撑持JScript――微软版的JavaScript)。你可使用任何一种服务器端剧本编写言语,可是你必需把MD5算法翻译成你所选择的言语。
 以下内容就是一个在ASP情况下完成的登录表格login.asp。你能够举行在线摹拟登录摹拟用户名为jason,用户口令为f2#5%rsq。

<%@LANGUAGE="JScript"%>
<HTML>
<HEAD>
<TITLE>Pleaselogin!</TITLE>
<%Session("sharedValue")=Math.random().toString()%>
<SCRIPTLANGUAGE="JavaScript"SRC="md5.js"></SCRIPT>
<SCRIPTLANGUAGE="JavaScript">
varsharedValue="<%=Session("sharedValue")%>"
functionhandleLogin(){
sendMD5Value(calculateMD5Value())
}
functioncalculateMD5Value(){
varpw=document.forms["login"].elements["password"].value
pw+=sharedValue
returncalcMD5(pw)
}
functionsendMD5Value(hash){
document.forms["login"].elements["password"].value=hash
document.forms["login"].submit()
}
</SCRIPT>
</HEAD>
<BODY>
<FORMNAME="login"METHOD="POST"ACTION="checkpassword.asp">
UserID:<INPUTTYPE="TEXT"NAME="userid"SIZE="40"><BR>
Password:<INPUTTYPE="PASSWORD"NAME="password"SIZE="40"><BR>
<INPUTTYPE="BUTTON"NAME="startLogin"VALUE="Login">
</FORM>
</BODY>
</HTML>

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

<%@LANGUAGE="JScript"%>

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

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

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

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

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

  这里有一点应注重:独自一行的SCRIPT标志暗示剧本中包括md5.js文件。以上就是MD5的完成,你能够(并且应当)从PaulJohnston的站点上拷贝此算法。calculateMD5Value()函数所利用的calcMD5()函数在md5.js中有具体界说。

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

<%@LANGUAGE="JScript"%>
<!--#includefile="md5.inc"-->
<%
functioncalculateMD5Value(){
varpw=""+Application(Request.Form("userid"))
pw+=Session("sharedValue")
returncalcMD5(""+pw)
}
clientPassword=Request.Form("password")
serverPassword=calculateMD5Value()
if(clientPassword==serverPassword)Response.Redirect("page1.htm")
elseResponse.Redirect("tryagain.htm")
%>

  上面一行暗示在checkpassword.asp剧本中包括文件md5.inc(在服务器端):

<!--#includefile="md5.inc"-->

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

  另外一个服务器端剧本形貌了calculateMD5Value()函数。字段Request.Form("userid")把用户在提交表格时所输出的用户名前往。经由过程前往的用户名在一个使用变量中找到真实的用户口令值。(假如你盘算利用ASP,你大概但愿利用另外一种举措,让剧本能够经由过程别的体例猎取口令。)利用pw变量贮存用户口令。从会话变量中取回发送给用户的原始随机值,并附加到用户口令上。然后,函数对附加了随机值的用户口令举行盘算并将所得了局前往。

functioncalculateMD5Value(){
varpw=""+Application(Request.Form("userid"))
pw+=Session("sharedValue")
returncalcMD5(""+pw)
}

  用户身份认证这一历程的中心部分是由四行代码来实行完成,这四行代码均利用calculateMD5Value()函数。由用户提交的MD5口令被划为“客户口令”(clientPassword)变量,由服务器盘算得出的值被划为“服务器口令”(serverPassword)变量。将这两个值举行对照。假如两值符合,那末用户扫瞄器就会翻开page1.htm,这是已写回护的收集使用的首页。假如两值不符,用户扫瞄器会翻开tryagain.htm,用户原告知此次登录失利,必要从头登录。

clientPassword=Request.Form("password")
serverPassword=calculateMD5Value()
if(clientPassword==serverPassword)Response.Redirect("page1.htm")
elseResponse.Redirect("tryagain.htm")

  要制造这一剧本,只需把page1.html界说为需写回护的Web使用的首页。假如你不利用ASP,那末你就要把ASP代码翻译成在你的服务器端剧本编写情况中所利用的言语。
减少客户内IT专业人才缺乏带来的影响。ASP的客户员工利用浏览器进入相关的应用软件,简单易用,无需专业技术支持。

小妖女 发表于 2015-1-18 22:34:49

没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。

蒙在股里 发表于 2015-1-26 05:10:02

下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。

金色的骷髅 发表于 2015-2-4 13:42:43

ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。

再现理想 发表于 2015-2-10 00:58:53

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

只想知道 发表于 2015-2-28 11:06:11

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。

乐观 发表于 2015-3-9 23:05:58

Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件

谁可相欹 发表于 2015-3-17 03:09:14

如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。

因胸联盟 发表于 2015-3-17 03:09:16

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:

变相怪杰 发表于 2015-3-23 18:03:11

那么,ASP.Net有哪些改进呢?
页: [1]
查看完整版本: ASP编程:用户口令回护新招