这是非常不安全的:" />

这是非常不安全的: - 源码之家" />

如何避免在源代码中以明文形式存储数据库密码?

Connection c = DriverManager.getConnection("url", "username", "password"); 

这是非常不安全的:

问题描述:

在我开发web应用连接到数据库时我目前使用的是天真的解决方案。如果攻击者获得访问源代码,他也可以访问数据库本身。我的Web应用程序如何连接到数据库,而不需要在源代码中以纯文本形式存储数据库密码?如何避免在源代码中以明文形式存储数据库密码?</p> <pre><code>Connection c = DriverManager.getConnection("url", "username", "password"); </code></pre> <p>这是非常不安全的:

您可以将连接字符串存储在Web.config或App.config文件中,并对保存它的节进行加密。下面是我在以前的项目中使用的连接字符串加密一篇很好的文章:

http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html

我可以建议这些技术用于.NET程序员:

  • 加密密码\连接字符串中的配置文件
  • 建立信任的客户端和服务器(即使用Windows身份验证等)

这里的连接从CodeProject是有用的文章:

在.NET中,惯例是存储的ConnectionStrings在一个单独的配置文件。

其中,config file can be encrypted

如果您使用Microsoft SQL Server,如果您使用域帐户运行应用程序,然后使用到数据库的可信连接,则这一切都变得无关紧要。在这种情况下,connectionstring将不包含任何用户名和密码。

除非我错过了连接点应该由服务器通过连接池进行管理,因此连接凭证由服务器保存,而不是由应用程序保存。

采取这种进一步我一般建立到一个惯例,其中前端web应用程序(在DMZ)仅经由web服务会谈到DB(在域),因此提供完全的分离和增强的安全DB。

另外,绝对不要给数据库帐户超过或超过基本需要的特权。

另一种方法是通过存储过程执行所有操作,并授予应用程序用户只能访问这些特效。

假设您正在使用MS SQL,您可以利用Windows身份验证,它不需要ussername /在源代码中的任何位置传递。否则,我将不得不同意其他海报推荐app.config +加密。

  1. 创建的O/S的用户
  2. 把密码中的O/S的环境变量针对该用户
  3. 运行程序作为该用户

优点:

  1. 只有root用户或该用户可以查看该用户的操作系统环境变量
  2. 重新启动
  3. 你永远不小心中源控制检查密码
  4. 您不必担心搞砸了文件权限
  5. 您不必担心您存储的加密密钥
  6. 作品X-平台