我們使用WCF服務與webHttpBinding
綁定將端點暴露給客戶端。服務由IIS(.svc)託管。客戶端使用enableWebScript
行爲自動生成JavaScript。所有的方法都使用POST。是否可以使用webHttpBinding對WCF服務執行CSRF攻擊?
是否可以對此服務進行CSRF攻擊?
我認爲以下選項:
- AJAX - 不可能的,因爲跨站點的請求是不允許(我假設我們的網站是不容易產生XSS)
- HTML表單提交 - 不可能,因爲服務需要某些不能使用HTML表單設置的HTTP標頭
是否有其他選擇? Flash,Silverlight,網絡套接字還是其他?
有效的要求是這樣的:
POST http://site/Service.svc/ServiceMethod HTTP/1.1
Host: site
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: cs,en-us;q=0.8,en;q=0.5,pl;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
X-Requested-With: XMLHttpRequest
Content-Type: application/json; charset=utf-8
Referer: http://site/
Content-Length: 33
Cookie: cookies, session id, etc.
Pragma: no-cache
Cache-Control: no-cache
{"param1":11,"param2":"123"}
要明確:我想保護我的服務。不執行攻擊。我正在考慮爲每個呼叫添加一個「身份驗證令牌」,但首先我想知道它是否值得付出努力。
推薦人檢查的問題是仍然有大量的用戶無法設置推薦人標題。我不想把它們剪掉。你怎麼看待這件事? – jakubka
引用程序檢查的另一個問題是它可能是僞造的。使用引用標頭實際上是無用的。防止CSRF的唯一有意義的方法是使用隨機令牌存儲服務器端和給定的形式。 – TheMonarch
@TheMonarch你說的是僞造的,但是CSRF控制的目的是爲了保護最終用戶而不是服務,所以僞造引用標頭是毫無意義的,除非你想讓自己成爲CSRF的受害者。 –