加密表单应用程序的连接字符串

时间:2013-01-18 13:49:07

标签: c# winforms app-config

我为我的项目创建了一个表单应用程序。我想在我的网站上托管,供用户下载和测试。因为我使用配置管理器,所以我必须包含配置文件和.exe,因为应用程序有一个后端远程数据库。当然,我现在才意识到我的连接字符串是有目共睹的。我尝试将app.config重命名为web.config,但aspnet_regiis -pef命令只是在我的vista机器上以管理员身份运行时返回一个帮助菜单!即使此命令有效并且我将web.config重命名为app.config,下载时运行应用程序的机器会自动解密连接字符串吗?总而言之,对于新手来说,接近这种困境的最佳方式是什么?为什么aspnet_regiis -pef没有运行?我还看了关于这个主题的其他帖子,但遗憾的是他们到目前为止还没有为我工作。

2 个答案:

答案 0 :(得分:4)

创建用户/特定连接字符串,或者在某些Web服务中包装所有数据访问,您可以在其中控制自动化。

创建用户特定的连接字符串是最简单的,但可能会对DB费用产生影响。您仍然可以保留一个连接字符串,但使用Windows标识进行连接。在这两种情况下,您都需要花费一些精力来确保用户无法做到比他们允许做的更多的事情。

在Web服务中包装您的数据访问更易于管理,但需要额外的工作才能使其正常工作。也许你可以看看RIA Services。优点是倍数:您可以控制Web服务中的权限,并减少不需要的查询的曝光。

另请注意,即使您对配置文件中的连接字符串进行加密,任何恶意用户都可以对其进行解密。一个简单的反编译器将突出显示您的解密密钥。

答案 1 :(得分:2)

您可以在app.config中存储加密连接字符串,但您必须在应用程序的某处包含加密密钥。因此,这是不安全的,因为每个人都可以反编译应用程序或附加调试器并提取连接字符串。或监控网络流量。实际上现在可以防止这种情况发生 - 无论您的应用程序可以做什么,都可以由每个人手动完成(访问应用程序)。

设计中的缺陷是应用程序首先需要直接访问数据库。几乎不可能确保在这种情况下数据库不会被破坏(除非数据库仅用于读取数据)。基本上,您必须在数据库服务器上复制大部分业务逻辑,以确保没有任何请求序列会破坏状态。

更好的解决方案是仅通过Web服务间接访问数据库。这使您可以更好,更轻松地实现服务器端验证,甚至每个用户的身份验证和授权。