表单被随机提交为GET而不是POST

Kev*_*ose 17 html browser asp.net-mvc-3

这有点疯狂.

这是我们的OpenID提供商的表格:

  <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>
Run Code Online (Sandbox Code Playgroud)

此表单是/affiliate/form/loginiframe中托管的页面(at )的一部分.iframe通过HTTPS(HTTP上的主机页面)提供.您可以/users/login使用隐身/私人浏览/色情模式浏览器窗口查看此操作.

所以这是问题,定期(但不一致)用户将GET而不是POST到此URL.这是一个荒谬的低发生率,迄今为止影响的用户总数不到50个.

我很想知道dev/null这些错误(没有行动方法等等),但......

这些看起来像真正的用户:广泛的IP,各种有效的用户代理和可信的时间.令人沮丧的是,相同的用户有时会稍后成功地发布相同的表单.

可能导致这种情况的任何想法?

我已经拥有并丢弃的想法:

  • HTTPS加速器或负载均衡器处理请求
    • 检查传入的日志,它们匹配到应用程序的内容
  • ASP/.NET请求解析错误
    • 比较传入和记录的Request值,它们匹配
  • 越野车浏览器
    • 多个Chrome版本,FireFox 4,Safari和Mobile Safari中记录的事件
  • 机器人或糟糕的浏览器扩展
    • 广泛的浏览器,IP和OS传播.

我目前最好的猜测是,?affId=#在行动中绊倒的东西(虽然不是一贯的,但是).这基本上是巫毒调试,所以我喜欢更权威的解释.


更新:尝试了我的伏都教修复(<input type="hidden" name="affId" value="#" />等等),并进行了部署.没有一个repro,所以我只是让它烘烤.

我们平均每天都会看到几个,所以如果这个没有问题的2+,我会把它作为答案发布.


第二次更新:不,还在发生.然而,更不频繁.我正在收集更多数据,以确定浏览器或操作系统是否存在任何共性.

关于为什么?affId=#从行动中删除减少发生的操作理论是客户面前的错误代理,乐观地获取"看起来安全的东西".这是一个疯狂的猜测,所以用一粒盐对待它.


第三次更新:虚假代理的更多证据.查询受影响IP的日志(在更长的时间段内),其中许多请求率比大多数未受影响的IP要高得多.它不是100%切割和干燥,而且我确信一些令人沮丧的清爽增加了计数但是......它仍然是一个合理的指标(差异是受影响IP的同一时期的5倍左右的请求数量) ).

此时,我正在检测已发生的错误并提供更好的错误消息和指导.对于实际获得权威性答案而言并不热心,特别是因为答案似乎可能存在于"我无法控制的代码"领域.

iva*_*eev 3

一些广告拦截浏览器扩展(例如AdBlock Plus Popup 插件)会“探测”伴随页面,以确定其真实 URL,然后再决定是否阻止它们。具体来说,前面提到的 Popup 插件默认使用 HEAD 查询来执行此操作,但可以设置为执行 GET 查询。