我正在使用MySQL Connector和我的C#项目直接连接到数据库来存储统计信息。我的问题是,如果我发布这个项目并且有人愿意尝试访问我的数据库,他们是否可以从软件中获取连接字符串到我的数据库?我正在使用SQL Connector,因此我可以实时保存数据而不会生成大量的HTTP请求,因为我不知道为什么不在HTTP请求中发送数据。
答案 0 :(得分:4)
是的,如果他们会反编译你的申请。您可以对您的应用程序进行模糊处理(我不喜欢这样做。它可能会损坏您的应用程序。但如果您这样做,那么互联网上会有很多障碍物。)。对我来说,最好的方法是创建一个Settings
文件,里面是加密的字符串,例如数据库名称,位置,用户名和密码。
答案 1 :(得分:1)
始终可以从可执行文件中提取纯文本字符串,但并不总是实用。如果你想加强安全性,可以想到几件事:
- 通过将连接字符串(或密码)存储在应用程序的各个部分中进行混淆,但这可能不是很好。
- 将您硬编码的用户访问权限限制在应用程序中
- 存储加密的密码,如果密钥存储在应用程序中,它仍然只是模糊处理(.NET加密库中有一个很好的AES库。)
答案 2 :(得分:1)
是。这就是他们鼓励采用N层方法的原因。您的应用程序应该通过.NET Web服务,WCF服务,RIA服务等。然后您的服务将访问数据库并编辑,插入,从数据库中选择数据。当然,您的服务将负责某种类型的身份验证过程,并确定哪些角色和功能可用。例如,某些登录可能只对Orders表具有读访问权限。有些人可能拥有完整的读/写/编辑管理权限。有些登录可能只对客户表有读取权限,甚至可能只有他们自己的客户记录等。
您永远不希望将数据库登录凭据公开给您自己网络之外的任何内容。即使您使用Obfustication或加密,如果您的应用程序在某个时刻直接连接到数据库,它也必须发送这些信用卡,这使得黑客有机会拦截或捕获这些值。
通过使用N层架构,用户知道不是他们自己的登录名/用户名,以获得更多的privelages。即使通过SSL关心如果他们使用他们自己的用户名/密码破解如何访问web服务,如果它不会给他们提供比通过你的程序更多的访问权限,那也不是什么大问题。他们必须学习/窃取其他人的密码,也许是管理员用户名/密码,您可以通过每月更换一次轻松修复。
您提到在HTTP请求中发送连接字符串。一旦有人破解你可以改变你想要的数据库用户名/密码,但他们已经知道如何破解它。换句话说,永远不要将您的sa / DBOwner用户名密码放在您的应用中。为了使其安全,您需要通过某种类型的Web服务,该服务需要用户名和密码,并且负责确定用户的权限。该服务应该在您自己的网络上,因此他们必须破解Web服务器或IIS才能真正进入您的数据库。
有些人甚至在webservice的配置文件中加密数据库的用户名/密码,但除非你在一家大公司工作,而且很多管理员都可以访问配置文件但只有他们满满的应该能够访问数据库。在我看来,配置文件中的纯文本是正常的,除非数据是超级敏感的,并且你有多个人能够访问不应该知道用户名/密码的配置文件。这一点的唯一之处在于,只有公司中的人才能访问配置文件...运行不在公司中的应用程序的普通joe永远不会有任何方式来获取此信息,除非他们实际入侵您的IIS服务器......在这种情况下,你遇到了更大的问题。