2

銀行の古い .asp ページのいくつかで、クロス サイト スクリプティング (XSS) の修正を見つけるように言われました。

この件についていくつかの調査を行いましたが、問題に対する答えが見つかりませんでした。XSS について聞いたのは初めてで、ASP を見たのは初めてで (ページには HTML しかありませんが)、約 2 年間 Web デザインに携わっていないので、非常に錆びています。

たとえば、私はこのフォームを持っています

<form method="POST" id="CH" name="CH" action="http://some_url/some.asp">
<input type="hidden" name="srv" value="1" ID="srv"/>
<TABLE border="0" cellpadding="0" cellspacing="0" width="100%" align="center">
    <TR valign="top">
            <TR>
                <TD align="center">Input something here
                <input name="input_something" type="text" class="field-no-fit" maxlength="12" value="">
                </TD>
            </TR>
    </TR>
</TABLE>
</form>

URL(このフォームを含む)を次のように手動で入力した場合

http://this_url/this.asp?1=%22%3E%3Cscript%3Ealert%28HelloWorld%29%3C/script%3E%3Cimg%20alt=%22%22%20src=%22

ページが読み込まれ、javascript アラートがスローされ、エラー画像が表示されます。

私の目標は、ページを開くときにスクリプトが実行されないようにすることです。Server.HTMLEncode について読みましたが、それを使用してページの読み込み時にスクリプトが実行されないようにする方法が見つかりません。

前もって感謝します!

編集:入力の値を「<%= Server.HTMLEncode(Request("input_something"))%>」に置き換えると、少なくとも部分的に回避できますか?

現在、IE6にアクセスできず、他のすべてのブラウザー(IE> 6バージョンを含む)がエラーを回避するため、テストできません(セキュリティタブでXSSフィルターをすでに無効にしていますが、機能しません)

4

2 に答える 2

3

私はそれがブラウザとは何の関係もないと思いますか?

次のように、クエリ文字列パラメーターのコンテンツをページに直接記述します。

<%=Request.QueryString("1")%>

それは悪いです。

使用する必要があることがすでにわかっているように

server.htmlencode( Request.QueryString("1") )

ユーザー入力をページに直接書き込むページのどこでも。

それはトリックを行う必要があります

こちらもご覧ください

于 2012-12-12T10:55:16.610 に答える
0

(ASPについてはよくわかりません)ASPリクエストの検証を有効にすると、簡単に修正できる場合があります。他の動作の変更と同様に、他のページで多くのことが壊れることがあります(これは驚くべきことですが)。そのため、最初に変更をテストしてください。http://msdn.microsoft.com/en-us/library/bb355989.aspxのステップ1を参照してください

サーバーは、非表示の「srv」入力を含むページ上のすべてのタグをURLパラメーターから入力し、HTMLタグをフィルタリングせずに、ページに貼り付けます。このフォームを制限して、GETメソッドではなくPOSTのみに応答するようにすると、攻撃例は機能しなくなります。これはおそらく最も簡単で最も無害な修正です。

最後に、HTTPOnlyへのセッションを追跡するために使用されるCookieにCookie属性を設定できるかどうかを確認します。

使用できるすべての可能な対策についての非常に長い記事は、http://msdn.microsoft.com/en-us/library/ms998274.aspxにあります。

于 2012-12-08T03:57:59.410 に答える