2011-05-04 317 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

相關問題