python
  • cookies
  • python-requests
  • csrf
  • 2017-08-09 11 views 0 likes 
    0

    {"X-CSRFTOKEN":client.cookies ['ccsrftoken']}を正しくHTTPリクエストに挿入する際に問題があります。Pythonリクエスト:csrftokenでヘッダーをアップグレードできないようです。

    私のファイアウォールでの認証にX-CSRFTOKENを使用することです。ここで

    は私のコードです:私のファイアウォール上で

    #!/usr/bin/env python 
    import requests 
    
    url = 'http://10.0.2.45/' 
    name = 'admin' 
    password = 'xyz' 
    
    #all cookies received will be stored in the session object 
    client = requests.session() 
    
    print 'client headers initially: ', client.headers, '\n' 
    
    
    #First connection used for authentication. 
    login = client.post(url + '/logincheck', data="username=" + name + "&secretkey=" + password, verify = False) 
    
    #csrftoken to be inserted in the headers for next put,post,delete requests. 
    This will be stored in csrftoken variable. 
    print 'client cookies after login: ', client.cookies, '\n \n' 
    print 'csrftoken value extracted from the cookie: ', 
    client.cookies['ccsrftoken'], '\n \n' 
    
    #we update the session headers with X-CSRFTOKEN 
    client.headers.update({"X-CSRFTOKEN": client.cookies['ccsrftoken']}) 
    
    #Simple post command (empty, just to test authentication) 
    api_cmdb = 'api/v2/cmdb/' 
    c = client.post(url + api_cmdb + 'firewall/address?vdom=root', verify = False) 
    

    これは、これらの3つのエラーとなります:

    CSRFトークン不一致

    - - [3015] is_valid_csrf_token [httpsd 160 1502297425エラー]

    [httpsd 160 - 1502297425エラー] api_cmdb_execute_handler [1422] - 有効なCSRFトークンが見つかりません

    [httpsd 160 - 1502297425エラー] api_return_http_resu lt; 528 - APIエラー403が発生しました

    Wiresharkを使用し、CURLコマンド(これは正常に動作します)と比較すると、「X-CSRFTOKEN」に挿入された値に二重引用符が付いています。例えばclient.headers.updateの出力({ "X-CSRFTOKEN":client.cookies [ 'ccsrftoken']}):

    CaseInsensitiveDict({'X-CSRFTOKEN': '"6C369B52B8211679DF2AC9676945CC"', 'Accept-Encoding': 'gzip, deflate, compress', 'Accept': '*/*', 'User-Agent': 'python-requests/2.2.1 CPython/2.7.6 Linux/3.4.0+'}) 
    

    この値は単に第二「の引用のセットなしで挿入しなければならないのに対し"

    これを修正する方法はありますか?ここ

    感謝

    は新しいのSESからclient.cookiesの出力です:

    <<class 'requests.cookies.RequestsCookieJar'> 
    [<Cookie APSCOOKIE_9539865664988587055="Era%3D0%26Payload%3DGAytA5jio‌​AyuHvus1rw3dfKdzWrJm‌​3CyraiFVxenLzBRb6qHL‌​qlcnIIUaZz5ZJma%0A7M‌​yKPN+4hgCPi8+yGeMhLd‌​TVAAlG0zHmtPw7y6v+nr‌​JVc1g7NZisFowGZ4TZac‌​fL%0AaiMjHE+0MuJLA7r‌​6COt4G+ikwMWlh8YWO0R‌​F5rvE0t6nYX%2FLvla1y‌​FjKy5Odu7kA%0AeewY6s‌​B0zbybh6eRSWQf5Q%3D%‌​3D%0A%26AuthHash%3DL‌​olbIaWtHofmkwMG1Fh6g‌​Wc6K%2FkA%0A" 
    for 10.0.2.45/>, 
    <Cookie ccsrftoken="2A28F281C83FF4B3235134C335D53B5" for 10.0.2.45//>, 
    <Cookie ccsrftoken_9539865664988587055="2A28F281C83FF4B3235134C335D5‌​3B5" for 10.0.2.45//>]> 
    
    +0

    ログイン後に 'client.cookies'を出力する行の出力は何ですか?新しいのSESから –

    +0

    こんにちは@Lukas、 : <<クラスのrequests.cookies.RequestsCookieJar '> [<クッキーAPSCOOKIE_9539865664988587055 = "時代%3D0%26Payload%3DGAytA5jioAyuHvus1rw3dfKdzWrJm3CyraiFVxenLzBRb6qHLqlcnIIUaZz5ZJma%0A7MyKPN + 4hgCPi8 + yGeMhLdTVAAlG0zHmtPw7y6v + nrJVc1g7NZisFowGZ4TZacfL%0AaiMjHE + 0MuJLA7r6COt4G + ikwMWlh8YWO0RF5rvE0t6nYX %2FLvla1yFjKy5Odu7kA%0AeewY6sB0zbybh6eRSWQf5Q%3D%の3次元%0A%26AuthHash%3DLolbIaWtHofmkwMG1Fh6gWc6K「10.0.2.45/ため>、<クッキーccsrftoken = "%2FkA%0A 10.0 2A28F281C83FF4B3235134C335D53B5 "" 10.0.2.45 //>、<クッキーccsrftoken_9539865664988587055 =ための" 2A28F281C83FF4B3235134C335D53B5 .2.45 //>] – mr4kino

    +0

    どの出力が 'client.cookies ['ccsrftoken']'からであるかは不明です。あなたの質問に応じて[編集]してください。 – stovfl

    答えて

    0

    私はこのための解決策を見つけました。

    文字列スライスが必要でした。

    =のclient.cookies [ 'ccsrftoken'] 場合、csrftoken [1:-1] =

    これはテスト後に正常に動作します。

    関連する問題