82

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

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

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

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

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

4

5 に答える 5

132

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

X-XSS-Protection: 0
于 2012-03-02T19:59:20.783 に答える
68

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

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

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

于 2009-10-10T13:03:28.733 に答える
15

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

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

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

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

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

于 2012-10-16T22:42:38.207 に答える
1

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

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

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

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

于 2015-07-07T02:16:10.730 に答える
0

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

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

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

于 2013-02-07T23:33:49.760 に答える