webHttpBinding
バインディングでWCFサービスを使用して、クライアントにエンドポイントを公開しています。サービスはIIS(.svc)によってホストされます。クライアントはenableWebScript
ビヘイビアを使用して自動的にJavaScriptを生成します。すべてのメソッドがPOSTを使用しています。webHttpBindingを使用してWCFサービスに対してCSRF攻撃を実行することは可能ですか?
このサービスにCSRF攻撃を加えることは可能ですか?
私は、次のオプションと見なさ:
- AJAX -
- クロスサイトリクエストが許可されていないので、(私は、私たちのサイトにはXSSの傾向がないと仮定しています) 、ことはできませんが、HTMLフォームが提出 - ありませんサービスはHTMLフォームを使用して設定できない特定のHTTPヘッダーを必要とするため
その他のオプションはありますか?フラッシュ、Silverlight、Webソケットなど何か?
有効な要求は、次のようになります
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
リファラーチェックのもう1つの問題は、それが偽造できることです。リファラーヘッダーを使用することは事実上役に立たない。 CSRFから保護する唯一の意味のある方法は、サーバー側と所定の形式で格納されたランダムトークンを使用することです。 – TheMonarch
@TheMonarchそれは偽造することは間違いありませんが、CSRFコントロールの目的はサービスではなくエンドユーザーを保護することです。したがって、あなた自身がCSRFの被害者にならないようにしない限り、リファラーヘッダを偽造することは無意味です。 –