【问题标题】:Preventing people from spamming image upload form防止人们向图片上传表单发送垃圾邮件
【发布时间】:2013-09-11 08:40:13
【问题描述】:

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

【问题讨论】:

    标签: php html css image upload


    【解决方案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();
    

    【讨论】:

    • 不,我的帐户限制为 20GB,不是每个用户
    • 知道了。您可以将限制更改为更合适的值,例如 50 MB ($rateLimit = 50 * 1048576;)。
    • @AustinBrunkhorst,这种方法的问题是用户仍然可以无限制地上传无限数量的文件,因为用户可以从他们的 cookie 中删除他们的 SESSION ID,系统会将他们视为新用户。跨度>
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 你推荐什么验证码?
      猜你喜欢
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2013-09-20
      相关资源
      最近更新 更多