如何制作,让人们每分钟不能多次使用输入?
如何删除将任何非字符/数字字符放入提交内容的功能?字母表会起作用,数字也会起作用,但+, - ,)等不会吗?
答案 0 :(得分:4)
您可以使用PHP会话。然后在每次提交表单时检查会话值,看它是否超过X秒。实施例
if (!isset($_SESSION['last_submit']))
$_SESSION['last_submit'] = time();
if (time()-$_SESSION['last_submit'] < 60)
die('Post limit exceeded. Please wait at least 60 seconds');
else
$_SESSION['last_submit'] = time();
您需要使用正则表达式。由于这是标记为初学者的问题,因此了解它们的工作方式可能超出了您的范围。但是这个函数将删除所有非字母和数字字符:
$string = ereg_replace('[^A-Za-z0-9]','', $string);
这个例子:
$string = 'sdrw%@#-14345';
$string = ereg_replace('[^A-Za-z0-9]','', $string);
echo $string;
将生成“sdrw14345”
答案 1 :(得分:1)
将token bucket algorithm与会话存储一起使用以进行速率限制。幸运的是,我为你实现了这个:bandwidth-throttle/token-bucket
use bandwidthThrottle\tokenBucket\Rate;
use bandwidthThrottle\tokenBucket\TokenBucket;
use bandwidthThrottle\tokenBucket\storage\SessionStorage;
$storage = new SessionStorage("myForm");
$rate = new Rate(1, Rate::MINUTE);
$bucket = new TokenBucket(1, $rate, $storage);
$bucket->bootstrap(1);
if (!$bucket->consume(1, $seconds)) {
http_response_code(429);
header(sprintf("Retry-After: %d", floor($seconds)));
exit();
}
答案 2 :(得分:0)
限制“形成用户的东西”是一项非常不精确的科学:要弄清楚请求来自哪里是非常非常困难的。您可以使用远程用户的IP地址,但如果NAT后面有许多用户,则可能会限制合法请求。你可以通过cookie来做(设置一个TTL为1分钟的cookie,然后如果设置了cookie就不要让它们提交),但是可以(阅读:简单)简单地删除那个cookie。
这有帮助吗?您想了解有关使用IP或cookie的更多信息吗?
答案 3 :(得分:0)
关于你的第二个问题,你需要使用HTML和JavaScript来做到这一点......网上有很多资源:http://www.google.com/search?q=restrict+characters+javascript
当然,您不能相信最终用户没有禁用JavaScript,因此您需要验证,当您的PHP获取数据时,它仍然有效......类似于:
if (preg_match("[^a-zA-Z0-9]", $input)) {
error("The input has invalid characters in it!");
}