1

有一個關於對WCF服務的調用的安全概念,我似乎無法理解。Silverlight和WCF RIA,保護服務調用。我錯過了什麼嗎?

我已經構建了一個示例Silverlight解決方案,並啓用了WCF RIA。
我有一個invoke操作(或任何的自動生成的CRUD的對於這個問題的),我已經與[RequiresAuthentication()]註釋:

[RequiresAuthentication()] 
[Invoke] 
public void DeleteResource(string id) 
{ 
    //... 
} 

接着,我改變的web.config啓用形式認證:

<system.web> 
    <httpModules>...</httpModules> 
    <compilation>...</compilation> 
    <authentication mode="Forms" />  
</system.web> 

現在只有經過身份驗證的用戶才能調用此方法。所以在客戶端我需要進行身份驗證:

FormsAuthentication auth = new FormsAuthentication(); 
auth.Login(textBoxUsername.Text, textBoxPassword.Text); 

成功登錄後,可以調用該方法。

當提琴手通過這個過程尋找我可以看到兩件事情:

  1. 的Set-Cookie:.ASPXAUTH = F8FFB8B .....(從登錄工序)
  2. http://localhost:1107/.../DomainService.svc/binary/DeleteResource(當該方法被稱爲)

所以有害的用戶可以執行以下操作:

  1. 登錄到我的應用程序就像一個再gular用戶(他註冊並獲得憑據)。
  2. 在使用應用程序時打開Fiddler並複製剛纔提到的cookie和URL。
  3. 使用cookie構建對該URL的HTTP調用(例如,使用C#Webclient),並開始刪除資源。

如果這是可能的,我該如何阻止這個安全漏洞?
如果不是,什麼阻止用戶這樣做?

回答

0

說實話,我沒有看到一個安全漏洞,在這裏:

  1. 如果用戶能夠登錄,他是 - 我認爲 - 授權執行上述操作。
  2. 驗證!=授權。您不僅應該檢查用戶是否通過了身份驗證,而且他/她是否有權執行任何單個操作(當然,在服務方面)。 從安全角度來看,從瀏覽器調用操作和使用「手動」準備的請求之間應該沒有區別 - 應該在每次調用時在服務級別上執行授權(您永遠不應該信任客戶端 - 即從WebBrowser你發佈這個問題的原因)。如果用戶嘗試他/她沒有被授權的東西,則應該發生授權錯誤。
  3. 認證cookie應該設置認證到期時間(例如30分鐘)。