none
用 HttpWebRequest , server 回應 405 - 用來存取這個頁面的 HTTP 動詞不受允許 (方法不受允許) RRS feed

  • 問題

  • 用 HttpWebRequest 用 method = "POST" 把 data 上傳至網頁, 但對方 server 回應 "405 - 用來存取這個頁面的 HTTP 動詞不受允許 (方法不受允許)"

    1) 我用同一程式碼架構上傳至 php 做的網站完全無問題

    2) 但另一個網站 (應是用 IIS) 就出了 405 回應

    3) cookie 己對應

    但我研究過 2) 的網站的 HTML 碼, 對方是用

    <form action="abc.cfm?action=afsfsdfd" method="POST" name="mp">

    <input type="submit" name="submit" value="post char" onclick="document.mp.submit.disabled=true;document.mp.submit();">

     

    這顯示出, 對方都是用 POST 方法, 為何用 HttpWebRequest 卻出 405 回應??

     


    • 已編輯 asp.coder 2011年10月15日 上午 11:31
    2011年10月15日 上午 11:22

解答

  • 是的。

    正確的登入方式要先確認,你才知道如何通過對方的防禦。

    你沒跟網頁的登入方式比對,如何驗證你的程式是對的?


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 asp.coder 2011年10月20日 下午 04:10
    2011年10月18日 下午 05:14

所有回覆

  • 這要看網站如何保護吧...

    [VB 2008.NET] 載入HTML碼時的問題 (不是分析代碼)

    如何阻擋外站轉址?

    抓取網頁文字

    vb2008 ie自動運行

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年10月15日 下午 01:05
  • 看了, 但並沒有幫助

    我發覺這個站很奇怪, login 後所帶的 cookie 只有隨網頁的 href browse 才可保持, 如果直接輸入 URL 去它的其他網頁, login 的資訊就不可保持, 即是它不可直接跳往我所要的頁面, 要去, 就要跟它的連結 click , click click... 直至到達為止

    2011年10月15日 下午 03:45
  • 如果你第一篇網址跟第二篇網址都看懂的話,你應該不會有這篇回應。

    而是實際貼出你的封包或兩個 Header ...

    請確定你第一篇是看懂的。

    第二篇是從防禦者角度來看。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年10月15日 下午 05:50
  • 再看你第一篇介紹, 有一點不明白, 重點是說把 COOKIE 修整, 然後加至要前往的 URL 的 HEADER 內。但是我已經把

    myHttpWebRequest.CookieContainer = myCookieContainer;  //myCookieContainer 是 LOGIN 後的 COOKIE

    我把它全數賦給要前往的 URL , 其實不就等於你用 webClient 逐個 add 嗎?

    你該篇提及 re-direct 的問題, 是否連 re-direct 去那個 URL 的cookie 也要全數賦給要前往的 URL ?

    但以我所知, 網頁設計是如果 login 成功後, 會有一個變數在 cookie 內, 只要其他 url  找到該變數, 便可通行, 有錯嗎?

     -------------

    6. 正確登入後,你 POST 的回傳值應該是該網站的自動轉向或是登入成功的網頁內容,這時的 cookies 要傳遞給「點選你要下載網址超連結 (GET)」 ,方法同 POST ,只是省略掉 POST Colection ,後續每次 GET 的 cookies 也應繼續往後傳遞,才能確保你的登入持續有效。

    --------------

     

    是不是說, login 後的 re-direct 頁面也要一齊考慮? 每次先取得 re-direct url 的 cookie , 然後才可以往目標 url ??

    • 已編輯 asp.coder 2011年10月16日 上午 07:58
    2011年10月16日 上午 07:54
  • 再看你第一篇介紹, 有一點不明白, 重點是說把 COOKIE 修整, 然後加至要前往的 URL 的 HEADER 內。但是我已經把

    myHttpWebRequest.CookieContainer = myCookieContainer;  //myCookieContainer 是 LOGIN 後的 COOKIE

    我把它全數賦給要前往的 URL , 其實不就等於你用 webClient 逐個 add 嗎?

    WebClient 逐個加的,請仔細看,是其他的 Header 需求,cookies 只有加一次。

    你該篇提及 re-direct 的問題, 是否連 re-direct 去那個 URL 的cookie 也要全數賦給要前往的 URL ?

    redirect 是伺服器重新導向,如果你有針對封包監聽看過,就會發現這是伺服器發出來的,然後 IE 收到就會對新位址重新發送 GET 需求。因此若伺服器有發出 redirect 時,則你的程式要手動處理。

    phpBB 系列,包含舊版的 phpWind 都是用 Script 做登入後轉址動作,則變成你的程式要處理 Script 要求的新位置。

    但以我所知, 網頁設計是如果 login 成功後, 會有一個變數在 cookie 內, 只要其他 url  找到該變數, 便可通行, 有錯嗎?

    你講的是 SessionID ,所以這邊要看防禦者如何阻擋自動登入。

    我自己網站會加入額外的 cookie ,並且為時變性,前後沒有連貫的我會踢出去。目前是還沒有自動機器攻進來,每天都有攻擊紀錄就是了。

     -------------

    6. 正確登入後,你 POST 的回傳值應該是該網站的自動轉向或是登入成功的網頁內容,這時的 cookies 要傳遞給「點選你要下載網址超連結 (GET)」 ,方法同 POST ,只是省略掉 POST Colection ,後續每次 GET 的 cookies 也應繼續往後傳遞,才能確保你的登入持續有效。

    --------------

     

    是不是說, login 後的 re-direct 頁面也要一齊考慮? 每次先取得 re-direct url 的 cookie , 然後才可以往目標 url ??

    前面已經說過,不一定是 redirect ,看伺服器端怎樣寫。

    這邊的意思是指,你在連線的過程中 cookies 必須一直展期,或者某些功能變數可能會隱藏在裡面,比如說 User 的 代碼,這要看網站如何開發,因為有些網站會節省伺服器記憶體的使用量,把部分變數踢到 client 端,而伺服器端就不用記憶,用增加網路流量換取伺服器資源,所以 cookies 裡面到底會有甚麼,會如何變化,都應該持續往回送,這樣才能維持你的操作繼續往下跑。

    第一篇網址也有提到,有些網站會偵測 User-Agent 或 參考網址 ,你若沒附上,會直接踢掉。

    我自己網站在開發時,也會依需求使用這些,阻擋不必要的要求或是不正確的來源。比如說我要用限定我寫的 WinForm 溝通時,User_Agent 是必用,此外會用一些加密的 cookies 在裡面傳輸,以便判定是個有效來源。

    例如

    有檢查參考網址的,在第二篇連結有介紹。

    有偵測 User-Agent 的網站,在第三篇的連結有介紹。

     

    已經不是只發關鍵字給你在文海中找了,請每篇都要看。

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2011年10月16日 上午 09:59
  • 剛試了 cookie 的比較, 我用 webbrowser1.document.cookie 及 httpwebresponse.header 作 cookie 的比較, 發覺前者套取的多了幾個 element, 請問httpwebresponse.header 是否不準的?

    webbrowser1.document.cookie (我把它 url decode 了)

    __utma=175943805.1464322276.1318677050.1318742925.1318771514.6; __utmz=175943805.1318627050.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); MODE=text; SESSION_ID=42CB747A-0046-4946-B0561365551C273A; SESSION_KEY=70DAD9DC-B265-4D8F-ABEB5B2A31EE8D9F; __utmb=175943805.53.10.1318771514; __utmc=175943805; BROWSER_SESSION=197981903-11176081; CFGLOBALS=HITCOUNT=119#LASTVISIT={ts '2011-10-16 21:35:09'}#TIMECREATED={ts '2011-10-15 14:13:44'}#; ad_loccitane_112003=1; CFID=192981903; CFTOKEN=11276081

    httpwebresponse.header

    Set-Cookie: CFGLOBALS=HITCOUNT=2#LASTVISIT={ts '2011-10-16 20:14:20'}#TIMECREATED={ts '2011-10-16 20:14:20'}#; expires=Sun, 27-Sep-2037 00:00:00 GMT; path=/;,CFID=196981492; path=/;,CFTOKEN=25361303; path=/;,SESSION_KEY=F73488EF-F6AE-433A-81F837F0B5A98CF4; expires=Sun, 16-Oct-2011 20:14:20 GMT; path=/; domain=.example.com;,STATUSID=; expires=Fri, 16-Sep-2011 20:14:20 GMT; path=/; domain=.example.com;
    Server: Microsoft-IIS/5.0

    另外, 我發覺用 httpwebrequest login 後, 在 webbrowser1 內 (我把內容 read 在它內的), 發覺會 redirect 往另一頁面, 而該頁面的 sesson key 有機會不同 (證實往後也是用該 sesson key 的), 到底 httpwebResponse 是回傳第 1 個頁面的 header 還是 re-direct 的那個? 如要取 re-direct 那個 header, 要如何做?

     


    • 已編輯 asp.coder 2011年10月16日 下午 02:39
    2011年10月16日 下午 02:07
  • 第一篇有提過,先做封包攔截,看送出封包後,完全照送出封包打。

    比如說 Header 裡面有 gzip ,你沒有,是不是伺服器就會有某些功能不啟用,進而影響到 cookies。

    此外, WebBrowser Control 的 cookies 包含透過 script 或是有效路徑不是目前目錄的,伺服器只會輸出目前網頁的 cookies ,不會輸出其他的 cookies ,因此 HttpWebResponse.Header 只能抓到此網頁輸出的 cookies 。

    我在做伺服器防禦時,會透過 script 產生 cookies ,一般攻擊程式只會對目標網頁做動作,就會漏了 script 。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年10月16日 下午 02:31
  • 你介紹的貼子中說:

    -------------------------

    若是網站會在 「輸入帳號密碼登入 (POST)」 後用伺服器自動轉向 (redirect) ,這時會發生 WebClient 會自動改得到 redirect 的網址,可能會沒辦法記錄到步驟 6 所需的 cookies ,則 POST 須改使用比較細的 HttpRequest + HttpResponse ,才能取得自動轉向的要求並記錄到此時的 cookies 進行傳遞。其他部分仍可使用 WebClient 。

    ---------------------------

     

    是否無論用 script 還是用 header re-direct,  httpWebResponse 都是記錄了 re-direct 後那個 page 的 cookie 而不是在 httpWebRequest.Create(url) 的 cookie?

    • 已編輯 asp.coder 2011年10月16日 下午 04:07
    2011年10月16日 下午 03:58
  • 你做過封包攔截後,你比對完就知道。

    有些話別人說的再多,還不如自己做過一遍。


    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/e707eac3-3038-4be8-a925-eaec92a88c5f

    編輯注意事項 看一看

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年10月16日 下午 04:50
  • 試過了欄截, 我已在 Http: Request 中出現的參數用 httpWebRequest 加上, 但都是出現 405 error

    再找出 405 的 Http: Response, 它說

    --------------------------------------------------

      Frame: Number = 395, Captured Frame Length = 1482, MediaType = ETHERNET
    + Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[00-5F-72-DE-BF-80],SourceAddress:[74-DA-8A-A6-9E-93]
    + Ipv4: Src = 123.456.789.123, Dest = 192.168.1.201, Next Protocol = TCP, Packet ID = 4768, Total IP Length = 1468
    + Tcp: Flags=...A...., SrcPort=HTTP(80), DstPort=2975, PayloadLen=1428, Seq=1977895760 - 1977897188, Ack=3572333338, Win=16346 (scale factor 0x0) = 16526
    - Http: Response, HTTP/1.1, Status: Method not allowed, URL: /subDirect1/subDirect2/
        ProtocolVersion: HTTP/1.1
        StatusCode: 405, Method not allowed
        Reason: Method not allowed
        Server:  Microsoft-IIS/5.0
        Date:  Tue, 18 Oct 2011 20:15:35 GMT
        Connection:  close
                                               Allow:  OPTIONS, TRACE, GET, HEAD
        ContentLength:  3923
      - ContentType:  text/html
         MediaType:  text/html
        HeaderEnd: CRLF
      + payload: HttpContentType =  text/html

    --------------------------------------------------

     

    於是我試著 httpWebRequest.method 改為 GET, 雖沒有出 405, 但沒有回應, 再查看該網頁, 根本沒有 post 任何資料!

    請問出了什麼問題?

     

     

     

    2011年10月18日 下午 04:28
  • 先錄下你手動登入的封包攔截,看看這個網站到底要怎樣登入才被許可。

    之後才是去比你的方法是否正確。


    T.L. Cheng
    2011年10月18日 下午 05:11
  • 是的。

    正確的登入方式要先確認,你才知道如何通過對方的防禦。

    你沒跟網頁的登入方式比對,如何驗證你的程式是對的?


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 asp.coder 2011年10月20日 下午 04:10
    2011年10月18日 下午 05:14
  • 我用它 form 內的 action="abc.cfm?action=afsfsdfd" 作連結便成功了

     為何會這樣? 因為它的 page1 (其 url 為 example.com/?action=viewpage)內有一張 form, action 是連向 action="abc.cfm?action=afsfsdfd" 的, 如果在 page1 的 url 做 post, 就失敗!



    • 已編輯 asp.coder 2011年10月20日 下午 04:09
    2011年10月18日 下午 05:52
  • 你能有條理地描述嗎?混在一起沒有斷句,不確定你哪段是哪段...

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年10月19日 下午 12:23