2016-10-05 4 views
0

私はcsrftoken検証が必要なアプリを開発中です。私は各リクエストでクッキーを受け取り、リクエストごとにクッキーをもう一度返します。 csrf検証が必要なリクエストは以下のとおりです。私はcsrfをヘッダとクッキーにlocalcontextを使って送ります。しかし、私はTypeerrorを取得しています。詳細エラーは以下のとおりです。ヘッダーにcsrftokenのみを送信しているときと同じですが、リクエストがあるCookieがないと、403forbidden csrf検証に失敗しました。タイプエラーアンドロイドでのcsrf検証のタイプエラー

public JSONArray getLinkFromUrl(String url, List<NameValuePair> param) throws IOException { 

    // Making HTTP request 
    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    Log.d("ADebugTag", "url: "+url); 
    Log.d("ADebugTag", "csrfToken: " + PrefManager.csrfToken); 
    Log.d("ADebugTag", "Domain: " + PrefManager.domain); 
    try { 
     HttpPost httpPost = new HttpPost(url); 
     httpPost.setEntity(new UrlEncodedFormEntity(param)); 
     // httpPost.setHeader("Referer", url); 
     httpPost.setHeader("X-CSRFToken", PrefManager.csrfToken); 
     final BasicCookieStore cookieStore = new BasicCookieStore(); 
     for (Cookie cookie: PrefManager.cookies) { 
      cookieStore.addCookie(cookie); 
      Log.d("ADebugTag", "cookie: " + cookie.toString()); 
     } 
     HttpContext localContext = new BasicHttpContext(); 
     localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 
     HttpResponse response = httpClient.execute(httpPost,localContext); 
     HttpEntity httpEntity = response.getEntity(); 
     is = httpEntity.getContent(); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

.....私はTFO問題を解決してください

<!DOCTYPE html> 
    <html lang="en"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
     <meta name="robots" content="NONE,NOARCHIVE"> 
     <title>TypeError at /m/payment</title> 
     <style type="text/css"> 
     html * { padding:0; margin:0; } 
     body * { padding:10px 20px; } </style> 

     <script type="text/javascript"> 
     //<!-- 
     function getElementsByClassName(oElm, strTagName, strClassName){ 
      // Written by Jonathan Snook, http://www.snook.ca/jon; Add-ons by Robert Nyman, http://www.robertnyman.com 
      var arrElements = (strTagName == "*" && document.all)? document.all : 
      oElm.getElementsByTagName(strTagName); 
      var arrReturnElements = new Array(); 
      strClassName = strClassName.replace(/\-/g, "\-"); 
      var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)"); 
      var oElement; 
      for(var i=0; i<arrElements.length; i++){ 
       oElement = arrElements[i]; 
       if(oRegExp.test(oElement.className)){ 
        arrReturnElements.push(oElement); 
       } 
      } 
      return (arrReturnElements) 

値:[USER_ID = 8、trxn_type = FP、subtrxn_type = N、スキーム= [{ "scheme_code ":2390、" 量」:5000}]、SESSION_KEY = 0j467lrxgi8o1yhdcgnduc4czmoiyses]

クッキー:[バージョン:0] [名:csrftoken] [値:O1xARAJ0ISMPeHId56Bk2boYW0XoKvwJ] [ドメイン:......] [パス: null] [有効期限:null]

答えて

0

私はソルこれは、リクエストごとにサーバー側から受信しているのと同じクッキーを送信することで実現します。まずサーバーから受け取ったCookieリストを保存し、サーバーに再度送信します。 if(cookielist!=null) { for (Cookie cookie : cookielist) { cookieStore.addCookie(cookie); } } HttpContext localContext = new BasicHttpContext(); localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); HttpResponse httpResponse = httpClient.execute(httpGet, localContext); List <Cookie> cookies = cookieStore.getCookies(); cookielist=cookies;

関連する問題