2011-05-04 115 views
0

首先,我有两个项目工作:ASP.NET和Silverlight 两者都使用一个类(QueryServiceClass在库类项目中)具有查询方法以使用ADO.NET访问数据库,操作数据库。 (打开连接到数据库,添加客户,编辑,更新等)安全吗?在库中存储数据库访问方法

因此,我将它们存储到C#类库中,并与ASP.Net和Silverlight共享。 ASP.NET项目和Silverlight的Web项目将具有对QueryServiceClass项目的引用。

但是,如果我发布ASP.NET/Silverlight项目,也应该发布QueryServiceClass项目的dll文件(这时dll应该在服务器端定位)。

因为QueryServiceClass的方法必须是公开的,所以ASP.NET/Silverlight项目可以使用它。 那么有人可能能够使用该DLL访问数据库?这会安全吗?

====== 编辑

在Silverlight的Web项目中,我使用WCF inhert的QueryServiceClass和接口来访问数据库,等等Silverlight客户端,它会通过WCF访问数据库。 我更关心的是有人可能会从服务器上获取dll文件并将其提供给某人。

在此先感谢。

+0

如果数据库存储任何个人身份信息,如果dll被放在错误的手中,任何人都可以访问您的数据库。你可以对你觉得它的价值做出评论。 – 2011-05-04 19:08:36

+0

只是澄清一下,你的Silverlight的东西会直接访问数据库吗?换句话说,客户端是否可以访问连接字符串? – 2011-05-04 19:19:14

+0

不,Silverlight客户端需要通过WCF,WCF是唯一引用该QueryService dll文件的项目。 – King 2011-05-04 19:28:08

回答

2

你可以让你的会员的内部,而不是公众和修改的AssemblyInfo.cs类并使其内部可视具体asseblies。

[assembly: InternalsVisibleTo("OtherLib.Domain.Stuff")] 

这并不防止他人拆卸您的DLL来获取信息,但会阻止人们在他们的代码中使用您的DLL。

+0

如果您对最终用户有一定程度的信任,这是一个很好的解决方案 - 但他们仍然可以反编译或使用反射来获取他们想要的细节。 – 2011-05-04 19:09:48

+0

更正,这是一个很好的解决方案,当且仅当你绝对相信你的最终用户不要试图混淆你的数据库。 – 2011-05-04 19:12:15

+0

但是如果我们谈论反编译,如果我的所有数据库访问代码都存放在我的WCF中,这是否一样? – King 2011-05-04 19:13:58

0

您可以通过将您的数据库登录凭据存储在配置文件中并对其进行加密来实现这一点。然后他们可以访问该DLL,但没有有效的凭据无法连接到数据库。

这里的an article描述了加密web.config文件中的值。

编辑:结合克里斯的建议,你有一个很好的,安全的解决方案。

+0

否。加密连接字符串不会防止恶意用户。 – 2011-05-04 19:11:29

+0

是的。它确实如此,如果你认为它没有,请提供一个理由。 – 2011-05-04 19:12:33

+0

因为在某些时候连接字符串将不得不被解密以便连接,并且如果解密可以发生在不可信的机器上,则可以检索连接字符串。 – 2011-05-04 19:14:04

0

即使您将这些方法设置为私有,他们也可以使用反射或反编译DLL来获取代码,然后访问数据库。

  • 您可以有一个WCF服务,它执行所有数据库交互,并且客户端通过该服务进行连接。通过这种方式,无法建立直接连接,但如果最终用户可以确定WCF服务的位置和身份验证方案等,仍然可以调用方法。
  • 您可以只存储和加密配置文件的连接信息。
1

公开与否,那将不安全。如果你的东西没有正确的访问限制访问数据库,那么你的数据库将会是一个不可信任的计算机,它将以全新的方式在的任何一个的方式中访问。

正确的方法是在您的Silverlight事物和数据库之间放置一个Web服务,并在服务中执行彻底的访问检查。

1

可能最安全的方法来防止任何问题是不允许从公共互联网远程访问您的数据库。这通常通过在Web服务器上运行服务(该服务可以是网站),然后使用该服务连接到数据库来处理。基本上,您应该确保没有任何连接可以通过网络外的机器直接连接到数据库服务器。

+0

哦,所以就像WCF位于服务器内部一样,所以是到数据库的本地连接。而当我们使用Silverlight连接到WCF与外部连接。 – King 2011-05-04 19:20:55

+0

基本的网络布局是,您的防火墙允许端口80(可能是443)通过Web服务器,以便Web通信可以通过,但数据库监听的任何端口都会被防火墙阻止。由于您的Web服务器已经位于防火墙之后,因此它可以与数据库服务器通信。这是一个非常简单的例子,但它解决了安全问题。你的Silverlight应用程序应该与服务对话,它应该*不*直接连接到数据库。 – 2011-05-04 19:56:56

相关问题