Password Management: Hardcoded Password

江鹏
2023-12-01

1、摘要

硬编码密码可能会以一种不易补救的方式危害系统安全。

2、解释

	硬编码密码从来不是个好主意。不仅硬编码的密码允许所有项目的开发人员查看密码,
它也使得解决问题极其困难。代码投入生产后,如果不修补软件,就无法更改密码。
如果受密码保护的帐户受到损害,则系统所有者必须在安全性和可用性之间进行选择。

3、例

1. DriverManager.getConnection(url, "scott", "tiger");
	此代码将成功运行,但任何可以访问它的人都可以访问密码。程序发布后,很
可能无法用“tiger”密码更改数据库用户“scott”,除非程序已修补。有权访问此
信息的员工可以使用此信息进入系统。更糟糕的是,如果攻击者能够访问应用
程序的字节码,他们可以使用javap-c命令访问反汇编代码,反汇编代码将包含
使用的密码值。在移动环境中,由于设备丢失的可能性如此之高,密码管理尤其重要。
2.webview.setWebViewClient(new WebViewClient() {
		public void onReceivedHttpAuthRequest(WebView view,
		HttpAuthHandler handler, String host, String realm) {
		handler.proceed("guest", "allow");
		}
});

4、建议及提醒

	密码不应硬编码,通常应在外部源中进行模糊处理和管理。将密码以纯文本存储在系统中的任何
位置都允许具有足够权限		的任何人读取并可能误用密码。至少,在存储密码之前,应该对其
进行哈希运算。
	一些第三方产品声称能够以更安全的方式管理密码。例如,websphereapplicationserver4.x使用
一个简单的XOR加密算法来混淆值,但对这些功能持怀疑态度。WebSphere和其他应用服务器提
供了过时且相对较弱的加密机制,这些机制不足以满足安全敏感环境的需要。如今,安全通用解
决方案的最佳选择是自己创建一个专有机制。
	对于Android以及其他使用SQLite数据库的平台,SQLCipher是一个很好的选择。SQLCipher是
SQLite数据库的扩展,它为数据库文件提供透明的256位AES加密。因此,凭证可以存储在加密
的数据库中。

5、解决方案

	将用户名密码等敏感信息保存在配置文件中,使用时再去读取,如果再高级一点,可以对敏感信息
进行加密,使用时再解密操作(如果可以的话定义变量名尽量避开password,pwd。。。等有关密码名称)。
 类似资料:

相关阅读

相关文章

相关问答