一部のWebサーバーでは、JSON応答の前に、while(1);
というeを付けます。 g。 while(1);['id',123]
。ブラウザがコンテンツタイプjsonの<script>を実行するのはなぜですか?
これはJSON hijackingを防ぐためです:
これは、他のいくつかのサイトが あなたのデータを盗もうとする厄介なトリックを行うことができないようにすることです。たとえば、配列コンストラクタを置き換えて、このJSON URLをタグを使用して に置き換えると、悪意のある第三者の サイトがJSON応答からデータを盗み出す可能性があります。 (1)の間に を置くことによって;最初はスクリプトがハングします。
:webbrowsers(例:Firefox)は、コンテンツの種類<!-- Content-type: application/json; charset=ISO-8859-1 --> <script src="http://code.jsontest.com/?mine=1"></script>
application/json
でスクリプトを実行するため<script>
ソースとしてJSONコンテンツの@bdonlan、 https://stackoverflow.com/a/871508/1647737
しかし、この '誤用は' のみ可能です
ブラウザはコンテンツタイプが一致しないリモートスクリプトを単に無視できません。 E.上記の例では、script typeはapplication/javascript
(デフォルト)ですが、responeのコンテンツタイプはapplication/json
です。 JavaScriptとしてまだ実行されているのはなぜですか?