2016-11-21 9 views
0

潜在的なCSRF攻撃から防御するために、どのブラウザが使用されているかを調べるためにユーザーエージェントヘッダーを使用したとします。私は、ユーザーエージェントヘッダーを必要としない無数のCSRF防御があると理解していますが、ユーザーエージェントヘッダーがどれほど安全であるかを知りたいだけです。CSRF攻撃:javascriptを使用してユーザーエージェントのヘッダーを変更できますか?

オリジンヘッダーとリファラーヘッダーは、forbidden headersであるため、このような変更から十分に保護されています。しかし、ユーザーエージェントヘッダーは、表示されません。

これは、CSRF攻撃者がユーザーエージェントヘッダーを簡単に変更できることを意味しますか? thisによれば、それはできません。しかし、なぜ、それが禁止されているのではないのだろうか?私が誤解していることはありますか?それはRefererとOriginヘッダーとして保護されていますか?

ありがとうございます。

+0

ユーザーがユーザーエージェントを偽装できるかどうかを確認する場合は、答えは「はい」です。ハッカーのための利点がどうあるべきか[非常に簡単。](http://www.howtogeek.com/113439/how-to-change-your-browsers-user-agent-without-installing-any-extensions/) –

+0

ユーザーエージェントヘッダーを変更するには? – gus27

+0

はい、ユーザーはユーザーエージェントを偽装することができます。彼らは、元のヘッダーとそのリファラーヘッダーも偽装することができます。しかし、CSRFの攻撃者は、ユーザーのブラウザを制御できないため、発信元またはリファラーヘッダーを偽装することはできません。ユーザーエージェントヘッダーはどうですか? – ineedahero

答えて

0

明らかに、ユーザーエージェントは要求ヘッダーであり、のブラウザ以外の要求、または異なるブラウザの拡張機能やツールについて話している場合は、を簡単に偽造することができます。

Javascriptをブラウザで実行している場合(たとえば、CSRFシナリオなど)、状況は混在しています。古いXmlHttpRequestインターフェイスでは、不可能です。ユーザーエージェントヘッダーを変更することはできません。ただし、Chrome 43+、Edge 14+、Firefox 39+、Opera 29+でサポートされる新しいFetch APIはありますが、IEとSafariではサポートされていません。サポートしているブラウザの間でさえ、違いがあります。

このコード考えてみましょう:私は要求にLinux上クローム54.0.2840.100でこれを試してみました、とのUser-Agent

var myHeaders = new Headers(); 
myHeaders.append("User-Agent", "anything you like"); 

var setup = { method: 'GET', 
       headers: myHeaders, 
       mode: 'cors', 
       cache: 'default' }; 

fetch('somefile.txt', setup) 
.then(function(response) { 
    return response.blob(); 
}); 

は、デフォルトのクロムユーザエージェントでした。しかし、これをFirefox 50.0で実行すると、確かにカスタムユーザエージェントが送信されます。

これは明らかにFetch仕様に基づいているはずですが、ブラウザはこれをいつもと違って実装しています。

また、プラグインがブラウザ(特に古いバージョンのJavaまたはFlash)にインストールされている場合、Referer、Origin、またはユーザーエージェントのようなリクエストヘッダーの偽造が可能になることがあります。

関連する問題