小妖女 发表于 2015-2-3 23:35:27

ASP教程之回护用户口令的算法及完成

大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.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比起来简直弱爆了!

不帅 发表于 2015-2-4 03:03:46

我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。

乐观 发表于 2015-2-7 13:25:38

从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了

精灵巫婆 发表于 2015-2-16 00:50:05

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

再现理想 发表于 2015-3-4 19:55:16

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。

活着的死人 发表于 2015-3-11 20:50:23

Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")

admin 发表于 2015-3-17 17:59:22

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

冷月葬花魂 发表于 2015-3-20 21:40:07

我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。

蒙在股里 发表于 2015-3-27 07:09:35

虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。

灵魂腐蚀 发表于 2015-3-28 06:04:09

学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:

小女巫 发表于 2015-4-1 08:31:35

ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。

莫相离 发表于 2015-4-9 21:51:53

运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。

飘灵儿 发表于 2015-6-14 21:23:22

学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。

小魔女 发表于 2015-6-18 22:47:53

还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。

深爱那片海 发表于 2015-6-22 15:05:15

用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

若相依 发表于 2015-6-22 21:50:06

Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)

兰色精灵 发表于 2015-6-22 22:40:11

我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.

若天明 发表于 2015-6-25 04:18:52

接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。

飘飘悠悠 发表于 2015-6-27 02:12:19

Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")

爱飞 发表于 2015-7-13 16:56:46

我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
页: [1]
查看完整版本: ASP教程之回护用户口令的算法及完成