html injection tutorial
HTMLインジェクションの詳細:
HTMLインジェクションをよりよく理解するには、まずHTMLとは何かを知る必要があります。
テスト面接の質問でソフトウェア開発エンジニア
HTMLはマークアップ言語であり、ウェブサイトのすべての要素がタグに記述されています。それは主にウェブサイトを作成するために使用されています。 WebページはHTMLドキュメントの形式でブラウザに送信されています。次に、それらのHTMLドキュメントは通常のWebサイトに変換され、最終ユーザーに表示されます。
このチュートリアルでは、HTMLインジェクション、そのタイプ、および予防策の完全な概要と、概念を簡単に理解できるように簡単な用語で実際の例を示します。
学習内容:
- HTMLインジェクションとは何ですか?
- HTMLインジェクションの種類
- HTMLインジェクションはどのように実行されますか?
- HTMLインジェクションに対してテストする方法は?
- HTMLインジェクションを防ぐ方法は?
- 他の攻撃との比較
- 結論
- 推奨読書
HTMLインジェクションとは何ですか?
このタイプのインジェクション攻撃の本質は、Webサイトの脆弱な部分を介してHTMLコードをインジェクションすることです。悪意のあるユーザーは、ユーザーに表示されるWebサイトのデザインや情報を変更する目的で、脆弱なフィールドを介してHTMLコードを送信します。
その結果、悪意のあるユーザーによって送信されたデータがユーザーに表示される可能性があります。したがって、一般に、HTMLインジェクションは、ページのドキュメントへのマークアップ言語コードのインジェクションにすぎません。
このタイプのインジェクション攻撃中に送信されるデータは、大きく異なる可能性があります。送信された情報を表示するだけのいくつかのHTMLタグにすることができます。また、偽のフォームまたはページ全体にすることもできます。この攻撃が発生すると、ブラウザは通常、悪意のあるユーザーデータを正当なものとして解釈して表示します。
この種の攻撃がもたらすリスクは、Webサイトの外観を変更することだけではありません。これは、悪意のあるユーザーが他の人のIDを盗むXSS攻撃と非常によく似ています。したがって、このインジェクション攻撃中に他人の身元を盗むことも発生する可能性があります。
HTMLインジェクションの種類
HTMLは非常に単純な言語と見なされているため、この攻撃を理解したり実行したりするのはそれほど難しいことではないようです。ただし、このタイプの攻撃を実行するにはさまざまな方法があります。この注射のさまざまなタイプを区別することもできます。
まず、さまざまなタイプが、それらがもたらすリスクによって分類される場合があります。
前述のように、このインジェクション攻撃は2つの異なる目的で実行できます。
- 表示されるWebサイトの外観を変更します。
- 他人の身元を盗むこと。
また、このインジェクション攻撃は、Webサイトのさまざまな部分、つまりデータ入力フィールドとWebサイトのリンクを介して実行できます。
ただし、主なタイプは次のとおりです。
- 保存されたHTMLインジェクション
- 反映されたHTMLインジェクション
#1)保存されたHTMLインジェクション:
これら2つのインジェクションタイプの主な違いは、悪意のあるHTMLコードがWebサーバーに保存され、ユーザーが適切な機能を呼び出すたびに実行されるときに、ストアインジェクション攻撃が発生することです。
ただし、リフレクトインジェクション攻撃の場合、悪意のあるHTMLコードがWebサーバーに永続的に保存されているわけではありません。リフレクトインジェクションは、Webサイトが悪意のある入力に即座に応答したときに発生します。
#2)反映されたHTMLインジェクション:
これもまた、より多くのタイプに分けることができます。
- 反映されたGET
- 反映されたPOST
- 反映されたURL
リフレクトインジェクション攻撃は、HTTPメソッド(GETとPOST)に応じて異なる方法で実行できます。 POSTメソッドではデータが送信され、GETメソッドではデータが要求されていることを思い出してください。
適切なウェブサイトの要素にどの方法が使用されているかを知るために、ページのソースを確認できます。
例えば 、 テスターは、ログインフォームのソースコードをチェックして、どのメソッドが使用されているかを見つけることができます。次に、適切なHTMLインジェクション方法を適宜選択できます。
反映されたGETインジェクション 私たちの入力がウェブサイトに表示(反映)されているときに発生します。この攻撃に対して脆弱な検索フォームを備えた単純なページがあるとします。次に、HTMLコードを入力すると、そのコードがWebサイトに表示されると同時に、HTMLドキュメントに挿入されます。
たとえば、HTMLタグを使用して単純なテキストを入力します。
反映されたPOSTHTMLインジェクション もう少し難しいです。これは、正しいPOSTメソッドパラメーターの代わりに悪意のあるHTMLコードが送信されている場合に発生します。
例えば 、 HTML攻撃に対して脆弱なログインフォームがあります。ログインフォームに入力されたデータは、POSTメソッドで送信されています。次に、正しいパラメーターの代わりにHTMLコードを入力すると、POSTメソッドで送信され、Webサイトに表示されます。
リフレクトPOSTHTML攻撃を実行するには、送信されたデータを偽造する特別なブラウザのプラグインを使用することをお勧めします。その1つがMozillaFirefoxプラグイン「TamperData」です。プラグインは送信されたデータを引き継ぎ、ユーザーがそれを変更できるようにします。その後、変更されたデータが送信され、Webサイトに表示されます。
例えば、 このようなプラグインを使用すると、同じHTMLコードが送信されます または、より複雑なものでテストしたい場合は、フォームコードを検索します 検索するテキストを入力します
どこかに保存されているHTMLコードが表示されている場合、テスターはこのインジェクション攻撃が可能であると確信できます。次に、より複雑なコードを試すことができます– 例 、偽のログインフォームを表示します。
別の解決策は、HTMLインジェクションスキャナーです。この攻撃に対して自動的にスキャンすると、時間を大幅に節約できます。他の攻撃と比較して、HTMLインジェクションテスト用のツールは多くないことをお知らせします。
ただし、考えられる解決策の1つはWASアプリケーションです。 WASは、最初の失敗で停止するだけでなく、さまざまな入力でテストするため、非常に強力な脆弱性スキャナーと名付けることができます。
上記のブラウザプラグイン「改ざんデータ」で述べたように、テストに役立ちます。送信されたデータを取得し、テスターがデータを変更してブラウザに送信できるようにします。
また、Webサイトのリンクを提供するだけで、HTML攻撃に対するスキャンが実行されるオンラインスキャンツールもいくつかあります。テストが完了すると、概要が表示されます。
スキャンツールを選択するときは、それが結果をどのように分析するか、そしてそれが十分に正確であるかどうかに注意を払う必要があることをコメントしたいと思います。
ただし、手動でのテストを忘れてはならないことに注意してください。このようにして、どの正確な入力が試行され、どのような正確な結果が得られているかを確認できます。また、この方法では、結果の分析も簡単になります。
ソフトウェアテストのキャリアでの私の経験から、両方のテスト方法について、このタイプの注入について十分な知識が必要であるとコメントしたいと思います。そうしないと、適切な自動化ツールを選択してその結果を分析することが困難になります。また、品質をより確実にするために、手動でテストすることを忘れないことを常にお勧めします。
HTMLインジェクションを防ぐ方法は?
この攻撃の主な理由は、開発者の不注意と知識の欠如にあることは間違いありません。このタイプのインジェクション攻撃は、入力と出力が適切に検証されていない場合に発生します。したがって、HTML攻撃を防ぐための主なルールは、適切なデータ検証です。
すべての入力にスクリプトコードまたはHTMLコードが含まれているかどうかを確認する必要があります。通常、コードに特別なスクリプトまたはHTMLブラケットが含まれているかどうかがチェックされます– 、。
コードに特別な角かっこが含まれているかどうかを確認するための関数はたくさんあります。チェック機能の選択は、使用しているプログラミング言語によって異なります。
覚えておくべきです セキュリティテスト 予防の一部でもあります。 HTMLインジェクション攻撃は非常にまれであるため、それについて学ぶための文献が少なく、自動テスト用に選択するスキャナーが少ないことに注意したいと思います。ただし、セキュリティテストのこの部分は、いつ発生するかわからないため、見逃してはなりません。
また、開発者とテスターの両方が、この攻撃がどのように実行されているかについて十分な知識を持っている必要があります。この攻撃プロセスをよく理解すると、それを防ぐのに役立つ場合があります。
他の攻撃との比較
他の可能な攻撃と比較して、この攻撃は間違いなくそれほど危険であるとは見なされません。 SQLインジェクション または JavaScriptインジェクション攻撃 またはXSSでさえあるかもしれません。データベース全体を破壊したり、データベースからすべてのデータを盗んだりすることはありません。ただし、それは重要ではないと見なされるべきではありません。
前述のように、このタイプのインジェクションの主な目的は、表示されるWebサイトの外観を悪意のある目的で変更し、送信された情報またはデータを最終ユーザーに表示することです。これらのリスクはそれほど重要ではないと見なされる場合があります。
ただし、Webサイトの外観を変更すると、会社の評判が低下する可能性があります。悪意のあるユーザーがあなたのウェブサイトの外観を破壊する場合、それはあなたの会社についての訪問者の意見を変えるかもしれません。
このWebサイトへの攻撃がもたらす別のリスクは、他のユーザーのIDを盗むことであることに注意してください。
前述のように、HTMLインジェクションでは、悪意のあるユーザーがページ全体をインジェクションし、最終ユーザーに表示される可能性があります。次に、最終ユーザーが偽のログインページで自分のログインデータを示すと、悪意のあるユーザーに送信されます。もちろん、このケースはこの攻撃のより危険な部分です。
他のユーザーのデータを盗むために、他の可能性のある攻撃がたくさんあるため、このタイプの攻撃が選択される頻度は低いことに注意してください。
ただし、これは、ユーザーのCookieや他のユーザーのIDを盗むXSS攻撃と非常によく似ています。 HTMLベースのXSS攻撃もあります。したがって、XSS攻撃とHTML攻撃に対するテストは非常に似ており、一緒に実行される可能性があります。
結論
HTMLインジェクションは他の攻撃ほど一般的ではないため、他の攻撃よりもリスクが低いと見なされる可能性があります。したがって、このタイプの注射に対するテストはスキップされることがあります。
また、HTMLインジェクションに関する文献や情報が確実に少ないことも注目に値します。したがって、テスターはこのタイプのテストを実行しないことを決定する場合があります。ただし、この場合、HTML攻撃のリスクは十分に評価されていない可能性があります。
このチュートリアルで分析したように、このタイプのインジェクションでは、Webサイトのデザイン全体が破壊されたり、ユーザーのログインデータが盗まれたりする可能性があります。したがって、セキュリティテストにHTMLインジェクションを含め、十分な知識を投資することを強くお勧めします。
典型的なHTMLインジェクションに出くわしたことがありますか?以下のコメントセクションであなたの経験を自由に共有してください。