爲您正在使用的項目保護DLL的最佳做法是什麼?我有興趣開發的某些DLL將具有數據訪問層(DAL)和業務邏輯層(BLL)功能。可能有幾個應用程序最終可能會觸發這些DLL來執行業務特定的功能。如何保護.NET DLL的
什麼是確保這些DLL的,使他們只能通過唯一的創建者的應用程序中使用的最佳方法?
既要阻止未經授權使用DLL的安全性又要防止可能的反編譯的安全性。
爲您正在使用的項目保護DLL的最佳做法是什麼?我有興趣開發的某些DLL將具有數據訪問層(DAL)和業務邏輯層(BLL)功能。可能有幾個應用程序最終可能會觸發這些DLL來執行業務特定的功能。如何保護.NET DLL的
什麼是確保這些DLL的,使他們只能通過唯一的創建者的應用程序中使用的最佳方法?
既要阻止未經授權使用DLL的安全性又要防止可能的反編譯的安全性。
一個選項可能是將DLL中的所有公開類標記爲「internal」而不是「public」,然後在您的DLL中使用"InternalsVisibleTo"屬性來顯式命名允許使用的DLL(可能是exes)你的內部類型。這可能要求所有參與者都被強名,但無論如何這是一件好事。
最終,是爲了防止意志堅定的黑客訪問你的代碼時,你的代碼是黑客的機器上執行沒有絕對的辦法。所有可以由機器執行的代碼都可以拆卸並重新組裝成其他具有足夠先進工具和經驗的其他代碼。
處理代碼安全性的最佳方法是提出這樣一個問題:「我們希望如何讓別人無需授權或授權即可使用此代碼,以及我們願意花費多少時間/金錢來實現這一目標?」如果你什麼都不做,那麼在別的項目中使用你的DLL是非常容易的。如果你做了一些簡單的事情,你可以讓別人在別處使用你的DLL不方便。如果你花費數月的努力,你可能會讓別人濫用你的代碼變得非常困難,但你永遠不可能做到不可能。
的一種技術是接近絕對安全的,因爲我可以想像的是:完全不執行你的客戶(或黑客的)機器上的代碼。改爲運行Web服務,並將代碼保存在服務器上,黑客無法在進程中隨意啓動調試器或反彙編代碼。您的代碼安全性由服務器位置的物理安全性和服務器端口的網絡訪問安全性來定義。這些攻擊媒介比在黑客機器上執行的任何代碼都難以規避。
對於一些軟件公司,從該客戶端移動他們的應用程序的一部分,以雲計算是不是變得更好的可擴展性和易於更新或降低成本,它是關於代碼安全性和防止盜版。
如果有人擁有所有這些組件訪問計算機,你有更多的擔心比別人重用他們,他們可能只是直接進入數據庫,而不是使用您的程序集。
如果這是一個桌面應用程序或東西,你所訪問的數據庫直接,那麼你需要重新考慮你的應用程序,通過Web服務或一些訪問數據,而不是直接去到數據庫中。
該方案存在於複製環境中。這些機器在任何時候都可能或不可能具有互聯網連接,使Web服務不是一種選擇。 – Matt 2010-12-14 17:28:48
Sooooo ...我不明白你的意思。直接與數據庫交談是不好的,你仍然沒有理由直接與之交談。 – Phill 2010-12-14 20:38:36
好吧我有一個DAL和BLL都在單獨的項目中,然後編譯成DLL。這些庫控制我們的邏輯和數據庫操作。主應用程序是一個僅包含表示層的WPF應用程序。還有其他的子應用程序也會碰到一些相同的DAL和BLL操作。這樣做只是爲了避免需要不同應用程序的重複編碼。 DAL的全部目的是與DB交談。 – Matt 2010-12-16 17:14:24
如果您以.NET DLL的形式將其發送給客戶端,那麼保護您的知識產權是不可能的。您可以將您的應用程序邏輯託管在雲中,儘管這可能不適合您的方案。
即使是「最好」的混淆器也不是絕對可靠的。你可能會推遲一個偶然的黑客,但正如dthorpe所說,如果有人真的想要反編譯你的程序集,他們會。
你的意思是確保他們免受反編譯或只是保護他們免於使用? – NotMe 2010-12-13 18:30:41
現在我正在尋找使用,但真的尋找兩個。相應地更新了問題。 – Matt 2010-12-13 18:38:17