0

webHttpBindingエンドポイントをクライアントに公開するために、バインド付きの WCF サービスを使用しています。サービスは IIS (.svc) によってホストされます。クライアントはenableWebScript動作を使用して自動的に生成される JavaScript です。すべてのメソッドは POST を使用しています。

このサービスに対して CSRF 攻撃を行うことは可能ですか?

次のオプションを検討しました。

  • AJAX - クロスサイト リクエストが許可されていないため、不可能です (私たちのサイトは XSS になりにくいと仮定しています)。
  • HTML フォームの送信 - サービスには、HTML フォームを使用して設定できない特定の HTTP ヘッダーが必要なため、不可能です

他のオプションはありますか?Flash、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"}

明確にするために:私は自分のサービスを保護しようとしています。攻撃を行いません。すべての呼び出しに「認証トークン」を追加することを検討していますが、最初に努力する価値があるかどうかを知りたいです。

4

2 に答える 2

-1

一般に、CSRF を防ぐには、Referrer ヘッダーをチェックするだけで十分です。なぜなら、ブラウザーはリファラー ヘッダーを設定するからです (javascript によって設定された場合でも)。

サービスが CSRF から安全であることを保証できる人は誰もいないと思います。なぜなら、(偶然に) 何らかの攻撃ベクトルを開く可能性は常にあるからです。たとえば、次のサイトがあるとします。

http://mycompanysite.com/MyService/Service.svc (hosting the service)
http://mycompanysite.com/MyWebApp/ (hosting a web app)

次に、「クロスドメイン」ルールが適用されなくなるため、Web アプリケーションの脆弱性により攻撃が可能になる可能性があります。さらに、クライアント アプリケーション (ブラウザなど) に脆弱性が存在する可能性は常にあるため、ホスティングの観点からは、ユーザーがよく知られている最新のブラウザを使用しているという前提でしか作業できません。プラグインなしなど

于 2012-05-03T16:53:10.440 に答える