1

URL認証を使用してasp.net2.0を実行しているWebサイトがあります。保護されたファイルにアクセスするには、ユーザーがログインする必要があるWebサイトの保護された領域があります。System.Net.WebClientオブジェクトを使用して同じことを行い、保護された領域にファイルをダウンロードすることは可能ですか?

保護されたファイル、リソース、ページなどへのURLを手動で入力しようとすると、ログインページに転送されます。以下のコードを実行するたびに、「protectedFile.zip」内のログインページのhtmlも取得します。

public void test()
{
        try
        {
            using (var client = new CookieAwareWebClient())
            {
                //Not sure which name values to include, so I used what was in the post output in Firefox's firebug.
                var values = new NameValueCollection
            {
                { "ctl00$ContentPlaceHolder1$Login1$UserName", "testUsername" },
                { "ctl00$ContentPlaceHolder1$Login1$Password", "testPassword" }
            };
                retValue = client.UploadValues("www.test.com/login.aspx", values);
                //retValue contains the login page?
                Console.WriteLine(ASCIIEncoding.ASCII.GetString(retValue));
                // If the previous call succeeded we now have a valid authentication cookie??
                client.DownloadFile("www.test.com/protected/protectedFile.zip", "protectedFile.zip");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
            Console.WriteLine(ASCIIEncoding.ASCII.GetString(retValue));
        }
}

public class CookieAwareWebClient : WebClient
{
    public CookieAwareWebClient()
    {
        CookieContainer = new CookieContainer();
    }
    public CookieContainer CookieContainer { get; private set; }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = (HttpWebRequest)base.GetWebRequest(address);
        request.CookieContainer = CookieContainer;
        return request;
    }
}

私は以下の関連する質問を見てきましたが、どれも私が理解できる最終的な解決策を持っていません。

asp.net保護されたサーバーからファイルをダウンロードする

WebClientリクエストを認証するにはどうすればよいですか?

C#WebClientWebサイトにログオンします

クレデンシャルを使用してページにアクセスするWebClient

WebClientでasp.netWebサイトにログインできません

どんな助けでもいただければ幸いです!

4

1 に答える 1

1

ASP.Net Web Forms を「スプーフィング」しようとするとPostback、それを妨げる問題が発生します。あなたは対処しなければなりませVIEWSTATEEVENTVALIDATION

__EVENTVALIDATION 隠しフィールドは、ASP.NET 2.0 の新しいセキュリティ対策です。この機能は、潜在的に悪意のあるユーザーがクライアントから送信する不正な要求を防ぎます。すべてのポストバック イベントとコールバック イベントが想定されるユーザー インターフェース要素から発生していることを確認するために、このページではイベントに追加の検証レイヤーが追加されています。

于 2012-12-20T19:08:56.633 に答える