2010-06-26 77 views
1

我最近为一位朋友做了一个小应用程序,然后将它制作成一个公共应用程序,这样做我忘了它连接到我的MS SQL DB并检查值。有人使用Red Gate .Net Reflector来获取我的密码并将其全部销毁。我已经联系过他们的ISP,他们正在研究它,显然这个人有一个静态IP与他们。VB.Net安全密码到数据库?

因此,这是一个沉重的代价我吸取的教训。我怎样才能防止这种情况再次发生?我如何摆脱他们能够使用的不安全连接字符串?

回答

2

从不硬连接代码连接字符串。使用它提供的配置部分(connectionStrings),如果真的偏执,encrypt it

如果您使用的是共享的数据库,你甚至不应该对客户端的连接字符串,而是创建一个服务点(例如web服务)将连接到代表他们的数据库。客户端可以连接到此服务器,并且您的连接字符串安全地位于您的服务之后,这是您的控制和服务器上的服务。

+0

为什么downvote? – Oded 2010-06-26 19:42:57

2

不要公开数据库连接,而是让您的应用程序通过仅具有方法和特权的web服务或类似服务进行通信,以执行应用程序所需的操作。

如果您绝对需要数据库连接,请确保用户只具有数据库读取权限。

加密连接字符串是一个开始,但您的程序将不得不知道如何解密它,因为它是有用的。如果你的程序可以解密它,攻击者也将能够 - 你只能影响他需要加入的工作量。

因此,在我看来,你应该公开一个只读服务。

2

如果它是一个公共的应用程序,你需要为每个用户提供个性化的登录名或具有代理数据库,用户和用户会谈验证到数据库的应用程序之间的坐着。

加密连接字符串没有多大帮助,我认为可以使用内置工具或Crack.net进行解密。

1

如果你是妄想狂,每次应用程序启动时都要提示系统管理员输入密码(可能是管理界面)。这样它只是内存驻留。

我喜欢这个问题。像driis说的那样,即使使用加密连接字符串,您也需要存储密码(或密钥或其他)来解密您的加密连接字符串。相同问题的更多层次。

1

使用连接字符串和在你的配置加密的部分将不会停止这种类型的攻击,它只是设计使配置文件无法读取其他比它安装在机器上。

唯一安全的方法是创建一个连接到数据库以检索数据的Web服务,然后确保Web服务登录仅具有所需的最小许可数,或者强制Web服务的用户登录并且他们冒充该用户的数据库连接。

看样子你没有防火墙保护,直接停止外部连接到数据库,所以我不知道你可能已经暴露在互联网什么其他更危险的端口???

使用防火墙限制您的服务器对http的访问,而https协议将减少成功攻击的可能性。