如果以前的提交仍然有效,如何拒绝HTML表单提交?

时间:2011-06-04 12:51:42

标签: javascript jquery html security form-submit

所以我有这个使用AJAX执行相当长的数据发布的表单,现在我有点偏执,一些聪明的家伙可能会打开firebug并重新触发发布过程,而之前仍然在行动。我该如何避免这种情况?

谢谢!

3 个答案:

答案 0 :(得分:2)

你可以:

  • 禁用提交按钮。
  • 防止按键输入。
  • 从表单标记中删除action属性。
  • 首次提交时重定向到另一个页面,并在页面上显示表单。

话虽如此,在前端只能做很多事情来阻止重新提交 - 总会有办法解决。如果您对此非常关注,那么服务器端验证也是必要的(通常也会建议)。

答案 1 :(得分:1)

在提交表单时设置条件,并添加表单提交检查。 jQuery中的示例:

$('form').submit(function(e) { 

    // If form has been submitted
    if($(this).data('submitted') == true) {
        e.preventDefault();
        return;
    }

    // Set the condition
    $(this).data('submitted',true);

    //...

    //After form has been submitted successfully, release the condition
    $(this).data('submitted',false);
});

这是禁用表单部分的首选,因为提交可以从表单中的任何输入进行。

答案 2 :(得分:1)

首先,考虑到你因为绕过客户端控制而担心多次提交(即使用Firebug或Fiddler重新发出请求),你可以忘记在客户端应用控件的任何选项(即禁用)按钮,JS检查提交状态等)。这是您必须在服务器上处理的。

查看synchroniser token pattern。这通常用于帮助防止CSRF(如链接中的上下文),但它也用于避免多个表单提交。如果您可以在您的AJAX请求中传递一个令牌,该请求经过验证,然后在请求开始处理之后失效(显然在繁重的工作开始之前),您就可以自己防止多次提交。