前阵子,在线应用程序常说“不要多次点击提交”。现在已经没有了,对吧?例如,在 PHP 中,您如何防范这种情况?
我正在使用的一个解决方案涉及在 session 中放置一个变量,因此您不能每 10 秒向一个页面提交超过一次。这样数据库工作就完成了,所以可以进行正常的检查。显然,这感觉像是黑客攻击,而且可能确实如此。
编辑:感谢大家提供 Javascript 解决方案。这很好,但需要做一些工作。 1) 这是一个输入 type=image 和 2) 提交必须一直触发直到 Spry stuff说没关系。这个编辑只是我的提示,基本上,因为我想在看了 Spry 的东西之后我就能弄明白。
编辑:并不是说任何人都会与 Spry 东西集成,但这是我使用 Prototype 实现 document.getElementByid 的最终代码。欢迎评论!
function onSubmitClick() {
var allValid = true;
var queue = Spry.Widget.Form.onSubmitWidgetQueue;
for (var i=0;i<queue.length; i++) {
if (!queue[i].validate()) {
allValid = false;
break;
}
}
if (allValid) {
$("theSubmitButton").disabled = true;
$("form").submit();
}
}
出于某种原因,第二次提交表单是必要的...
最佳答案
您应该同时进行客户端和服务器端保护。
客户端 - 禁用按钮,例如正如 cletus 所描述的那样,由 jquery 提供。
服务器端 - 在表单中放置一个 token 。如果有两个提交具有相同的 token,则忽略后者。使用这种方法,您可以免受 CSRF 的侵害.
关于php - 提交 : Please do not click submit more than once! 时避免 PHP 中的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/414835/