2009-02-03 45 views
0

我正在維護一個公共網站(無需授權),它使用基於https的Web服務來執行各種操作。大多數對Web服務的調用都是從javascript調用的。保證Web服務安全性最小的方式?

最近我發現一個惡意黑客可能(如果他/她選擇的話)直接調用web服務來試圖破壞系統。

事實上,他們可以做的事情沒有太大的損害,但實際上這些事情很難預測。

請記住,Web服務調用將暴露在JavaScript代碼(客戶端可用)中,我可以使用哪種最佳方法來防止未經授權和/或惡意訪問Web服務。

不幸的是,我不能僅僅通過IP來限制訪問,因爲那裏有基於窗體的客戶端應用程序,它們也與Web服務交互。

使用Windows身份驗證可能很困難,因爲這些客戶端應用程序可以在世界的任何地方運行,並且用戶不屬於任何特定的AD組,甚至不屬於這個問題的域。

我會很感激任何建議,銘記兩種不同的訪問類別和JavaScript代碼的暴露。

回答

3

JavaScript調用的任何東西都可以被有權使用該javascript的惡意用戶輕鬆模仿。我建議修改頁面以使用更多的服務器端解決方案。將AJAX留給那些不容易被利用的東西。

防止未經授權的用戶比支持完全公開訪問要容易得多。如果您在用戶的Cookie上刪除了一個耗時的GUID(與個人用戶綁定),它將作爲Web Service的參數之一發送出去,但您對應用程序還有一個額外的,通常難以破解的層。

但是,任何有權執行javascript的人都應該沒有麻煩將它們拼接在一起。無法訪問javascript的人可能很難輕鬆訪問Web服務。

2

這需要一點努力,但如果您的頁面也是ASP.net,您可以設置共享會話,打開Web服務的EnableSession屬性並使用會話數據來保護會話。可以在這裏找到一個概述:http://blogs.lessthandot.com/index.php/WebDev/ServerProgramming/ASPNET/sharing-asp-net-session-state-between-we

這將需要您的Windows應用程序使用不同的「服務版本」的服務消耗。

+0

我將如何保護不同的版本? – 2009-02-03 16:03:37