8

まず第一に、これは多かれ少なかれ、2012 年 6 月 12 日以降、私の Web サイトで要求された URL の 1% にランダムに追加された「未定義」と同じ問題だと思いますが、私は新しいユーザーであり、この投稿にコメントすることはできません。まだ解決策がないので、新しい質問しかできません。

2012 年 6 月 12 日 14:22 EET (最初のエラーが発生した瞬間) 以来、非常に奇妙な問題が発生しています。サイトへのリクエストの 1% 未満で、末尾に「未定義」文字列が追加されているか、有効な部分が置き換えられています。 URL とリファラーは、サイトへの完全に有効な URL です。たとえば、リファラーhttp://example.com/foo/barでhttp://example.com/foo/undefinedのリクエストを取得する か、リファラーhttp://exampleでhttp://example.com/undefinedへのリクエストを取得します。 .com/(ホームページ)。これらの URL はさまざまなクライアント IP アドレス、さまざまな ISP から取得され、ブラウザはほとんどの場合 Chrome ですが、IE や Firefox 3.5 でも発生します。元の URL をリファラー タグに保持したまま、何かが URL を無効なものに書き換えているようです。この問題は再現できません。

ソース投稿のコメントに記載されている別の問題も発生しています。http://example.com/cache/xxx という形式の URL リクエストを受信して​​います ここで、xxx は 32 文字の MD5 文字列のように見えます (例: 3d453e96e68cc01ced7920ae77356078 または bbc80a4244caf556fdcaa9fb60231af7)。有効な URL のいずれにも「キャッシュ」文字列がありません。1 つの同じ xxx 文字列が、数日、場合によっては数週間、さまざまな IP から送信される場合があります。これらの奇妙なリクエストはすべて、Chrome ブラウザから送信されます。この問題は 2012 年 6 月 12 日に発生したものではありません。少なくとも年の初めから発生していますが、最初のものよりもはるかにまれです。この問題も再現できません。

私たちの Web サイトは IIS 上にあり、クライアント側は Javascript ベースであり、Prototype フレームワーク (jquery ではありません) を使用しています。

4

6 に答える 6

6

回答の要約

エラーが発生し、その場所がわからない場合は、コードをデバッグして、エラーのスターターである可能性のあるステートメントを探す必要があります。現在、この作業に役立つ優れたツールがいくつかあります。

仮定

  1. 画像の場所を設定または変更するために JavaScript が使用されている場合、undefinedが URI に入り込むことがあります。

  2. http リクエストを作成する JavaScript であり、バグにより、絶対 URL をリクエストする代わりに「未定義」をリクエストしています。

結論:この問題は JS が原因だと思います。

Firefox および Chrome でのデバッグ

インストールと実行

  • Firefox で試す場合は、FIREBUG ADDONをダウンロードする必要があります。次に F12 を押すと、いくつかのタブを含むウィンドウが表示されます。「コンソール」、「スクリプト」、「ネット」など、いくつかのタブを有効にする必要があります。それらを開き、パネルの情報を読み、アクティブ化リンクをクリックすると、アクティベーションが提供されます。

  • Chrome の場合は、 CHROME'S DEVELOPERS TOOLが既にインストールされているかどうかを確認してください。次に F12 を押します。

デバッグ

  • Firefox で、Firebug を開き、Net パネルをアクティブにして、バグのある 1 つのページに移動します。Net パネルには、「Clear」、「Persist」、「All」、「Html」などのいくつかのオプションがあります。すべてのオプションが選択されていることを確認してください。ページ上で何もしないでください。マウスをその上に置かないようにしてください。GET および POST 要求に目を通します。無効な URL のリクエストは、おそらく赤く表示され、404 Not Found などのステータスになります。[すべて] タブに何も表示されない場合は、ページに入る前に Firebug が開いていることを確認してください。トラブルシューティングを行うには、ページを更新してセクションをやり直してください。

  • Chrome で、CDT (Chrome 開発者ツールの略) を開き、[ネットワーク] パネルを選択して、バグのある 1 つのページに移動します。Firebug として、オプションALLが選択されていることを確認してください。アイコンの後に左下隅に表示されます。ページ上で何もしないでください。マウスをその上に置かないようにしてください。無効な URL のリクエストは、おそらく赤く表示され、404 Not Found などのステータスになります。[ネットワーク] タブに何も表示されない場合は、ページに入る前に CDT を開いていることを確認してください。トラブルシューティングを行うには、ページを更新してセクションをやり直してください。

まだ見えない

  • どちらの場合も、ホバー、クリックなどの Javascript イベントのトリガーを開始し、パネルから目を離さないでください。良いものも悪いものも含め、すべてのリクエストを追跡します。悪い要求に集中してください。悪い要求が出てこない場合は、創造性が必要になります。イベントはリクエストをトリガーし、それらを見ることができます。それらを見ることで、問題とおそらくその問題の理由を知り、発見することができます。その他のリソースについては、CDT NetworkおよびFirebug Netを参照してください。

PS.: パネルが汚れた場合は、クリア ボタンまたはアイコンをクリックして、パネルからの要求を消去します。

  • ページを送信して、失敗したリクエストがすぐに出て、次のページが読み込まれるために失われる場合は、Net パネルの左上またはネットワークパネルの左下隅。それが実現したら、それを実現するために何をしたかを検討してください。もう一度実現できるかどうかを確認してください。ユーザー インタラクションがどのようなものかを把握したら、そのコードに飛び込んで、無効なリクエストを行っているものを探し始め、リクエスト ヘッダーを確認することを決して忘れないでください。[スクリプト] タブを使用して、JavaScript にブレークポイントを設定し、それらをステップ実行できます。$(elemment).bind/click/focus/etc または onclick=""/onfocus="" などの古い学校のイベント属性から実行されるイベント ハンドラーを調査します。

  • 悪いリクエストをトリガーできない場合、それを引き起こしているものはテストによってトリガーされていません。より多くのものを使用してみてください。ポイントは、何らかの形でリクエストを実現できる必要があるということです。あなたはまだ知らないだけです。ネットパネルに表示される必要があります。そうでないのは、それを引き起こすものを何もしていないときだけです。

あなたのコードで私たちが探しているもの

var url = workingUrl + someObject['someProperty'];

var url = workingUrl + someObject.someProperty;

var url = workingUrl + $.md5("message"); //For the /cache/ problem. JQuery Plugin

var url = workingUrl + hex_md5("message"); //For the /cache/ problem. MD5 Implementation

<a href= "javascript:;" class="small_img" >
  //Code here
</a>

window.open('/image.?url_image=' + currentImage,winName,features);

PS .: someObject は、 object {}、 array []、または内部ブラウ​​ザー タイプのいずれかである可能性があります。ポイントは、存在しないプロパティにアクセスすることです。

結論:正確に何が起こっているのかを知るための無料のランチはありません。ただし、デバッグのメソッドを使用すると、問題を発見、接近、または理解できるはずです。

于 2012-07-25T15:12:45.077 に答える
4

単なるブラウザ/プラットフォームのバグである場合はどうなりますか?

Drupal 7 Web サイトで /undefined 404 が表示され、特定のコンテンツを提供するために Drupal に接続されたプレーンなバニラ HTML+CSS (JS はまったくない) ミニサイトでも表示されます。

ほとんどの場合、Chrome/Safari の問題のようで、Mozilla/4.0 (互換性あり; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)

クイック ログ検索から、Firefox では決して発生しません。

/undefined リクエストは、CSS と画像がリクエストされた後、ページ レンダリングの最後に送信されます。そして、ほぼ同じで、最初のページのレイアウト、CSS、および画像を再利用する 2 番目のページでは ** 発生しません **。

私の2セント...

于 2012-11-29T16:51:10.550 に答える
4

与えられた状況から私が推測できることは、Web サイトは Javascript ベースが多いため、多くの ajax 呼び出しが行われているということです。そして、これらはJavascriptコードで生成された未定義のパラメーターを持つajaxリクエストであると想定する可能性が高くなります。

デバッグ目的で (開発モードで) ajax リクエストを行う前に ajax URL を検証する必要があります。未定義の URL が見つかった場合はいつでもそれをダミー ページに転送し、できるだけ多くの詳細を取得してください。

これは主に、1 つの非同期要求が他の非同期要求に依存している場合に発生します。コードや例を見ずに何かを提案するのは非常に難しいですが、アプリケーションにデバッグ機能を追加し、より多くの詳細を取得することで問題を特定できることを願っています.

どこかで、それは大したことではなく、重い JavaScript アプリのどこかで、見落としたり、見過ごされたりしているだけだと感じます。

ここstackoverflowがお手伝いできるように、さらに詳細を投稿してください。

于 2012-07-16T09:29:18.860 に答える
3

この投稿に基づいて、「Complitly」Chrome プラグイン/マルウェアをリバース エンジニアリングしたところ、この拡張機能が「改善されたオートコンプリート」機能を挿入し、NAME または"search"、"q" などの ID。

また、enable.js ファイル (コンパイル済みファイルの 1 つ) が "suggestmeyes_loaded" というグローバル変数をチェックして、既にロードされているかどうかを確認していることもわかりました (Singleton のように)。したがって、この変数を true に設定すると、プラグインが無効になります。

TL:DR;

マルウェアを無効にして「未定義」のリクエストを停止するには、サイトの検索フィールドを持つすべてのページにこれを適用します。

<script type="text/javascript">
    window.suggestmeyes_loaded = true;
</script>

このマルウェアは、ユーザーを「searchcompletion.com」サイトにリダイレクトし、競合他社の ADS を表示することもあります。したがって、それは真剣に受け止められるべきです。

于 2013-01-10T17:28:38.813 に答える
2

おそらく、cache/xxxリクエストは chrome/chromium 拡張機能のバグです (まだ修正されていません):

http://code.google.com/p/chromium/issues/detail?id=132059

于 2012-12-29T19:44:01.970 に答える
1

使用している可能性のあるサードパーティのコード(ライブラリ、フレームワーク、またはGoogle Analyticsなどの外部JSファイルなど)のようです。

よりカラフルな代替手段は、攻撃者によって使用され、時にはこれらのURLを生成するサイトのインジェクションの脆弱性です。この挿入されたコードもサードパーティのコードとしてカウントされると思います。

于 2012-07-16T09:54:48.370 に答える