2011-05-31 144 views
17

這是一種瘋狂。表單被隨機提交爲GET而不是POST

這裏是我們的OpenID provider形式:

<form method="post" action="/affiliate/form/login/submit?affId=7" autocomplete="off"> 
    <table class="position-table"> 
     <tr> 
     <td class="input-td"> 
      <input class="framed-text-field" type="text" name="email" id="email" value="" maxlength="100" /> 
      <span class="form-help">[email protected]</span> 
     </td> 
     <td class="input-td"> 
      <input class="framed-text-field" type="password" name="password" id="password" /> 
      <span class="form-help">Password</span> 
     </td> 
     <td></td> 
     <td class="input-td"> 
      <input type="submit" class="affiliate-button" value="Sign In" /> 
     </td> 
     </tr> 
    </table> 
    <input type="hidden" id="fkey" name="fkey" value="REDACTED" /> 
    </form> 

這種形式是在一個iframe託管的網頁(在/affiliate/form/login)的一部分。 iframe通過HTTPS(通過HTTP的主機頁面)提供。您可以使用隱身/私密瀏覽/色情模式瀏覽器窗口在/users/login處看到此操作。

所以這裏的問題,定期(但不是一致)用戶將GET,而不是POST到這個URL。這是一個荒謬的低發生率,迄今爲止影響的用戶總數不到50個。

我很想只是dev/null這些錯誤(無操作方法等等,等等),但...

這些看起來像真正的用戶:IPS廣傳播,多樣和有效的用戶代理和可信時序。令人沮喪的是,相同的用戶有時成功地發佈相同的形式稍晚。

任何想法可能導致這種情況?

想法我已經和丟棄:

  • HTTPS加速器或負載平衡器改寫(munging)請求
    • 檢查傳入的日誌,它們匹配什麼讓該應用程序
  • ASP /。 NET請求解析錯誤
    • 比較傳入記錄的請求值ES,它們匹配
  • 巴吉瀏覽器
    • 登錄出現在多個瀏覽器版本,火狐4,Safari和移動Safari
  • 機器人,或照出的瀏覽器擴展
    • 寬瀏覽器,IP和操作系統傳播。

我目前最好的猜測是,在行動?affId=#被絆倒的東西(雖然不是一致,再次)。這基本上是巫術調試,所以我想要一個更權威的解釋。


更新:嘗試我的伏都教修復(<input type="hidden" name="affId" value="#" />等),並部署。沒有複印,所以我只是讓它烤。

我們平均每天都會看到一對夫婦,所以如果這種情況下沒有問題,我會將它作爲答案發布。


第二次更新:不,仍然發生。然而,頻率較低。我正在收集更多數據,以查看瀏覽器或操作系統是否具有共同性。

關於爲什麼從動作中刪除?affId=#減少出現的操作理論是在客戶面前樂觀地提取「看起來對GET安全的東西」的錯誤代理。這是一個瘋狂的猜測,所以用一粒鹽來對待它。


第三次更新:僞造代理的更多證據。查詢受影響的IP的日誌(在更長的時間段內),並且其中很多請求率比大多數未受影響的要高。它不是100%削減和乾燥,我敢肯定,一些令人沮喪的刷新正在增加計數有點,但...它仍然是一個合理的指標(差異是同一時期受影響的IP的5倍左右的請求)。

此時,我正在檢測發生的錯誤並提供更好的錯誤消息和指導。對於真正獲得權威性的答案,實際上並不熱情,特別是因爲答案似乎可能在於「我無法控制的代碼」領域。

+0

有沒有JavaScript代碼可以擺弄窗體的方法? GET是默認的,所以如果參數被刪除,它會回落到那。不過,這太牽強了。有興趣看看會發生什麼。 – 2011-05-31 20:06:54

+0

@Pekka - nope。網站上的所有javascript都可以在這裏找到(https://openid.stackexchange.com/Content/js/master.js)。只有一個地方會隨着形式而混亂;它不會觸及'method'。還注意到其中一些評論非常錯誤(修復!)。 – 2011-05-31 20:19:32

+0

奇怪。表單值是否在GET請求中發送,還是僅僅是沒有數據的URL? – 2011-05-31 20:20:51

回答

3

某些阻止廣告的瀏覽器擴展程序,如AdBlock Plus Popup addon「探測」伴隨頁面,以在決定是否阻止它們之前確定其真實網址。具體來說,前面提到的Popup插件默認使用HEAD查詢,但可以設置爲執行GET查詢。

0

確保源代碼HTML格式良好,方法是通過驗證器運行它。

1

與Chrome用戶有類似的問題,原因是如果有人使用Shift +在谷歌瀏覽器中輸入表單提交表單,瀏覽器將打開新標籤頁併發出無請求的GET請求。由於人們通常將大寫字母/特殊字符作爲密碼的最後一個字符,因此在釋放移位之前按下Enter鍵,然後發出GET請求。

我看到你在枚舉瀏覽器時首先提到了Chrome,所以如果Chrome更頻繁出現問題,可能是因爲這個原因。

雖然這可能不是唯一的問題,但它可能有助於。