这是一种疯狂。表单被随机提交为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