飘飘悠悠 发表于 2015-1-16 22:40:58

ASP编程:.NET里的表单考证:利用数据库

使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。我们前次会商过,利用ASP.NET里表单考证最复杂的办法是把一切的信息都保留在Web.config文件里,包含用户名和暗码。这是让基础的考证在你网站上敏捷起感化和运转的好办法,可是它仍是有很年夜的范围性。特别是:
・你没法利用注册表单让新用户增加他们本人,由于在网站运转的时分,你不克不及编纂使用程序的代码,也不克不及从头保留Web.config文件。
・经由过程手动编纂Web.config文件来增加用户是很辛劳的,它还必要你的Web使用程序重启,这会影响到已有的会见者。
・用户不克不及按期变动本人的暗码。
要冲破这些范围,我们就应当中断利用Web.config作为保留用户信息的中央,并把这些信息转移到数据库里。在用户填好登录表单以后,我们就能够经由过程修正考证代码来查询这个数据库了。上面就是我们要做的,简而言之就是:
1、变动Web.config,把间接保留在内里的用户信托书移走。
2、变动我们登录按钮的代码,如许它就可以够挪用另外一个函数,从而将用户信息和数据库里的信息举行对照考证。
3、编写一个validateUser办法,卖力分辨用户是不是存在和他大概她是不是供应了准确暗码的年夜部合作作都由它完成。
4、编写一个addUser办法,用来把新用户放到数据库里。
为了坚持联贯性,我们基础上会利用前一篇文章里用过的代码列表,只是要在所必要的中央举行修正。可是这不料味着你就必定必要读后面的文章,你能够就从本文入手下手。
Web.config
Web.config是一个设置文件,一切ASP.NET的使用程序一样平常城市把这个文件放在其根目次下,它包括有<authentication>和<authorization>这两个区段。<authentication>区段里包括了ASP.NET怎样分辨会见者谁是谁的细节,而<authorization>区段会指出哪一个经由过程考证的用户可以会见目次下的.aspx文件。
ListingA里的Web.config文件和我们前次用到的是一样的,只要一个很年夜的分歧的地方(我们即刻就会讲到这一点)。<authentication>元素会指出ASP.NET应当利用考证的Forms办法,这和所集成的Windows考证和微软的Passport考证是绝对的。<forms>元素会接着给出更多的细节,用来断定ASP.NET应当利用表单认证,并指出登录页面放在那里。在前一篇文章里,我们还利用了<credentials>元素,以是我们可以把用户名和暗码就保留在Web.config文件里。这一次,我们把<credentials>区段留在那边作为参考,可是把它包含在XML正文标签里,以是它就不会被ASP.NET利用。这就是谁人很年夜的分歧。
最初,带有<denyusers="?"/>子元素的<authorization>元素会指出,匿名用户不被同意看到.aspx页面。每一个人城市被强迫举行考证,这就意味着在每次会话中,它们最少会被送到登录页面一次。

登录按钮
ListingB包括了一个用于登录表单按钮的点击事务句柄。再夸大一次,我们在上一次就把一切的代码都放在这个列内外了,只不外我们前次在不必要的代码后面标上了正文符,并分明地暗示过我们此次要到场哪些代码。
如列表所示,我们不再是复杂地让点击事务挪用FormsAuthentication类的Authenticate办法。这个办法会搜刮Web.config文件里的用户名和暗码,并把它们同传送来的参数举行对照。可是因为我们利用了数据库来保留用户名和暗码,以是我们会编写本人的办法――validateUser,我们上面就会讲到它。这个按钮的点击事务会挪用我们的validateUser办法,并把用户在Web表单文本字段里供应的用户名和暗码传送给它。假如考证乐成,那末RedirectFromLoginPage就会被挪用,如许用户就会被从头引诱到他大概她在被提醒登录之前想要会见的页面上。
ValidateUser办法
ListingC包括了validateUser办法,它具有上面这些功效:
・它可以承受用户名和暗码作为字符串参数。
・它利用.NET所供应的复杂办法对暗码举行散列(hash)操纵,由于数据库里的暗码也经由了散列
处置,如许暗码就不会以明文呈现。
・它可以毗连到数据库,并运转一个查询,用来在含有效户名和暗码的表格里寻觅用户名。
・假如它找到了用户名,它就会将保留在数据库里的暗码同作为办法参数的经由散列的暗码举行比
较。
列内外的数据库代码是相称复杂的。由于这不是一篇关于.NET数据会见的文章,以是我们不必深切细节。可是,在数据库代码之前对暗码的散列操纵是必要出格注重地。
假如你正筹办把用户名和暗码保留到数据库里,那就要思索变更暗码,如许它就不会以明文呈现数据库的字段里,明文很简单被盗。.NET供应了一个很复杂的办法把暗码变更成一串毫无疑义的字符串。这个办法是HashPasswordForStoringInConfigFile,它也是FormsAuthentication类的一部分。不要让这个办法长名字的“ConfigFile”部分给吓住;这个办法只会对传送给它的文本举行变更,然后你就能够把了局放在你想放的任何中央。
上面是散列办法无能甚么的一个例子。假如你供应这段C#代码:
stringhashed=
FormsAuthentication.HashPasswordForStoringInConfigFile(
“password”,”SHA1”);
那末经由散列变更就会酿成上面的字符串:
5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8
对暗码举行散列操纵的不敷的地方是,(就我的常识才能而言)没有举措匡助健忘暗码的用户找回暗码。换句话说,你不克不及反散列它找回明文。可是,你能够为如许的用户分派一个新的一时暗码,然后他大概她就能够先登录再变动暗码,只需你的网站撑持这个功效的话。
增加用户
我们如今能够会商用来向你的网站增加用户的代码了。因为间接在Web.config里保留用户名和暗码的限定,我们不克不及在上一篇文章里会商这个成绩。既然已转到利用数据库上了,那我们能够编写一个复杂的addUser办法来承受用户名和暗码,并散列暗码,再把新的行拔出到数据库表格里。ListingD是如许一个办法的例子。
正如你所看到的,这段代码和validateUser办法的代码很相似:用户名和明文暗码被传送出去,暗码被散列,这个被散列的暗码会被用在数据库代码里。它们之间伟大的分歧是:数据库代码用到了SQL的INSERT而不是SELECT,这就意味着它不必要DataReader类工具。
我们经由过程提交注册表单里的点击事务来挪用addUser办法,比方图A里的复杂表单。



改善的余地
我们的列表只是举一反三,你应当思索一些大概想要增添的器材。比方,假如validateUser失利了,那末登录按钮的点击事务句柄应当做些甚么呢?我们的复杂例子向页面上的控件增加了一条失利信息。可是假如用户一遍又一遍的实验和失利,那又该怎样办呢?这团体是一个实验推测暗码的未受权用户吗?你应当追踪validateUser的这些失利并在实验失利几回后就锁定这个帐号吗?
并且要思索一下,假如addUser所要试图增加的用户名在数据库里已存在,那末这个办法应当怎样办。我们的示例代码不会思索这类大概性,可是你用于实践事情的代码就要思索了。
最初,固然我们在本文里先容了平安上的改善,可是要了解所存在的伤害是很主要的。我们已对暗码举行了散列操纵,并将它们保留在数据库而不是明文的设置文件里,这是走向平安的第一步。可是要记着的是,我们一切的散列操纵都产生在ASP.NET的服务器代码里,而暗码是从用户的扫瞄器穿过电缆抵达服务器的,这一点十分主要。除非扫瞄器到你服务器的毗连是经由过程平安套接字(SSL)举行的,不然经由过程电缆传送的暗码就会是明文。假如用户暗码的平安是主要的,那末你就应当请求到你网站的都是SSL毗连。
事半功倍
和前一篇文章里基于Web.config的办理计划比拟,经由过程把用户信息保留在数据库里,我们又向本人网站的认证体系里增加了相称多的功效。我们新的办法一定必要更多的代码,可是这都不是很难的代码。在保留暗码之前对暗码举行散列操纵的分外平安步骤只必要挪用一个办法,所增加的其他代码多数是用于对数据库的尺度会见的――这一内容关于我们良多人来讲已很熟习了。可是勉力的支付增添了功效,如许的效费比是很高的。你要接纳的下一步骤是:把用户信息从Web.config里弄出来!


国内有些大的CRM厂商的ASP就写得不错.无论是概念还是它里面用JAVASCRIPT的能力.并不是说现在的程序员用了ASP.NET来写程序就可以说自己高档了

谁可相欹 发表于 2015-1-24 19:16:09

以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。

深爱那片海 发表于 2015-2-2 12:40:59

交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。

柔情似水 发表于 2015-2-7 19:43:47

交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。

变相怪杰 发表于 2015-2-23 08:37:58

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

再见西城 发表于 2015-3-7 06:21:32

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

不帅 发表于 2015-3-14 13:19:18

他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。

老尸 发表于 2015-3-21 08:50:16

你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
页: [1]
查看完整版本: ASP编程:.NET里的表单考证:利用数据库