2011-12-01 51 views
2

我正在扩展开放源代码的VoIP软电话应用程序(用C#/。NET编写)以满足我的需求,但不知道如何最好地处理此问题。我想让应用程序在用户输入他的电子邮件地址登录时连接到数据库,并执行SQL查询以使用该电子邮件获取其帐号并使用帐号进行身份验证。但是,我认为包括我的MySQL连接凭据(主机,用户名,数据库)是不安全的?我应该怎么做?在C#应用程序中隐藏MySQL凭证

回答

0

MySQL可以执行基于Windows的身份验证(即在域中)吗?如果是这样,你可以使用它。否则,您可能想要获得服务的凭据,或使用加密,但您需要包含加密密钥,以便任何致力于发现它的人都可以。

1

您应该将连接字符串放入配置文件,然后加密该文件的该部分。有一个关于如何在这里做的教程:Protecting Connection Strings and Other Configuration Information。尽管本教程适用于ASP.NET,但同样的原则也适用于几乎任何.NET配置文件。

这里还有一个类似的问题:Encrypting passwords in WinForms app.config, .NET

+0

当给予应用程序和数据本身的访问权限时,无论发生什么情况,总能找到密码。 –

+0

即使这样做完成后,一个人仍然可以使用WireShark之​​类的东西在网络连接上传输密码时嗅探密码。 – Kibbee

+0

没问题。这仅适用于ASP应用程序,不适用于桌面应用程序。 –

2

确实不安全。

您需要运行在服务器上的软件,它可以接受所述电子邮件和密码作为输入并连接到您的数据库(因此连接字符串位于控件中的机器上),检查它并返回ACCEPTED或DENIED客户端。在你的情况下,ACCEPTED可能只是你提到的帐号。

如果电子邮件和密码是通过加密链接(公钥)从客户端传输到服务器应用程序的,则为奖励分数。

0

让他们在你的装配结束,您可以编写您的连接字符串和使用代码混淆,以保护其免受反汇编

+0

http://woodmann.com/collaborative/tools/index.php/Category:.NET_Deobfuscation_Tools,来自Google的第一个链接。 –

0

有很多方法可以做到这一点,包括混淆等方式使其难以使用在应用程序之外,但不是不可能检索/使用。

你应该怎么做?最好的方式(据我所知)是给账户提供必要的最低限度的凭证,这样如果有人拥有用户名和密码,他/她就不能做任何恶意的事情。权限可以通过多种方式设置用户特定的数据,例如视图,以便用户只能访问正确的行。基本上,如果安全性是首要问题,则保守地分配权限,并在必要时为不同的用户分配不同的凭证。

1

我们在设计数据库应用程序时的经验法则是始终使用委派和隔离。

什么隔离意味着我们通过使用服务(即web服务,wcf,.net remoting等)将数据库交互与最终用户应用程序隔离开来。这样,数据库永远不会直接暴露给用户。

什么样的代表意味着数据库访问总是由知名的受限访问数据库用户(通常是服务运行的用户)代表最终用户执行。如果可能的话,数据库访问应由网络认证的用户执行,而不是通过在连接字符串或其他半安全位置存储用户名和密码。

最后,一个重要的注意事项:您应始终在通过电线发送之前加密最终用户的登录名和密码信息。这是一项额外的工作,但是从安全角度来看它是值得的。

+0

这很有趣。如果我为这个应用程序创建一个特殊用户,使用有限权限并在config中加密它的凭据,会怎样?这不是最好的解决方案,但即使他们发现它,权限也是有限的。 – tmrhmdv

+0

这应该工作。即使我们使用Windows身份验证,我们也总是加密连接字符串并将它们存储在注册表中。 –

0

您应该在您的服务器上托管一个(php/jsp/asp)脚本,与您的应用程序进行通话。您不应该将代码存储在应用程序中,不惜任何代价。

有太多的方法来取出信息。尤其是.NET应用程序它不需要更多的30分钟:p

+0

如果提供电子邮件地址,它将返回用户的帐号。但是,不安全,因为有人可以输入电子邮件地址并了解它的帐号。但这不太可能,所以如果没有其他好的解决方案,我会这样做。 – tmrhmdv

+0

由于其电子邮件ID,您可以使用非对称密钥加密来加密电子邮件并发送它。通过学习其他人的账号可以做些什么? – Pheonix

+0

我假设它是账户ID并传递给SIP网关...所以有人可以拨打免费电话吗? :d –

相关问题