這是一種瘋狂。表單被隨機提交爲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倍左右的請求)。
此時,我正在檢測發生的錯誤並提供更好的錯誤消息和指導。對於真正獲得權威性的答案,實際上並不熱情,特別是因爲答案似乎可能在於「我無法控制的代碼」領域。
有沒有JavaScript代碼可以擺弄窗體的方法? GET是默認的,所以如果參數被刪除,它會回落到那。不過,這太牽強了。有興趣看看會發生什麼。 – 2011-05-31 20:06:54
@Pekka - nope。網站上的所有javascript都可以在這裏找到(https://openid.stackexchange.com/Content/js/master.js)。只有一個地方會隨着形式而混亂;它不會觸及'method'。還注意到其中一些評論非常錯誤(修復!)。 – 2011-05-31 20:19:32
奇怪。表單值是否在GET請求中發送,還是僅僅是沒有數據的URL? – 2011-05-31 20:20:51