JavaScriptスクリプトの実行を拒否しました。リクエスト内で見つかったスクリプトのソースコード


81

WebKitでは、JavaScriptで次のエラーが発生します。

JavaScriptスクリプトの実行を拒否しました。リクエスト内で見つかったスクリプトのソースコード。

コードはJavaScriptスピナー用です。ASCIIアートを参照してください。

コードは正常に機能していましたが、CaminoとFirefoxでも正しく機能しています。このエラーは、ページがPOSTを介して保存され、GETを介して取得された場合にのみスローされるようです。Chrome / MacとSafari / Macの両方で発生します。

これが何を意味するのか、そしてこれを修正する方法を知っている人はいますか?


うーん、おそらく私のWebKitが更新されました。ページが再び機能します。また、ページのすべての古いリビジョン(ページの下部にある[古いリビジョン]ボタンを参照)。
doekman 2009年

このエラーは、w3schoolsのtryitエディターで発生します。w3schools.com/ js / tryit.aspfilename = tryjs_eventsスクリプトは最初に実行されますが、[編集してクリックしてください]ボタンをクリックした瞬間からブロックされます。

1
「編集してクリックしてください」ボタンを押すと、textareaのコンテンツ(javascriptを含む)がPOSTを介してサーバーに送信されます。Chromeは、JavaScriptがサーバーに投稿されていることを検出し、悪意がある可能性があります。ブロッキングは、XSS攻撃に対する対策です。
doekman

:ヘッダX-XSS-保護を設定する方法を示していることをここでのリンク stackoverflow.com/questions/4635403/...は
hh_s

回答:


67

これは、XSS(クロスサイトスクリプティング)攻撃を防ぐためのセキュリティ対策です。

これは、一部のJavaScriptコードがHTTP POSTリクエストを介してサーバーに送信され、同じコードがHTTPレスポンスを介して返される場合に発生します。Chromeがこの状況を検出すると、スクリプトの実行が拒否され、エラーメッセージが表示されますRefused to execute a JavaScript script. Source code of script found within request

多層防御に関するこのブログ投稿:新しいセキュリティ機能も参照してください。


5
ある種の参考資料を見るといいでしょう。
kangax 2009年

しかし、このゴナは何か問題を引き起こしますか?このメッセージを無視しても大丈夫ですか?
samach 2011

@Gregブラウザが「状況を検出」するために使用するアルゴリズムは何ですか?データ内の文字列「<script>」を検索するだけでは不十分ですか?
Pacerier 2012

1
X-XSS-Protection:0修正を使用することの意味に関して、この回答と以下のKendallからの回答との間でいくつかの議論が見られます。XSS攻撃に対してサイトを開きますか?もしそうなら、このエラーを解決する別の方法はありますか?
dansalmo 2012年

これをさらに説明するリファレンス、blog.chromium.org / 2010/01 /…反射型XSS保護セクションを参照
h--n

131

この「機能」はX-XSS-Protection、影響を受けるページで非標準のHTTPヘッダーを送信することで無効にできます。

X-XSS-Protection: 0

2
このエラーをトリガーしているページが、送信ページではなく、このヘッダーで送信されていることを確認してください。
ケンダルホプキンス

@KendallHopkins .... Javascript / Javaでこれを使用する方法を教えてください。
SRy 2013

+1これは、受け入れられた回答とは異なり、質問に完全に回答しますが、警告しますが、解決策はありません。
JohnnyQ 2013

2
-1これにより、Chromeの問題が「修正」される可能性がありますが、実際の問題は解決されません。これを行うと、サイトはクロスサイトスクリプティング攻撃に対して脆弱になります(実際にはより脆弱になります)。@Gregがほのめかしているが明示的には述べていないように、実際の解決策は、リクエストで送信された応答でHTML / JSを返送しないことです。彼が提供したリンクを読むことはそれを明らかにするはずでした。
sfarbota 2015年

@sfarbotaこの保護が悪い場合がたくさんあります。たとえば、編集中のJSを返すことが完全に許容される多くのCMSシステムを破壊します。しかし、あなたのポイントでは、これをサイトのすべてのページに包括的に追加することはお勧めしません。おそらく、開発者がこのエラーに遭遇した場合にのみ必要です。
ケンダルホプキンス

15

簡単な答え:JavaScriptを最初に送信した後でページを更新するか、編集中のページを表示するURLを押してください。

長い答え:フォームに入力したテキストにはjavascriptが含まれており、ブラウザは必ずしもあなたがjavascriptのソースであることを認識していないため、ブラウザはあなたがこのJSのソースではないと想定する方が安全です。実行しないでください。

:JavaScriptが含まれているメールまたはFacebookへのリンクを提供したとします。そして、javascriptがすべての友達に私のクールなリンクをメッセージで送ると想像してみてください。したがって、そのリンクを呼び出すゲームは単純になり、ページに含まれるようにJavaScriptを送信する場所を見つけます。

Chromeやその他のWebKitブラウザーは、リクエストにJavaScriptが含まれている場合、レスポンスに含まれるJavaScriptを実行しないことで、このリスクを軽減しようとします。あなたのブラウザがそのJSを実行することは決してないので、私の悪質な攻撃は阻止されるでしょう。

あなたの場合、あなたはそれをフォームフィールドに提出しています。フォームフィールドの投稿により、Javascriptを表示するページがレンダリングされ、ブラウザが心配します。ただし、JavaScriptが本当に保存されている場合は、フォームを送信せずに同じページを押すと、JavaScriptを実行できます。


1

他の人が言っているように、これは、HTTP応答にリクエストに含まれていたJavaScriptやHTML文字列が含まれている場合に発生します。これは通常、フォームフィールドにJSまたはHTMLを入力することで発生しますが、URLのパラメータを手動で調整するなどの他の方法でトリガーすることもできます。

これに伴う問題は、悪意のある人が必要なJSを値として入力し、悪意のあるJS値を使用してそのURLにリンクし、ユーザーに問題を引き起こす可能性があることです。

では、ほとんどすべての場合、これはで固定することができます応答をコードするHTML例外はありますが、。たとえば、これは<script>タグ内のコンテンツに対して安全ではありません。他の特定のケースは別の方法で処理できます。たとえば、URLへの入力の挿入は、URLエンコードの方が適切です。

Kendall Hopkinsが述べたように、JSFiddleのようなアプリケーションの作成など、フォーム入力からJavaScriptを実際に実行したい場合がいくつかあります。そのような場合は、盲目的に書き戻す前に、少なくともバックエンドコードの入力をスクラブすることをお勧めします。その後、彼が言及した方法を使用してXSSのブロックを防ぐことができます(少なくともChromeでは)が、攻撃者にさらされていることに注意してください。


0

データベースにコミットした直後、_GETリクエストからスクリプトがレンダリングされる前に、このハッキーなPHPトリックを使用しました。

if(!empty($_POST['contains_script'])) { 
    echo "<script>document.location='template.php';</script>";
}

これは私にとって最も安価な解決策でした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.