这有点疯狂。
这是我们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">name@example.com</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到此网址。这是一个荒谬的低发生率,迄今为止影响的用户总数不到50个。
我很想dev/null
这些错误(没有行动方法等等),但......
这些看起来像真正的用户:广泛的IP,各种有效的用户代理和可信的时间。令人沮丧的是,相同的用户有时稍稍成功地发布了相同的表单。
任何可能导致此问题的想法?
我已经拥有并丢弃的想法:
我目前最好的猜测是行动中的?affId=#
正在绊倒(尽管不是一致的)。这基本上是伏都教调试,所以我喜欢更权威的解释。
更新:尝试了我的voodoo修复程序(<input type="hidden" name="affId" value="#" />
等)并进行了部署。没有一个复制品,所以我只是让它烘烤。
我们平均每天都会看到几个,所以如果这个没有问题的2岁以上,我会把它作为答案发布。
第二次更新:没有,仍在发生。然而,更不频繁。我正在收集更多数据,以确定浏览器或操作系统是否存在任何共性。
关于为什么从动作中删除?affId=#
减少发生的操作理论是客户面前的错误代理,乐观地获取“看起来安全的GET”。这是一个疯狂的猜测,所以用一粒盐对待它。
第三次更新:虚假代理的更多证据。查询受影响IP的日志(在更长的时间段内),其中许多请求率比大多数未受影响的IP要高得多。它不是100%切割和干燥,而且我确信一些令人沮丧的清爽增加了计数但是......它仍然是一个合理的指标(差异是受影响IP的同一时期的5倍左右的请求数量) )。
此时,我正在检测已发生的错误并提供更好的错误消息和指导。对于实际获得权威性答案而言并不热心,特别是因为答案似乎可能存在于“我无法控制的代码”领域。
答案 0 :(得分:3)
某些广告拦截浏览器扩展程序,例如AdBlock Plus Popup addon'探测'随播页面,以确定是否阻止它们之前确定其真实网址。具体来说,前面提到的Popup插件默认使用HEAD查询执行此操作,但可以设置为执行GET查询。
答案 1 :(得分:1)
与Chrome用户存在类似问题,原因是如果有人使用Shift + Enter在Google Chrome中提交表单,浏览器将打开新标签并发出没有参数的GET请求。由于人们通常将大写/特殊字符作为密码的最后一个字符,因此在释放班次之前按Enter键,然后发出GET请求。
我看到您在枚举浏览器时首先提到了Chrome,因此如果Chrome更常出现问题,可能是因为这个原因。
虽然这可能不是你唯一的问题,但它可能有所帮助。
答案 2 :(得分:0)
通过验证器运行来确保源HTML格式正确。