5

Web アプリケーションを Acunetix でスキャンした結果、「リダイレクト ページに HTML フォームが見つかりました」という 9 つのインスタンスが表示されました。テスト攻撃を再現するための HTTP ヘッダーは次のとおりです。

Request
GET /entities/add HTTP/1.1
Pragma: no-cache
Referer: https://test.mysite.com/entities/view
Acunetix-Aspect: enabled
Acunetix-Aspect-Password: 082119f75623eb7abd7bf357698ff66c
Acunetix-Aspect-Queries: filelist;aspectalerts
Cookie: __AntiXsrfToken=97c0a6bb164d4121b07327df405f9db4; mysitecookie=
Host: test.mysite.com
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Acunetix-Product: WVS/8.0 (Acunetix Web Vulnerability Scanner - NORMAL)
Acunetix-Scanning-agreement: Third Party Scanning PROHIBITED
Acunetix-User-agreement: http://www.acunetix.com/wvs/disc.htm
Accept: */*

Response
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: /login
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Set-Cookie: mysitecookie=; expires=Mon, 11-Oct-1999 22:00:00 GMT; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Tue, 24 Sep 2013 10:38:12 GMT
Content-Length: 9447

応答のLocation: /login一部から、ユーザーをログイン ページにリダイレクトした後に応答を終了すると、脆弱性がプラグインされるのではないかと思いました。したがって、このコードのすべてのインスタンスを変更しました。

protected void Page_Load(object sender, EventArgs e)
{
    if (!HttpContext.Current.User.Identity.IsAuthenticated)
    {
        Response.Redirect("/login");
    }
    else
    {
        // etc
    }
}

に:

protected void Page_Load(object sender, EventArgs e)
{
    if (!HttpContext.Current.User.Identity.IsAuthenticated)
    {
        Response.Redirect("/login", true);
    }
    else
    {
        // etc
    }
}

まだ脆弱であると表示されている理由は何ですか?

4

3 に答える 3

0

Response.Redirectクライアントに追加の往復を送信します (応答コード 302)。つまり、クライアントは「新しい」URL を呼び出す必要があります。これは通常、やりたくないことです。

.Net では、サーバー上で直接リダイレクトを行うこともできます。つまり、追加のラウンドトリップは必要ありません。

Response.RedirectServer.Transfer またはServer.TransferRequest(これは、統合されたアプリケーション プールを必要とする新しいメソッドです)を呼び出す代わりに。

http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.transferrequest.aspx

ifがコンテキストで使用できない場合は、 inServerのインスタンスも見つかります。HttpServerUtilityHttpContext.Current

于 2013-09-24T14:20:48.020 に答える