2017-08-09 24 views
1

WebResponseHTTPWebRequestから取得する際にここに貼り付けられています。C#WebRequest - HTTP:403禁止( '_xsrf'引数がPOSTにありません)

WebRequest.GetResponse()メソッドはWebExceptionをスローする ("500 Internal Server Error")です。私は返されたHTMLを読んだとき、それは言う:

HTTP 403:禁断(POSTから欠落して '_xsrf' 引数)

誰もがこのエラーを知っているか、Imが間違っている知っていますか?

(ImはPOSTを使用してWebサイトにログインしようとしている)

EDIT: 私のソースコード:Webメソッドは、抗CSRF(クロスサイトリクエストフォージェリを必要とするため

 private String GetLoginCookies(String pHTTPurl, String pUserIDwithFormID, String pPasswordWithFormID) 
    { 
    String loginPageUrl = pHTTPurl; 
    CookieContainer cookieContainer = new CookieContainer(); 
    var Request = (HttpWebRequest)WebRequest.Create(loginPageUrl); 
    Request.CookieContainer = cookieContainer; 
    Request.Method = "GET"; 

    WebResponse Response = Request.GetResponse(); 

    HttpWebResponse HttpResponse = Response as HttpWebResponse; 

    CookieCollection cookies = null; 
    if (HttpResponse != null) 
    { 
     //Cookies die benötigt werden um den Loginvorgang abzuschließen 
     cookies = HttpResponse.Cookies; 
    } 

    string formParams = string.Format(pUserIDwithFormID + "&" + pPasswordWithFormID); 


    Request = (HttpWebRequest)WebRequest.Create(loginPageUrl); 
    Request.CookieContainer = cookieContainer; 
    Request.UserAgent = "I am not a Bot! Ok maybe.."; 
    WebResponse resp = null; 
    Request.ContentType = "application/x-www-form-urlencoded"; 
    Request.Method = "POST"; 
    byte[] bytes = Encoding.ASCII.GetBytes(formParams); 
    Request.ContentLength = bytes.Length; 
    using (Stream os = Request.GetRequestStream()) 
    { 
     os.Write(bytes, 0, bytes.Length); 
    } 
    try 
    { 
     resp = Request.GetResponse(); 
     using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
     { 
      String TestResponse = sr.ReadToEnd(); 
     } 
    } 
    catch (WebException WE) 
    { 
     DebugConsole.AppendText("HTTP Error:" + WE.Message + Environment.NewLine); 
     String HTML = new StreamReader(WE.Response.GetResponseStream()).ReadToEnd(); 
     DebugConsole.AppendText(HTML); 
     return null; 
    } 
    String cookieHeader = resp.Headers["Set-cookie"]; 
    if (String.IsNullOrEmpty(cookieHeader)) 
     return null; 
    else 
     return cookieHeader; 
    } 
+0

それは言うとおりです。これはさらに助けになるかもしれません:https://stackoverflow.com/questions/42408177/what-is-the-difference-between-x-xsrf-token-and-x-csrf-token – Orangesandlemons

答えて

2

これは、実際にあります、more info here:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF))検証パラメータ。あなたは何ができるか、リクエストヘッダにCSRFの値を追加することです:

postHeaders.Add("X-CSRFToken", CSRF); 

たぶん、あなたはそれで任意の助けが必要な場合は、ここではあなたのソースコードを貼り付けることができますので、我々はそれの後に

0

を見ることができますOK !ソリューションが見つかりました!

ログインサイトの応答が得られたら、"Set-cookie"ヘッダーで_xsrfを検索してください。これは、次のPOSTリクエストのヘッダに入れなければならないトークンです。

+0

excatly !!申し訳ありませんが、私はあなたに戻っていない、オンラインではなかった。私の答えがあなたを助けたら、あなたは答えとしてそれをマッチさせることができます:) –

+0

問題ありません。ご協力ありがとうございました! – BMS

関連する問題