0

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

4

2 回答 2

4

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

创建用户特定的连接字符串是最简单的,但可能会影响数据库费用。您仍然可以保留一个连接字符串,但使用 Windows 身份进行连接。在这两种情况下,您都必须付出一些努力来确保用户不能做超出他们被允许做的事情。

将您的数据访问封装在 Web 服务中更易于管理,但需要额外的工作才能使其正常工作。也许您可以看看RIA Services。优点是多方面的:您可以控制 Web 服务中的权限,并且可以减少不必要的查询的暴露。

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

于 2013-01-18T13:52:44.977 回答
2

You could just store an encrypt the connection string in the app.config but you will have to include the encryption key somewhere in the application. Therefore this is not safe because everyone can just decompile the application or attach a debugger and extract the connection string. Or monitor the network traffic. Actually there is now way you can prevent this from happening - whatever your application can do can be done manually by everyone (with access to the application).

The flaw in the design is that the application needs direct access to the database in the first place. It is close to impossible to ensure that the database can not be corrupted in this scenario (unless the database is only used for reading data). Essentially you would have to replicate a large portion of your business logic at the database server to ensure that no sequence of requests will corrupt the state.

A better solution would be accessing the database only indirectly through a web service. This allows you to perform better and easier to implement server-side validation and even authentication and authorization per user.

于 2013-01-18T14:09:02.130 回答