ASP.NET中的密码安全技术研究与应用

2015-04-16 01:30邵小兰
电脑与电信 2015年9期
关键词:控件字符密码

邵小兰

(常州刘国钧高等职业技术学校,江苏 常州 213025)

1 引言

随着网络的不断普及,网站的安全越来越受到网站用户的关注,而保证安全的一个最基本的途径就是登录网站时使用指定的密码。即使Web应用程序非常安全,如果密码环节比较薄弱,非法用户可以通过破解密码而潜入Web应用程序的内部,不仅仅Web站点的管理员或者服务器的管理员帐号密码被破解,普通用户的帐号密码也会遭遇同样的情况。

2 设置安全密码的解决方案

安全密码就是很难被破解的密码,人们在注册网站时通常会选择非常常见的单词和数字。作为密码,例如,宠物的名字,孩子们的名字,有序号码、有序的字母串(ASDFG)等等,这种密码很容易被破解,目前最好的解决方法是在用户注册时,网站确保用户具有高度安全性的“强度密码”,是指建立一种策略,确保密码足够复杂,防止非法用户很容易猜到或者破解。关于强度密码策略有如下建议:

(1)密码长度最小应该不小于七位字符。

(2)不限制密码的最大长度。

(3)支持多种字符集,包括大小写字母数字和标点等。(4)允许使用任何键盘字符作为密码。

(5)不允许使用字典单词作为密码或密码的一部分。(6)不允许密码中包含用户名称。

在ASP.NET中,提供了一些验证控件用于验证密码的最小长度,例如RegularExpressionValidator验证控件就可以实现此功能。主要利用了该控件的ValidationExpression属性,使用正则表达式来验证密码的长度。主要代码如下:

<asp∶RegularExpressionValidator ID="RegularExpression-Validator1"runat="server"ControlToValidate="TextBox2"ErrorMessage=”密码长度必须大于8位”></asp∶RegularExpressionValidator>,运行界面如图1所示:

图1 用户注册页面

RegularExpressionValidator验证控件的作用有限,很多情况下不能满足用户的验证需要,为此,ASP.NET提供了一种由用户自定义验证条件的验证控件——CustomValidator控件,例如在用户注册时,要求密码必须大于7位,密码内容必须为大小写字母的组合,如果输入密码不符合验证的要求,CustomValidator控件就会弹出错误提示信息,主要利用了CustomValidator控件的自定义验证函数功能,实现此功能的代码如下:

尽管密码中含有许多字符可以使密码具有更高的安全性,并不易被推测,但这样做也可能把密码曝露在其它类型的攻击之下,所以对密码所支持的字符数目加以限制也是很有必要的。通常,A-Z,a-z,0-9之间的字符和一些特殊的字符(!、@、#、$、%、^、&、*、?、/、)是可以安全使用的。可以通过验证控件来完成此项功能。在上面代码的基础上,添加两个方法,用来验证数字和符号。代码如下:

当网站提示用户输入复杂的强度密码时,用户也许会常常忘记密码。下面给出一下如何创建易于记忆的强密码的具体建议:

(1)使用多个人名字拼音

不要仅用熟人的姓名,例如“zhangyu”,而改用有关此人的不为他人所知的信息。例如“zhangfeng”或“fengzhang”。

(2)使用符号而不是字符

很多人往往会在自己的名字拼音后面补充必要的符号和数字,例如“zhang1234”,但此类密码相对易于破解。姓“zhang”收录在大量包含常用姓名的字典中;一旦此姓被发现,攻击者即仅需猜测另外四个相对简单的字符。因此,请改用自己可以轻松回想起来的符号替代该密码的一个或更多字母。很多人拥有自己的富有创造性的译码方法,即使用一些相似符号和数字替换字母。例如使用“@”替换“A”,“!”替换“1”,零(0)替换“O”,以及“3”替换“E”。使用这些替换,可以认出“@11iw0nbe@r”,“@!!isonB3ar”和“A//i$onBear”,但要猜测和破解这些密码则难乎其难,请观察键盘上的符号,并思考进入脑海的第一个字符,其他人可能不会想到这个字符,而用户则会记住这个字符,现在就开始使用一些此类符号作为密码的替代符号。

(3)选择记忆中的事件和人物

要记住一个月之后将进行更改的强密码,请尝试选择即将出现的人物或公共事件,借此提醒自己生活中正在发生的美好事物或自己所敬仰或喜爱的某个人。如果密码非常有趣或可爱,这个密码则不太可能被忘记,将密码设置成自己独有的密码,请务必使用包含两个或多个单词的词组,然后插入自己的符号,例如,“Zhang$hong@yu@jing”。

(4)使用单词谐音

一般来说,攻击者使用的密码字典会搜索密码中的单词。如前文所述,不要害怕使用单词,但务必在这些单词中间插入大量符号。另外一个打击攻击者的方法是避免正确拼写单词,或使用自己可以记住的有趣谐音。例如,“Run for the hills”,可以变成“R0n4dHiLLs!”或“R0n 4 d Hills!”。

(5)不要害怕创建长密码

如果记忆完整短语的效率更高,那就创建完整的密码短语。密码越长,其破解难度越大,尽管密码很长,如果自己可以轻松记住,那在进入系统时就会少了许多麻烦。

(6)使用语句的首字母

要创建易于记忆的强密码,请首先写下一个易于自己记忆的大小写形式和标点符号正确的句子。例如“我爱宝宝的妈妈”。然后,提取句子中每个字的首字母,并保留其大小写形式。对于上例,即得“WABBDMM”。最后使用一些非字母数字字符替换密码中的部分字母,可以使用“@”替换“a”,或使用“!”替换“B”。,经过此番替换,上述示例密码将变成“W@!!DMM”,这将是一个破解难度极高而自己却可以轻松记住的密码,只要能记住创建密码所依据的句子。

3 密码加密方案

在网站注册时尽管网站提供了密码安全性验证,使用户能够创建安全性的密码。使黑客很难破解用户密码,然而更严重的问题是如果有人能够盗走网站的整个数据库,这样的话,用户密码信息就会被盗取。

解决这个问题最好的办法是,不将用户实际的密码存储在数据库中,而是存储它们的加密后的字符串,当需要对用户进行验证时,只是对用户输入的密码再进行加密,然后将它与系统中数据库中的加密的密码进行比较即可。

在ASP.NET中System.WEB.Secutity命名空间下Forms-Authentication类下的HashPasswordForStoringInConfigFile方法提供了加密方法。此方法根据指定的密码和哈希算法生成一个适合于存储在配置文件中的哈希密码。

语法如下:

public static string HashPasswordForStoringInConfigFile(string password,string passwordFormat);

参数如下:

password∶要进行哈希运算的密码。

passwordFormat∶要使用的哈希算法。passwordFormat是一个String,表示 System.Web.Configuration.FormsAuth-PasswordFormat枚举值之一。FormsAuthPasswordFormat枚举值及说明如表1所示:

表1 FormsAuthPasswordFormat枚举值及说明

在本实例中,使用HashPasswordForStoringInConfigFile方法,此方法使用起来非常简单,它支持用于加密字符串的“SHA1”和“MD5”散列算法。在本实例中将密码字符串加密成“SHA1”和“MD5”格式,运行实例,在“会员注册”界面中填写用户名和密码,单击“注册”按钮,弹出对话框,显示使用“SHA1”和“MD5”散列算法加密后的密码,运行结果如图2所示。

图2 加密后的密码

在“注册”按钮的单击事件中编写加密码,主要代码如下:

可将此实例做成一个通用的方法,在向数据库中增加一个用户记录时,使用这个方法来加密密码,并将加密过的字符串存入数据库中,当用户登录时,调用这个方法,将用户输入的密码进行加密,然后将他和数据库中加密的密码进行比较。最好使用“MD5”散列算法加密,因为这个密码是不可逆的不会被破解。

[1]黄毅,杨朔,陈进原,等.C#WindowsForm编程中MD5加密的设计与实现[J].计算机时代,2013,(06).

[2]衣李娜.探讨ASP.NET网站开发中常用的加密技术[J].信息安全与技术,2015,(04).

[3]胡配祥,李新.ASP.NET安全性解决方案及其实现[J].淮北煤炭师范学院学报(自然科学版),2007,(01).

[4]罗勇,蒋仕伟,张峻华.浅析基于asp.net的网站安全漏洞及防范[J].网络安全技术与应用,2006,(10).

[5]吴溥峰,张玉清.数据库安全综述[J].计算机工程,2006,(12).

猜你喜欢
控件字符密码
密码里的爱
基于.net的用户定义验证控件的应用分析
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
HBM电子称与西门子S7-200系列PLC自由口通讯
密码抗倭立奇功
关于.net控件数组的探讨
密码藏在何处
夺命密码