2

我正在使用图像主机服务,其中一个问题是我将如何防止人们刷新表单并强制表单一遍又一遍地重新上传图像,直到我用完磁盘空间(我限制为 20GB)。感谢您花时间阅读我的问题。

4

3 回答 3

3

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

  • 限制用户在有限时间内每个 IP 可以上传的上传数量或大小。
  • 限制每天所有用户上传的大小。
  • 使用可靠的验证码。

您还可以清除未使用的图像。例如:用户上传的图片在 30 天没有被用户使用时将被删除。

于 2013-09-07T08:39:58.517 回答
2

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

于 2013-09-07T08:41:58.917 回答
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();
于 2013-09-07T08:54:38.037 回答