我正在扩展开放源代码的VoIP软电话应用程序(用C#/。NET编写)以满足我的需求,但不知道如何最好地处理此问题。我想让应用程序在用户输入他的电子邮件地址登录时连接到数据库,并执行SQL查询以使用该电子邮件获取其帐号并使用帐号进行身份验证。但是,我认为包括我的MySQL连接凭据(主机,用户名,数据库)是不安全的?我应该怎么做?在C#应用程序中隐藏MySQL凭证
回答
MySQL可以执行基于Windows的身份验证(即在域中)吗?如果是这样,你可以使用它。否则,您可能想要获得服务的凭据,或使用加密,但您需要包含加密密钥,以便任何致力于发现它的人都可以。
您应该将连接字符串放入配置文件,然后加密该文件的该部分。有一个关于如何在这里做的教程:Protecting Connection Strings and Other Configuration Information。尽管本教程适用于ASP.NET,但同样的原则也适用于几乎任何.NET配置文件。
这里还有一个类似的问题:Encrypting passwords in WinForms app.config, .NET。
确实不安全。
您需要运行在服务器上的软件,它可以接受所述电子邮件和密码作为输入并连接到您的数据库(因此连接字符串位于控件中的机器上),检查它并返回ACCEPTED或DENIED客户端。在你的情况下,ACCEPTED可能只是你提到的帐号。
如果电子邮件和密码是通过加密链接(公钥)从客户端传输到服务器应用程序的,则为奖励分数。
让他们在你的装配结束,您可以编写您的连接字符串和使用代码混淆,以保护其免受反汇编
http://woodmann.com/collaborative/tools/index.php/Category:.NET_Deobfuscation_Tools,来自Google的第一个链接。 –
有很多方法可以做到这一点,包括混淆等方式使其难以使用在应用程序之外,但不是不可能检索/使用。
你应该怎么做?最好的方式(据我所知)是给账户提供必要的最低限度的凭证,这样如果有人拥有用户名和密码,他/她就不能做任何恶意的事情。权限可以通过多种方式设置用户特定的数据,例如视图,以便用户只能访问正确的行。基本上,如果安全性是首要问题,则保守地分配权限,并在必要时为不同的用户分配不同的凭证。
我们在设计数据库应用程序时的经验法则是始终使用委派和隔离。
什么隔离意味着我们通过使用服务(即web服务,wcf,.net remoting等)将数据库交互与最终用户应用程序隔离开来。这样,数据库永远不会直接暴露给用户。
什么样的代表意味着数据库访问总是由知名的受限访问数据库用户(通常是服务运行的用户)代表最终用户执行。如果可能的话,数据库访问应由网络认证的用户执行,而不是通过在连接字符串或其他半安全位置存储用户名和密码。
最后,一个重要的注意事项:您应始终在通过电线发送之前加密最终用户的登录名和密码信息。这是一项额外的工作,但是从安全角度来看它是值得的。
这很有趣。如果我为这个应用程序创建一个特殊用户,使用有限权限并在config中加密它的凭据,会怎样?这不是最好的解决方案,但即使他们发现它,权限也是有限的。 – tmrhmdv
这应该工作。即使我们使用Windows身份验证,我们也总是加密连接字符串并将它们存储在注册表中。 –
您应该在您的服务器上托管一个(php/jsp/asp)脚本,与您的应用程序进行通话。您不应该将代码存储在应用程序中,不惜任何代价。
有太多的方法来取出信息。尤其是.NET应用程序它不需要更多的30分钟:p
- 1. 如何在C#应用程序中安全地隐藏数据库凭证?
- 2. 如何隐藏http头中的用户凭证 - angular2应用程序
- 3. 在C#应用程序中设置AWS S3凭证
- 4. 在Market Place中隐藏应用程序
- 5. 按钮在c#控制台应用程序中隐藏取消隐藏
- 6. 隐藏应用程序
- 7. 在c#窗口应用程序中隐藏用户窗体
- 8. 隐藏的程序在C程序
- 9. 如何在C#.Net 4.6中隐藏ConnectionString WPF应用程序
- 10. 隐藏开发人员的smtp凭证
- 11. iOS应用程序使用Facebook应用程序凭证
- 12. 凭证从.NET Web应用程序
- 13. 隐藏Android应用程序中的值
- 14. 隐藏URL中的Android应用程序
- 15. 从Android应用程序列表中隐藏应用程序
- 16. 反汇编程序在C#中隐藏应用程序的信息
- 17. 将用户凭证保存在Silverlight应用程序中
- 18. 在Cocoa应用程序中安全地保存用户凭证
- 19. asp.net web应用程序与c#&vb.net都在代码隐藏
- 20. C#如何隐藏我的应用程序在后台?
- 21. 从我的应用程序隐藏其他应用程序:目标c
- 22. 在应用程序中获取码头领域凭证
- 23. 保持API凭证在React应用程序中保密
- 24. Android隐藏/取消隐藏应用程序图标
- 25. 如何在WP7应用程序图块中隐藏应用程序标题
- 26. backgroundimage隐藏在我的应用程序中的Android应用程序
- 27. 在Adobe AIR应用程序中隐藏Javascript/CSS应用程序交付
- 28. 隐藏Java应用程序启动的窗口应用程序?
- 29. 从Android应用程序选择器隐藏应用程序
- 30. 从iPhone上运行应用程序隐藏应用程序
当给予应用程序和数据本身的访问权限时,无论发生什么情况,总能找到密码。 –
即使这样做完成后,一个人仍然可以使用WireShark之类的东西在网络连接上传输密码时嗅探密码。 – Kibbee
没问题。这仅适用于ASP应用程序,不适用于桌面应用程序。 –