Maison > développement back-end > tutoriel php > Comment créer un script de téléchargement d'image sécurisé ?

Comment créer un script de téléchargement d'image sécurisé ?

Linda Hamilton
Libérer: 2024-12-05 12:03:10
original
784 Les gens l'ont consulté

How to Build a Secure Image Upload Script?

Script de téléchargement d'image entièrement sécurisé

Malgré les mesures étendues évoquées dans la question, un script de sécurité de téléchargement d'image complet devrait aborder les aspects supplémentaires suivants :

Côté client Validation :

  • Utilisez l'attribut HTML5 input type="file" pour filtrer les types de fichiers non pris en charge.

Renommage de fichiers :

  • Renommer les fichiers téléchargés avec un nom unique et aléatoire pour empêcher le nom de fichier des conjectures.
  • Supprimez toute information sensible du nom de fichier (par exemple, l'extension).

Validation de l'extension de fichier :

  • Créer une liste blanche des extensions de fichiers autorisées et validez l'extension du fichier téléchargé par rapport à celle-ci.
  • Vérifiez les extensions de fichiers doubles (par exemple, "image.jpg.exe").

Analyse d'image :

  • Utilisez des techniques d'analyse d'image pour identifier si le fichier téléchargé est une image valide et non un fichier malveillant déguisé en image.

Fichier Stockage :

  • Stockez les images téléchargées dans un emplacement sécurisé en dehors du répertoire racine du site Web.
  • Utilisez un système de fichiers prenant en charge les listes de contrôle d'accès (ACL) pour restreindre l'accès à utilisateurs autorisés.

Base de données Intégration :

  • Créez une table de base de données pour suivre les images téléchargées, y compris leur nom d'origine, leur nouveau nom, leur type MIME et leur date de téléchargement.
  • Utilisez la base de données pour récupérer et afficher des images aux utilisateurs autorisés.

Exemple Script :

Voici un script PHP révisé qui intègre les mesures de sécurité ci-dessus :

<?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';
  }
}
?>
Copier après la connexion

Ce script valide l'extension, la taille et le type MIME du fichier, renomme le fichier, le stocke en toute sécurité et ajoute un enregistrement à la base de données.

Supplémentaire Recommandations :

  • Utilisez un pare-feu d'application Web (WAF) pour bloquer les requêtes et les attaques malveillantes.
  • Surveillez le répertoire de téléchargement pour détecter toute activité suspecte.
  • Régulièrement mettre à jour la version PHP et les bibliothèques de sécurité pour corriger les vulnérabilités.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal