防止人们发送垃圾邮件图像上传表单

时间:2013-09-07 08:35:28

标签: php html css image upload

我正在使用一个Image主机服务,其中一个问题是我将如何阻止人们刷新表单并强制表单反复重新上传图像,直到我的磁盘空间不足(即时限制为20GB)。 感谢您抽出宝贵时间阅读我的问题。

3 个答案:

答案 0 :(得分:3)

有一些,但它并没有完全阻止,只是惹恼他们(或者你也可以说它可以惹恼诚实的用户)。

  • 限制用户在限定时间内每个IP上传的上传次数或尺寸。
  • 限制每天所有用户上传的大小。
  • 使用可靠的CAPTCHA。

您还可以清除未使用的图像。例如:如果用户尚未使用30天,则会删除用户上传的图像。

答案 1 :(得分:2)

尝试CSRF技术。 http://en.wikipedia.org/wiki/Cross-site_request_forgery

答案 2 :(得分:1)

最简单的方法是使用会话。当用户上传文件时,您可以按上次上传图像的大小增加总上传量。在上传新文件之前,您可以检查会话是否未超过最大值(我假设您要使用20GB)。您也可以在一段时间后清除限制。这是一个让你走向正确方向的小例子。

session_start();

// 20 GB
$rateLimit = 20 * 1073741824;

// 5 minutes (in seconds)
$rateDuration = 5 * 60;

// check to see if we've exceeded the upload threshold for the current window
if(isset($_SESSION['uploadUsage']) && $_SESSION['uploadUsage'] > $rateLimit) {
    die('You\'ve exceed the maximum upload size rate limit!');
}

// check if we can reset our limit window
if(time() - $_SESSION['lastRateWindow'] >= $rateDuration) {
    $_SESSION['uploadUsage'] = 0;
    $_SESSION['lastRateWindow'] = time();
}

// add this file size to the total in this rate window, 
// assuming the uploaded file is named "myFile"
$_SESSION['uploadUsage'] += $_FILES['myFile']['size'];

// handle your actual file uploads
handleFileUploads();