首頁 >後端開發 >php教程 >如何建立安全的圖像上傳腳本?

如何建立安全的圖像上傳腳本?

Linda Hamilton
Linda Hamilton原創
2024-12-05 12:03:10790瀏覽

How to Build a Secure Image Upload Script?

完整的安全圖像上傳腳本

儘管問題中討論了廣泛的措施,但全面的映像上傳安全腳本應解決以下其他方面:

客戶端驗證:

  • 使用HTML5 input type="file" 屬性過濾掉不支援的檔案類型。

檔案重新命名:

  • 使用唯一且隨機的名稱重新命名上傳的文件,以防止檔案名稱重複猜測。
  • 從檔案名稱中刪除任何敏感資訊(例如副檔名)。

檔案副檔名驗證:

  • 建立允許的檔案副檔名白名單並驗證上傳檔案的副檔名
  • 檢查雙檔案副檔名(例如“image.jpg.exe”)。

影像分析:

  • 使用影像分析技術來識別上傳的檔案是否是有效影像,而不是偽裝成惡意檔案的惡意檔案圖像。

檔案儲存:

  • 將上傳的映像儲存在網站根目錄之外的安全位置。
  • 使用支持訪問控制列表(ACL) 以限制對授權的訪問的文件系統

數據庫集成:

  • 建立資料庫表格來追蹤上傳的映像,包括它們的原始名稱、新名稱、MIME 類型和上傳日期。
  • 使用資料庫檢索並顯示授權的影像使用者。

示例腳本:

這是一個修改後的PHP 腳本,其中包含上述安全措施:

<?php

if (!empty($_FILES['image'])) {
  // Validate file extension
  if (!in_array($_FILES['image']['type'], ['image/jpeg', 'image/png', 'image/gif'])) {
    echo 'Invalid file type';
    exit;
  }

  // Validate file size
  if ($_FILES['image']['size'] > 1 * 1024 * 1024) { // 1MB
    echo 'File too large';
    exit;
  }

  // Generate random filename
  $filename = uniqid() . '.' . pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION);

  // Rename and move file
  if (move_uploaded_file($_FILES['image']['tmp_name'], 'uploads/' . $filename)) {
    // Insert into database
    $sql = "INSERT INTO images (name, original_name, mime_type, upload_date) VALUES (:name, :original_name, :mime_type, :upload_date)";
    $stmt = $conn->prepare($sql);
    $stmt->execute([
      ':name' => $filename,
      ':original_name' => $_FILES['image']['name'],
      ':mime_type' => $_FILES['image']['type'],
      ':upload_date' => date('Y-m-d H:i:s')
    ]);

    echo 'Image uploaded successfully';
  } else {
    echo 'Error uploading image';
  }
}
?>

此腳本驗證檔案副檔名、大小和MIME類型,重新命名文件,安全存儲,並將記錄添加到

其他建議:

  • 使用Web 應用程式防火牆(WAF) 阻止惡意請求和攻擊。
  • 監控上傳可疑活動目錄。
  • 定期更新 PHP 版本和安全庫以解決漏洞。

以上是如何建立安全的圖像上傳腳本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn