有关安全的方方面面

用户安全性在于用户名和密码的选择,应当始终要求使用公共证书(用户名)来标志用户,同时使用私有证书(密码)来验证用户。公共证书有可能被他人查看,因此必须具有唯一性。

保证证书安全可以考虑下面的策略:

  • 使用技术手段以及规则来确保强用户密码(强密码,简单理解为足够长度,包含各种字符集,足够复杂);
  • 避免证书被获取(单向加密密码是好办法,但我建议将用户名即具有唯一性的公共证书、用户选择的密码即私有证书一起参与构建单向(哈希-hash)验证证书,即将密码作为明文,而用户名可以看作不会重复的初始向量。确保即使用户选择与他人相同的密码,也不会出现可对比的明文,这样即使使用密码解密程序也无法扫描出原始密码的匹配);
  • 返回安全的错误信息(错误提示避免被猜测出可能的密码);
  • 限制闲置的帐户。


一些考虑:

  • 禁止用户选择“官方的”用户名(如admin、root、support等),防止欺骗
  • 避免产生可预测或连续的、可计算的用户名、密码;


对于"避免产生连续的可预测的"这一点,应用范围不仅仅局限于用户帐号。我曾经使用过并在今后的项目中仍将继续完善的一个策略正好可以避免产生此弱点,即对于连续的ID,采用对称加密方式干扰连续性。

具体方法是,在一个10万条数据的资料库中,由于其id采用递增的数字方式自动编号,因此调用的时候往往会在地址栏中出现类似字符:
http://www.deepray.com/show.asp?id=192
由此用户可猜测到
http://www.deepray.com/show.asp?id=191
或者
http://www.deepray.com/show.asp?id=193
也能返回正确的但不相同的信息。

大多数情况下这种弱点是存在的,我正式通过自动脚本,采用自动生成连续地址的方式,用很多的网站上获取了大量资料文档。

接着我对?id=这里进行改造:

数据库中依然使用自动递增的编号规则来标记,但绝对不暴露真实的id,客户端看到的始终是经过了加密的id(一组不规则无规律的数字),刚才id为192的文章在地址栏中显示则为:

http://www.deepray.com/show.asp?id=89421321.3212432

服务器端获取到id的值为89421321.3212432(这是经过对称算法加密过的id),使用相同的对称的算法即可还原其真实id 192,从而读取数据并返回正确内容。



[本日志由 asky 于 2009-01-19 00:32 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Strong Password 用户证书 安全
评论: 1 | 引用: 24 | 查看次数: 5447
回复回复asky[2005-11-24 11:17 AM | del]
目前 .net框架集成的加密算法有:

对称算法:DES、3DES、Rjindael(AES)、RC2
非对称算法:RSA
哈希和签名算法:MD5、SHA1、SHA256、SHA384、SHA512、DSA

其中对称算法由于速度快,可用于加密大量数据,但密钥容易泄露;
非对称算法的优点是用于加密和解密的密钥不同,安全性高,但是速度太慢,不适合加密大量数据;
哈希一般用于验证,不能用于数据存储和传输。

所以就有一个比较理想的解决办法:使用对称算法加密大量数据用于传输,并将对称算法的秘钥使用非对称算法加密,同时使用哈希进行完整性检测。
发表评论
你没有权限发表评论!