表单以 GET 而不是 POST 的形式随机提交



这有点疯狂。

以下是我们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>

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

所以这就是问题所在,定期(但不是始终如一(用户将 GET 而不是 POST 到这个 url。 这是一个低得离谱的发生率,迄今为止影响的用户总数不到 50 个。

我很想dev/null这些错误(没有操作方法等(,但是......

这些看起来像真实的用户:广泛的IP分布,多样化和有效的用户代理,以及可信的时间。 令人沮丧的是,相同的用户有时会在稍后成功发布相同的表单。

知道是什么原因造成的吗?

我有过和放弃的想法:

  • HTTPS 加速器或负载均衡器处理请求
  • 检查传入日志,它们与应用程序的内容匹配
  • ASP/.NET 请求解析错误
  • 将传入值与记录的请求值进行比较,它们匹配
  • 有缺陷的浏览器
  • 在多个Chrome版本,FireFox 4,Safari和Mobile Safari中记录的出现次数
  • 机器人或糟糕的浏览器扩展
  • 广泛的浏览器、IP 和操作系统传播。

我目前最好的猜测是,动作中的?affId=#正在绊倒某些东西(尽管不是一致的,再次(。 这基本上是巫毒调试,所以我希望有一个更权威的解释。

<小时 />

更新:尝试了我的巫毒修复(<input type="hidden" name="affId" value="#" />等(,并部署了。 没有重现,所以我只是让它烘烤。

我们平均每天看到一对夫妇,所以如果这烘烤 2+ 没有问题,我会将其作为答案发布。

<小时 />

第二次更新:不,仍在发生。 然而,频率要低得多。 我正在收集更多数据,以查看浏览器或操作系统方面是否存在任何共性。

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

<小时 />

第三次更新:更多关于虚假代理的证据。 查询日志以获取受影响的 IP(在更长的时间段内(,其中许多 IP 的请求速率比大多数未受影响的 IP 高得多。 它不是 100% 切割和干燥,我敢肯定一些令人沮丧的刷新正在增加一点计数,但是......它仍然是一个合理的指标(差异是受影响 IP 在同一时间段内请求 # 的 5 倍左右(。

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

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

Chrome用户也有类似的问题,原因是如果有人在谷歌浏览器中使用shift+enter提交表单,浏览器将打开新标签并发出没有参数的GET请求。由于人们通常将大写/特殊字符作为密码的最后一个字符,因此他们在释放班次之前按回车键,然后发出GET请求。

我看到您在枚举浏览器时首先提到了 Chrome,因此如果 Chrome 中更频繁地出现问题,可能是因为这个原因。

虽然这可能不是您遇到的唯一问题,但它可能会有所贡献。

通过验证器运行源 HTML 来确保源 HTML 格式正确。

最新更新