【发布时间】:2013-09-11 08:40:13
【问题描述】:
我正在使用图像主机服务,其中一个问题是我将如何防止人们刷新表单并强制表单一遍又一遍地重新上传图像,直到我用完磁盘空间(我仅限于20GB)。 感谢您花时间阅读我的问题。
【问题讨论】:
我正在使用图像主机服务,其中一个问题是我将如何防止人们刷新表单并强制表单一遍又一遍地重新上传图像,直到我用完磁盘空间(我仅限于20GB)。 感谢您花时间阅读我的问题。
【问题讨论】:
最直接的方法是使用会话。当用户上传文件时,您可以将总上传使用量增加最后上传图像的大小。在上传新文件之前,您可以检查会话是否超过最大值(我假设您要使用 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();
【讨论】:
$rateLimit = 50 * 1048576;)。
也试试 CSRF 技术。 http://en.wikipedia.org/wiki/Cross-site_request_forgery
【讨论】:
有一些,但它并不能完全阻止,只是惹恼他们(或者你也可以说它也会惹恼诚实的用户)。
您还可以清除未使用的图像。例如:用户上传的图片30天未使用将被删除。
【讨论】: