Firefox、Chrome、Safari ブラウザをクラッシュさせる可能性がある 12 行の JavaScript コードがあり、iPhone の再起動や Android のクラッシュも引き起こす可能性があります。この記事の著者は、これらの 12 行のコードを分析および解釈し、対応するコードを提案しました。この方法について議論することを歓迎します。これらの 12 行の JS コードに関する記事は次のとおりです。これらの 12 行のコードはどのようにしてブラウザを爆発させますか?
Ajax は「Asynchronous Javascript And XML」(非同期 JavaScript と XML) で、高速で動的な Web ページを作成するために使用されるテクノロジです。 Ajax を使用すると、バックグラウンドでサーバーと少量のデータを交換することで、Web ページを非同期に更新できます。これは、Web ページ全体を再読み込みしなくても、Web ページの一部を更新できることを意味します。
ただし、Ajax アプリケーションは他の問題も引き起こす可能性があり、ブラウザーが前後に移動できなくなる可能性があり、これは非常に厄介な問題であり、開発者は (非表示の iframe を使用したり、変更したりするなど) 作業負荷を増加させる必要があります。 location.ハッシュ値などのメソッド)を解決します。
従来の Ajax によって引き起こされる問題を解決するために、HTML5 に新しい API であるhistory.pushState が導入されました。Ajax と結合された後、pjax という新しい名前が付けられました。 Ajax+history.pushStateをベースとした新しい技術で、更新せずにページの内容を変更したり、ページのURLを変更したりすることができます。 pjax は Ajax+pushState をカプセル化したもので、ローカル ストレージやアニメーションなどの複数の機能をサポートします。現在、jquery、qwrap、kissy およびその他のバージョンをサポートしています。
HTML5 は、pushState インターフェイスと replaceState インターフェイスを通じてブラウザ履歴を操作し、現在のページの URL を変更できます。
pushState は、指定された URL をブラウザ履歴に追加し、現在の履歴ポイントを保存します。 replaceState は、現在の URL を指定された URL に置き換えます。同時に、これらのメソッドは window.onpostate イベントでも機能します。
history.pushState(data, title, url): 履歴スタックの先頭にレコードを追加します。onpopstate イベントがトリガーされると、データがパラメーターとして渡されます。現在のすべてのブラウザーは通常、無視します。このパラメータは、ページ アドレスです(オプション)。デフォルトは現在のページ アドレスです。具体的な詳細:
state: オブジェクトは JavaScript 状態オブジェクトであり、履歴ポイントを記録する追加オブジェクトであり、空にすることもできます。これは、pushState() メソッドによって作成された新しい履歴エンティティに関連しています。履歴に挿入するエントリに関する情報を保存するために使用されます。
title: 将来的に使用される可能性がありますが、通常、すべてのブラウザーはこのパラメーターを無視します。現時点でこれを使用する最も安全な方法は、将来の変更を防ぐために空の文字列を渡すことです。または、状態を表す短いタイトルを渡すこともできます。
URL: このパラメーターは、新しい履歴エンティティの URL を渡すために使用されます。新しい URL は既存の URL と同じドメイン内にある必要があります。そうでない場合、pushState() は例外をスローします。このパラメータはオプションです。空白のままにすると、ドキュメントの現在の URL に設定されます。
上の図は、URL 合計のループです。history.pushState(0,0,total); これは URL を変更し続け、1,000,000 回ループします。履歴スタックにレコードを継続的に追加すると、CPU とメモリの使用率が高くなり、Firefox、Chrome、Safari ブラウザがクラッシュしたり、iPhone が再起動したりする可能性があります。
XP仮想マシン(i7シングルコア3.4G、512メモリ)での個人測定:
上記のサイクル数が100,000を超えると、CPUとメモリの使用率は即座に100%になり、その後クラッシュしてフリーズします。
上記のループ数が約 10,000 に減少すると、CPU とメモリの使用量が約 20 秒で 100% まで徐々に増加し、その後クラッシュしてフリーズします。 500 程度になると CPU 使用率が徐々に増加して 100% に達し、192.168.56.106/12.html のページを開くとメモリ使用量が約 130M から約 230M に増加します。 、列内のアドレスも次のように変更されました: 192.168.56.106/0123456789101112131415161718192021...494495496497498499
ループを通じて履歴スタックに新しいレコードを追加する際に、ページが更新されることがわかります。のジャンプの新しいアドレス。これはループ内に蓄積される「疑似アドレス」です。この長さが制限を超えると、攻撃の効果と効率はループの数とターゲットのハードウェア構成に完全に依存します。
皆さんのセキュリティ意識はすでに非常に高いと思いますが、それでも、見知らぬ人から送られてくるリンク、添付ファイル、電子メール、写真などを決して信用しないように警鐘を鳴らす必要があります。もちろん、そうではありません。ゲイや悪友のいたずらは排除しました。頻繁に Ctrl+S を覚えておいてください。そうしないと、行き詰まった場合に非常に落ち込むことになります。
インターネットは誕生以来、ハッカーの攻撃にさらされてきました。初期のハッカーの攻撃は、多かれ少なかれ技術的な実験や誇示を目的としていたものでしたが、世界的なインターネット インフラストラクチャの成長に伴い、接続は無制限に増加しました。ユーザー数の急速な拡大に伴い、ハッカー攻撃の頻度も増加し、ハッカー技術も発展を続け、経済的利益を不法に得ることを目的としたブラック産業チェーンが徐々に出現しました。インターネットのセキュリティ保護の技術レベルは飛躍的に進歩しており、このインターネット時代では攻撃と防御が毎分起こっています。
もちろん、インターネットは情報セキュリティの脅威に満ちています。これらの問題から保護するには、ネットワーク セキュリティの向上にのみ依存するだけでは十分ではありません。無視することが不可欠です。
例: 個人のパスワードの管理に注意する、個人のプライバシーの保護に注意する、公共の Wi-Fi に簡単にアクセスしない、見知らぬ/よく知っている友人からのリンクやファイルを簡単に信頼しない、など。モバイル決済のセキュリティ、デバイスの「ストリーキング」などを待機させないでください。
以上が12行のJSコードのDoS攻撃解析と防御を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。