我在一个页面(~30)上有多个表单,有些表格有文件上载。
每个表单都有自己的提交按钮。
strukrap是bootstrap-tab和-collapsebox-design - 所以你可以在不重新加载的情况下更改标签并触及“控制面板”中的每个表单。
我尝试为所有表单运行“mysql注入我”(firefox插件),结果:
服务器响应错误500。
没有改变任何东西,不得不等待5分钟,一切都还好。
我的问题是:如何阻止theese表单(服务器端)的快速自动/用户提交?这是可能的吗?这样每个用户每1秒钟只能提交一个。
答案 0 :(得分:1)
为什么没有带有用户ID的MySQL表,并且有一行名为'last_submit'的行是datetime
。
每次用户提交内容时都会更新。
然后让PHP检查他们最近没有提交过什么东西。
答案 1 :(得分:1)
如果您想阻止机器人或脚本,请执行以下操作:
display: none
使其对人眼不可见。robo_trap
是否有任何值或其默认值是否已更改时。如果是,则丢弃表格,因为人类无法看到并且不需要填写表格。例如:
<?php
/* User Session */
session_start();
/* Current Time */
$now = new DateTime();
/* First Time ... */
if ( empty($_SESSION['last-submit']) ) {
$_SESSION['last-submit'] = $now;
}
/* On Form Submit ... */
if ( !empty($_POST) ) {
/* How fast?! */
$gap = now->diff( $_SESSION['last-submit'] );
$gap = $gap->format('%s');
if ( $gap > 1 ) {
// good ...
$_SESSION['last-submit'] = $now;
} else {
// bad ...
}
}
P.S。只是一个示例代码,为您提供一些想法,我没有测试它。
答案 2 :(得分:0)
您可以暂时禁用其他表单提交操作:
$(document).ready(function(){
$(':input[type="submit"]').click(function(){
var otherButtons = $(':input[type="submit"]').not($(this));
otherButtons.prop('disabled', true);
setTimeout(function(){
otherButtons.prop('disabled', false);
},
1000); //disable for 1 second
});
});
在服务器端,您可以进行重新提交检查,如:PHP avoid browser reposting $_POST on page refresh?