我正在扩展开源VoIP软件应用程序(用C#/ .NET编写)以满足我的需求,但不知道如何最好地解决这个问题。我希望应用程序在用户输入其电子邮件地址登录时连接到数据库,并执行SQL查询以使用该电子邮件获取其帐号并使用帐号进行身份验证。但是,我认为包含我的MySQL连接凭据(主机,用户名,数据库)是不安全的?我该怎么办?
答案 0 :(得分:2)
这确实是不安全的。
您需要在服务器上运行的软件,可以接受所述电子邮件和密码作为输入并连接到您的数据库(因此连接字符串位于您控制中的计算机上),检查它并返回ACCEPTED或DENIED客户。在您的情况下,ACCEPTED可能只是您提到的帐号。
如果电子邮件和密码通过加密链接(公钥)从客户端传输到服务器应用程序,则会获得积分。
答案 1 :(得分:1)
您应该将连接字符串放入配置文件中,然后加密该文件的该部分。这里有一个关于如何做到这一点的教程:Protecting Connection Strings and Other Configuration Information。虽然本教程适用于ASP.NET,但相同的原理同样适用于任何.NET配置文件。
这里也有类似的问题:Encrypting passwords in WinForms app.config, .NET。
答案 2 :(得分:1)
设计数据库应用程序时,我们的经验法则是始终使用委托和隔离。
隔离意味着我们通过使用服务(即Web服务,wcf,.net远程处理等)将数据库交互与最终用户应用程序隔离开来。通过这种方式,数据库永远不会直接暴露给用户。
代表什么意思是数据库访问总是由一个众所周知的,有限访问的数据库用户(通常是运行该服务的用户)代表最终用户执行。如果可能的话,数据库访问应该由网络认证的用户执行,而不是通过在连接字符串或其他半安全位置存储用户名和密码。
最后,一个重要的注意事项:在通过网络发送之前,您应始终加密最终用户的登录名和密码信息。这是一项额外的工作,但从安全角度来看非常值得。
答案 3 :(得分:0)
MySQL能否进行基于Windows的身份验证(即在域上)?如果是这样,你可以使用它。否则,您可能希望获得服务的凭据,或使用加密,但您需要包含加密密钥,以便任何致力于发现它的人都可以。
答案 4 :(得分:0)
您可以对连接字符串进行编码,使它们最终出现在程序集中并使用代码混淆器来保护它免受反汇编程序的影响
答案 5 :(得分:0)
有很多方法可以做到这一点,包括混淆和其他方法,使其难以在应用程序之外使用,但不是不可能检索/使用。
你应该怎么做?最好的方法(据我所知)是为帐户提供必要的最低凭证,这样如果有人确实拥有用户名和密码,他/她就无法对其进行任何恶意攻击。可以通过多种方式为用户特定数据(例如视图)设置权限,以便用户只能访问正确的行。基本上,如果安全性是最受关注的问题,请保守地分配权限,并在必要时为不同的用户提供不同的凭据。
答案 6 :(得分:0)
您应该在您的服务器上托管(php / jsp / asp)脚本,您的应用程序将与之对话。您不应该不惜任何代价将凭据存储在应用程序中。
有很多方法可以取出信息。尤其是.NET应用程序它不需要超过30分钟:p