【问题标题】:How to consistently tamper with form submission in Javascript如何在 Javascript 中始终如一地篡改表单提交
【发布时间】:2018-07-27 10:37:05
【问题描述】:

以下表单需要一个名为 IMPORTANT_COOKIE 的 cookie 才能提交。当用户提交表单时,正在检查 cookie 的存在。只要用户单击提交按钮,一切都很好,但是当与代码一起提交时,测试将被完全忽略(如下面的链接)。如何 100% 确定涵盖所有表单提交方式?

<form action="javascript:alert('FORM FIRED');" method="post" id='form1'>
    <input type="text" name="something" value="something">
    <input type="submit">
</form>
<a href="javascript:document.getElementById('form1').submit();">Bypass important cookie test</a>

<script>
    function callback(e) {
      e.preventDefault(); 
      return waitForCookie().then(cookie => {
          return this.submit();
        });
    }
    function waitForCookie() {
      return new Promise(function (resolve, reject) {
        var intervalID = setInterval(checkForCookie, 1000);
        function checkForCookie() {
          var cookie = getCookie();
          if (cookie) {
            clearInterval(intervalID);
            resolve(cookie);
          }
        }
      });
    }
    function getCookie() {
      if (document.cookie.indexOf('IMPORTANT_COOKIE') == -1) {
        console.log("No cookie found - sorry")
        return undefined;
      } else {
        console.log("Hurray! Cookie found - proceeding")
        return 'cookie!';
      }
    }
    document.getElementById('form1').addEventListener("submit", callback, false);
</script>

【问题讨论】:

  • 在后端测试cookie?
  • 我只控制前端(它只是一个JS插件)。

标签: javascript forms validation submit


【解决方案1】:

当您从脚本your event listener is not called 提交表单时。

您的问题的解决方案可能是:

<a href="javascript:callback.bind(document.getElementById('form1')());">Bypass

【讨论】:

    【解决方案2】:

    我想通了 :) 希望将来有人能节省一些时间 :)

    form = document.getElementById('form1')
    tmp_submit = form.submit
    form.submit = function(e) {
        return waitForCookie().then(cookie => {
            tmp_submit.apply(form)
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 2014-10-23
      • 1970-01-01
      • 2015-07-06
      • 2016-03-21
      • 1970-01-01
      • 2012-02-06
      • 2021-07-18
      • 1970-01-01
      相关资源
      最近更新 更多