2011-08-08 64 views
0

啓用silverlight的WCF服務通信使用USB令牌/智能卡進行保護。第一次訪問必須通過輸入PIN來確認。一旦通過身份驗證,惡意網站就可以使用IMG-Tags和/或JavaScript向WCF服務啓動CSRF請求。根據Security Guidance for Writing and Deploying Silverlight Applications,這裏常用的技術是使用(session-)令牌或所謂的「nonce」,同時檢查HTTP Referrer頭已被證明是不安全的。爲啓用silverlight的WCF服務防止CSRF(或跨網站請求僞造/ XSRF)

我理解這個背後的想法,根據我的理解,如果您有單一表單(即聯繫表單)和單一服務,您可以確保用戶在發送之前必須查看並填寫表單,那麼這種方式非常有效。在Silverlight應用程序中,我無法預先定義這種類型的序列,因此可以以任意順序啓動許多請求(如請求產品的價格更新)。

您是否有一些建議,我應該如何保護Silverlight到WCF通信以防止CSRF攻擊,確保來自可信站點的已經過身份驗證的呼叫者請求?

回答

0

一種選擇是:

  1. 提供的服務在調用時,創建了服務器上的用戶會話的隨機數,並將其存儲,並返回給調用應用程序
  2. 後每個請求這其中,包括所述隨機數作爲URL參數或在請求的張貼體(或任何其它類型的消息使用的內)
  3. 檢查這個隨機數爲每個請求到服務器

攻擊者無法欺騙這個,因爲如果他調用上述服務,他會爲自己的會話獲得不同的令牌。只要這個隨機數不存儲在一個cookie中,它就不會在請求到服務器時自動提交。所以只要攻擊者無法猜測隨機數(使用密碼安全的隨機生成它),這應該起作用。

+0

感謝您的建議。我看到攻擊者可以以某種方式讀取發送的消息(因爲Silverlight不支持基於消息的安全性)並讀取隨機數的問題。由於我們會重複使用同一個隨機數來處理多個請求(這就是我理解你的建議的方式),所以他仍然可以使用被盜現象來僞造一個請求。對於我猜測的每個請求,隨機數應該是有效且唯一的? – thmshd

+0

您是否可以在Silverlight應用程序和WCF服務之間使用SSL,因此消息在路上不會被盜用? – Erlend

相關問題