2012-08-15 67 views
2

我開發了一個.net 3.5窗體表單應用程序。我也想設計一個網站,它有一個Web服務和多個Webmethods來查詢主機上的數據庫。我只想通過我的winapp和我的網站來調用web服務!我不希望任何其他人能夠調用和使用我的web服務,但只有一些人有權訪問我開發的Windows應用程序。需要asp.net web服務的安全方案

我需要一個很好的安全場景!我非常感謝任何能夠幫助我的人,因爲這是我開發web服務的第一次經歷,我真的需要它像我提到的那樣安全!

+0

你有Windows窗體應用程序,現在數據庫之間的身份驗證的現有方法是什麼? – 2012-08-15 21:19:41

+0

@EricH Ofcourse我驗證任何想使用winapp的人,並且用戶的用戶名和密碼在主機上的數據庫中。 – Karamafrooz 2012-08-15 21:22:33

回答

3

你在談論將是困難的原因有幾個做的,但主要是這樣的:

如果你把任何東西在代碼中你的WinForms應用程序,它可以很容易地反編譯。您可以混淆所有您喜歡的代碼,但可以對其進行反編譯。

因此,任何有權訪問代碼的人都可以閱讀您在您的應用中擁有的任何代碼。 您應該始終對待任何WinForms應用程序,就好像它完全受到損害一樣,並確保服務器端的安全性得到補償。

因此,您不能簡單地將用戶名和密碼存儲在配置文件或代碼中。你必須拿出別的東西。您可以使用身份驗證並在程序啓動時提示用戶輸入用戶名/密碼,然後使用它。但是,人們傾向於分享這些東西,所以你可能想要額外保護。

您可以將連接信息或祕密放入app.config並對其進行加密,但任何可以解碼代碼的人都可以重新編譯它,並添加代碼以隨意解密。

您可以爲您的應用程序提供簽名密鑰,並將其用於身份驗證機制,但可以繞過。

您可以將您的IP地址限制爲特定的IP地址,但這些地址可能被欺騙。

但是...

通過分層上述所有技術,可以使其難以攻擊者繞過您的注意事項。我們確實在我們的應用,我們也有類似的要求,下列操作之一:

  • 我們設置包含允許客戶爲每個授權用戶一個GUID記錄,IP地址的數據庫。
  • 每個Web方法都需要一個CustomerKey參數。 (上面提到的guid)每個對Web服務的調用都會根據IP地址檢查密鑰。
    • 如果匹配,則返回有效數據。
    • 如果失敗,有效期望數據被返回。我們實際上會返回看起來很好的數據,但實際上並非如此。這使得攻擊者很難知道他們是否真的突破了防禦。
  • 在WinForms應用程序中,密鑰存儲在應用程序中。config,它在main()事件(WinForms應用程序的入口點)中加密。這是爲了防止偶然的讀者訪問它。
  • 該程序在安裝時自動啓動,以便在啓動時進行加密,以最大限度地減少在加密之前讀取文件的可能性。
  • 此外,代碼被混淆。

分層的防禦,希望會阻止平均攻擊者。

微軟有一些準則,以及:http://msdn.microsoft.com/en-us/library/ff648643.aspx

+0

非常感謝您的好解釋先生!它讓我清楚許多事情!你可以給更多的關於如何存儲和加密應用程序配置中的密鑰explenaition?如果winapp運行的本地機器是如此安全以至於沒有人可以訪問和反編譯我的代碼,那麼如果我將GUID保存在我的代碼中會出錯? – Karamafrooz 2012-08-15 21:39:14

+0

哦,關於有效的數據!我怎樣才能保持自我和如果返回的數據是真實的或valilooking? – Karamafrooz 2012-08-15 21:40:48

+0

現在我想到了,我可以發送一封電子郵件給管理員(我自己在這種情況下:D)解釋,一個有效的看消息被髮送到包含他的IP的trudy客戶端?!這是一個好方法嗎? – Karamafrooz 2012-08-15 21:51:58