Membres


Pas encore membre ?
inscrivez-vous ici

Connexion :
Login
Code
Mot de passe perdu ?
Liste des membres

myPHPupload - upload php sécurisé

MyPHPupload - upload php sécurisé


Pages : [1] 2 3 4 5 6 7 8 9 10 11 12 13 14

MyPHPupload - upload php sécurisé     Posté le 2/10/2007 à 10:40
Sky
Administrateur
sky
Site perso
4223 posts
Inscrit le : 13/08/2003
Version actuel : myPHPupload 0.5.1
ceci est un script pour n'importe qui, mais ne garanti pas une sécurité ABSOLU

Voici un petit script d'upload PHP qui j'espère vous sera bien utile.
Je suis ouvert à toute amélioration niveau sécurité si vous remarqué une faille possible.

C'est un petit gesitonnaire d'upload écrit en PHP et utilisant une base de donnée MySQL.

Le principe est de ne pas laisser connaitre l'emplacement de vos fichier lors de l'upload. Pour cela, on utilise plusieurs méthodes, déjà connu et utilisé mais rassemblé ici dans un format simple (j'espère) d'utilisation.

Pour télécharger la dernière version de myPHPupload : http://www.graphiks.net/telecharger/myPHPupload.zip

Démonstration : http://www.graphiks.net/projets/myPHPupload/


Installation
IMPORTANT
Dans le fichier config.php, vous trouverez le login et mot de passe pour l'accès à l'administration. CHANGEZ LE MOT DE PASSE PAR DEFAUT!


- décompresser le fichier et uploader le tout (répertoire myPHPupload comppris)
- toute la configuration se fais dans le fichier config.php :
-- changer les paramètre de connexion à votre base de donnée mysql
-- créer la table mysql en utilisant le fichier create_mysql.sql
-- pour plus de sécurité, renommer le répertoire repertoire_secret (un nom à dormir dehor qui soit très dur à trouver) puis renseigner le fichier config.php avec le nouveau nom de répertoire ($_rep_secret = 'repertoire_secret';). Le MUST est de mettre un répertoire non accéssible depuis un navigateur. (en dessous du www)
-- changer le login et mot de passe pour accès à l'administration


Note : version 0.3.2 corrige un bug de Internet Explorer qui est très pointilleu sur les entêtes envoyé et ne voulez pas afficher les images.



Note de version :
0.3 :
La plus grande amélioration étant un systeme qui empèche la lecture de FAUX fichier image. getimagesize(); n'étant pas la panacé, l'image est désormais ouverte et lu ligne par ligne pour et on vérifié la non présence de code malicieux.
ID n'est plus passé dans l'url, mais désormais un identifiant "unique".


0.3.1 :
Cette nouvelle version ne comporte pas de grosse mise à jours, mais surtout plusieurs petites améliorations dans l'affichage des images, la qualité des jpg ou encore le nommage des variables.


0.4B :
- section admin protéger par login et mot de passe qui pemet de :
- - supprimer les fichiers
- - faire le tri dans les fichiers temporaires (cache et fichier orphelins)
- - ... plus à venir : ban par ip, config par formulaire
- - voir et télécharger les fichiers qui sont périmés (ou non)
- plus d'options de configuration
- possiblité de définir si on veut utiliser le système de cache ou non
- prise en compte de la transparence des PNG lors d'un redimmensionement
- un mode debug
- qualité des images JPG réglable
- contre vérification du type mime par rapport à son extension. (impossible de mettre en ligne un fichier BMP avec une extension .jpg)
- on ne redimmensionne plus les fichiers GIF pour l'instant. Faut que je règle le soucis de fond noir avec ceux qui sont transparent.


0.4.2 :
- amélioration de l'administration
- option pour voir une miniature de l'image mis en ligne
- option pour voir un lien automatique type BBcode pour forum
- optimisation



0.4.3 :
- compteur de téléchargement de chaque fichier
- compteur de visualistion de chaque image
- le code correct pour créer la base mysql


0.4.4 :
- si on passe en mode urlRewriting, une extension est ajouter à l'url pour être compatible avec tous les forums.
- Ajout d'une option qui permet de mettre un mot de passe pour les utilisateurs
- Quelques changements mineurs dans le code


0.5 :
Cette version inclue plusieurs nouveautées :
- possibilité de configurer la suppression automatique des fichiers périmés.
- on peux définir un mot de passe pour l'upload de fichier, mais aussi pour voir un fichier.
- nouveau système pour voir en direct certains fichiers multimédias. Pour l'instant, uniquement les fichiers .mp3 et .swf
- pour bannir une ip on le fais désormais via un fichier texte avec une IP par ligne.
- Re structuration des fichiers (attention lors d'une mise à jours)
- Ajout d'une page "details" qui récapitule les infos du fichier
- Optimisation et plein de petits trucs ...



0.5 :
- Quelques optimisations et amélioration en termes de rapidité
- Amélioration du lecteur multimédia


________________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 3/10/2007 à 08:55
sky
Administrateur
Avatar
Site perso
4223 posts
Inscrit le : 13/08/2003
La version 0.3 de l'upload php sécurisé est presque terminé avec quelques nouveautés comme un identifiant unique pour chaque fichier un peut plus complexe que juste l'id de la table mysql.

Suivi de quelques amélioration de la structure de la table mysql pour améliorer les performances si vous avez beaucoup de fichiers.

Ajout d'un nouveau test de sécurité pour être plus sur que le fichier ne contient pas des caractère interdit (à l'intérieur du fichier !). Ceci peut rendre le script d'upload lent sur des gros fichiers.

_______________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 4/10/2007 à 16:10
sky
Administrateur
Avatar
Site perso
4223 posts
Inscrit le : 13/08/2003
Version 0.3 de myPHPupload, upload php sécurisé.

La plus grande amélioration étant un systeme qui empèche la lecture de FAUX fichier image. getimagesize(); n'étant pas la panacé, l'image est désormais ouverte et lu ligne par ligne pour et on vérifié la non présence de code malicieux.

Comme cité audessus : l'id n'est plus passé dans l'url, mais désormais un identifiant "unique".

Pour télécharger le fichier, c'est toujours le même lien cité audessus sur le premier message.

_______________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 7/10/2007 à 15:18
sky
Administrateur
Avatar
Site perso
4223 posts
Inscrit le : 13/08/2003
Version 0.3.1 de myPHPupload - upload PHP sécurisé

Cette nouvelle version ne comporte pas de grosse mise à jours, mais surtout plusieurs petites améliorations dans l'affichage des images, la qualité des jpg ou encore le nommage des variables.

Il est bien sur conseillé d'utiliser cette version plutôt que les anciennes.

J'ai aussi mis en ligne une DEMO de myPHPupload : upload php sécurisé

_______________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 01:43
david55
Membre
Avatar
7 posts
Inscrit le : 24/10/2007
bonjour

j'ai télecharger le fichier , mais en faites , à la fin , lorsque je veux cliquer sur les deux liens (telecharger et voir l'image) ils font réference à deux dossier qui n'existent pas dans le fichier télecharger : download et view !!!!
est ce que c'est normal ou ç'est moi qui déconne smiley

_______________________
Aucun
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 09:53
sky
Administrateur
Avatar
Site perso
4223 posts
Inscrit le : 13/08/2003
Bonjour david55
C'est normal. Par defaut les url sont dit "rewrité".

Pour ne plus passé par cette option, ouvre le fichier config.php et change la variable
$upload_cfg['_urlrewriting'] = 1
en
$upload_cfg['_urlrewriting'] = 0

Un 0 à la place du 1.
Du coup les url vont devenir plus compréhensible.

Sky

_______________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 12:04
david55
Membre
Avatar
7 posts
Inscrit le : 24/10/2007
bonjour

j'ai changé le variable, mais rien qui marche , voici les liens qui me donne :
pour le telechargement :
http://www.*******.com//dld.php?i=6001cde5-3a38-4098-b5e4-1a47fd14405c

pour visionner l'image :
http://www.*******.com//view.php?i=6001cde5-3a38-4098-b5e4-1a47fd14405c

donc je sais pas ou le pb smiley

_______________________
Aucun
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 13:46
sky
Administrateur
Avatar
Site perso
4223 posts
Inscrit le : 13/08/2003
C'est parceque tu as mis un / à la fin de l'adresse de ton site dans le fichier config.php

$upload_cfg['_votre_site'] = 'http://www.graphiks.net'; // adresse http complete du sit


_______________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 14:41
david55
Membre
Avatar
7 posts
Inscrit le : 24/10/2007
voici quelques lignes du fichier :
$upload_cfg = '';
$upload_cfg = array();
$upload_cfg['_rep_secret'] = $_SERVER['DOCUMENT_ROOT'].'/upload/repertoire_secret'; // le repertoire secret - la ou son place les fichirs lors de l'upload.
$upload_cfg['_votre_site'] = 'http://www.*******.com'; // adresse http complete du site
$upload_cfg['_rep_myphpupload'] = 'upload'; // depuis la racine http
$upload_cfg['_sqltable'] = 'myphpupload'; // nom de la table mysql
$upload_cfg['_urlrewriting'] = 0; // activons l'url rewriting ?
$upload_cfg['_img_maxlargeur'] = 700; // si une image est supérieur à $_img_maxlargeur, on le retaille a cette largeur

_______________________
Aucun
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 15:13
sky
Administrateur
Avatar
Site perso
4223 posts
Inscrit le : 13/08/2003
Euh, j'avou que je ne comprend pas là.
Tu peut m'envoyer en message privée l'adresse du site pour que je puisse tester ?

Mais normalement, il peut pas y avoir d'erreur si ton url n'a de / à la fin ...

Sinon tu peut ouvrir index.php et modifier tous les liens (y'en a pas beaucoup, 3 ou 4 je crois) qui pointe vers dld.php et view.php en enlevant le / devant.

Sky

ps : si tu enlève le / de trop dans l'adresse à la main, est ce que ça fonctionne ?

_______________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 16:21
david55
Membre
Avatar
7 posts
Inscrit le : 24/10/2007
je vous ai envoyé l'adresse :)

_______________________
Aucun
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 16:49
sky
Administrateur
Avatar
Site perso
4223 posts
Inscrit le : 13/08/2003
Problème résolu a ce que je voi.
Bon Upload !

_______________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 16:59
david55
Membre
Avatar
7 posts
Inscrit le : 24/10/2007
non pas encore


_______________________
Aucun
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 17:02
david55
Membre
Avatar
7 posts
Inscrit le : 24/10/2007
par rapport a votre script sur votre site , il ya l'extention de l'iamge sur le lien aprés upload , pas dans mon cas , lorsque je clique sur le lien pour visionner l'image , il me donne que le lien pour la télecharger .

_______________________
Aucun
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 17:45
sky
Administrateur
Avatar
Site perso
4223 posts
Inscrit le : 13/08/2003
Je n'avais pas beaucoup tester sur internet explorer.
Le soucis est que là ... il lui faut les entêtes EXACT pour qu'il le considère comme étant une image ...

Il faut donc modifier le fichier view.php (le code complet) ... ou télécharger la nouvelle version :
<?php
/*
  myPHPupload 0.3.2
  Gunning sky
  www.graphiks.net
*/

define('UPLOAD_SAFE',true);
if(
file_exists('./config.php'))
  include(
'./config.php');
else
  exit(
'Le fichier config.php n\'est pas au bon endroit.');


// on recupere l'id du fichier à affiché
if(!isset($_GET['i']) || empty($_GET['i']))
  exit(
"Paramètres manquants");
else
  
$id quote_smart($_GET['i']);

// on test s'il existe bien dans la BDD
$requete "SELECT * FROM ".$upload_cfg['_sqltable']." WHERE ref='$id'";
$sql mysql_query($requete);
$nbr mysql_num_rows($sql);

if(
$nbr == 0)
  exit(
'Fichier invalide');
else
{
  
$post mysql_fetch_array($sql);
  
$fichier $post['file'];
  
$date $post['date'];
}


// y'a t'il une limitation sur temps ?
$now mktime();
if(
$upload_cfg['_limite'] == 1)
{
  
// si oui, on test la validité
  
$max_validite $date $upload_cfg['_limite_validite'];
  if(
$max_validite $now)
    exit(
"Fichier périmé");
}


// on doit verifier que le fichier existe belle et bien. on pourrai avoir supprime le fichier mais pa s l'enregistrement dans la base
if(!file_exists($upload_cfg['_rep_secret'].'/'.$fichier))
  exit(
"Fichier inexistant");

// on vérifi que le fichier est bien une image dans un format que l'on sais traiter.
$ext get_file_ext($fichier);
if(
$upload_cfg['_array_extok'][$ext] != $ext || empty($ext) || !valide_img($upload_cfg['_rep_secret'].'/'.$fichier))
  exit(
"Image invalide");


// selon l'extension, on exécute le code PHP pour generer l'image.
// attention à la taille des images. selon votre configuration de PHP et du serveur, une trop grosse image&n bsp;pourrai faire planter le script.
switch($ext)
{
  case 
'jpg':
  case 
'jpeg':
    if(!
file_exists($upload_cfg['_rep_secret'].'/tmp_'.$fichier))
    {
      
$image $upload_cfg['_rep_secret'].'/'.$fichier;
      
$src_im = @ImageCreateFromJpeg($image);
      
$size = @GetImageSize($image);
      
$src_w $size[0];
      
$src_h $size[1];
      
      if(
$src_w $upload_cfg['_img_maxlargeur'])
      {
        
$dst_w $upload_cfg['_img_maxlargeur'];
        
$dst_h round(($dst_w $src_w) * $src_h);
      }
      else
      {
        
$dst_w $size[0];
        
$dst_h $size[1];
      }

      
$dst_im = @ImageCreateTrueColor($dst_w,$dst_h);
      @
ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
      @
imageJpeg($dst_im,$upload_cfg['_rep_secret'].'/tmp_'.$fichier,100);
    }
    
    if(
file_exists($upload_cfg['_rep_secret'].'/tmp_'.$fichier))
    {
      @
header('Content-Disposition: inline; filename="'.$fichier.'"');
      @
header("Content-Transfer-Encoding: image/jpg\n");
      @
header('Content-type: image/jpg');
      @
readfile($upload_cfg['_rep_secret'].'/tmp_'.$fichier);
    }

    exit();
  break;
  
  
  
  case 
'gif':
    if(!
file_exists($upload_cfg['_rep_secret'].'/tmp_'.$fichier))
    {
      
$image $upload_cfg['_rep_secret'].'/'.$fichier;
      
$src_im = @ImageCreateFromGif($image);
      
$size = @GetImageSize($image);
      
$src_w $size[0];
      
$src_h $size[1];
      
$gif_direct_vue false;
      
      if(
$src_w $upload_cfg['_img_maxlargeur'])
      {
        
$dst_w $upload_cfg['_img_maxlargeur'];
        
$dst_h round(($dst_w $src_w) * $src_h);
        
$gif_direct_vue false;
      }
      else
      {
        
$gif_direct_vue true;
      }
      
      if(!
$gif_direct_vue)
      {
        
$dst_im = @ImageCreateTrueColor($dst_w,$dst_h);
        @
ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
        @
imageGif($dst_im,$upload_cfg['_rep_secret'].'/tmp_'.$fichier);
      }
    }

    if(
file_exists($upload_cfg['_rep_secret'].'/tmp_'.$fichier) || $gif_direct_vue)
    {
      @
header('Content-Disposition: inline; filename="'.$fichier.'"');
      @
header("Content-Transfer-Encoding: image/gif\n");
      @
header('Content-type: image/gif');
      if(
$gif_direct_vue)
      {
        @
readfile($upload_cfg['_rep_secret'].'/'.$fichier);
      }
      else
        @
readfile($upload_cfg['_rep_secret'].'/tmp_'.$fichier);
    }
      
    exit();
  break;
  
  
  
  case 
'png':
    if(!
file_exists($upload_cfg['_rep_secret'].'/tmp_'.$fichier))
    {
      
$image $upload_cfg['_rep_secret'].'/'.$fichier;
      
$src_im = @ImageCreateFromPng($image);
      
$size = @GetImageSize($image);
      
$src_w $size[0];
      
$src_h $size[1];
      
      if(
$src_w $upload_cfg['_img_maxlargeur'])
      {
        
$dst_w $upload_cfg['_img_maxlargeur'];
        
$dst_h round(($dst_w $src_w) * $src_h);
      }
      else
      {
        
$dst_w $size[0];
        
$dst_h $size[1];
      }
      
      
$dst_im = @ImageCreateTrueColor($dst_w,$dst_h);
      @
ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
      @
imagePng($dst_im,$upload_cfg['_rep_secret'].'/tmp_'.$fichier);
    }

    if(
file_exists($upload_cfg['_rep_secret'].'/tmp_'.$fichier))
    {
      @
header('Content-Disposition: inline; filename="'.$fichier.'"');
      @
header("Content-Transfer-Encoding: image/png\n");
      @
header('Content-type: image/png');
      @
readfile($upload_cfg['_rep_secret'].'/tmp_'.$fichier);
    }
    
    exit();
  break;
}
?>


_______________________
Graphiks : Cours PHP
Image
=> à quoi sert internet explorer ?
=> à télécharger firefox
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 24/10/2007 à 18:32
david55
Membre
Avatar
7 posts
Inscrit le : 24/10/2007
merci
probléme resolu
c'est trés trés gentil de votre part

_______________________
Aucun
 
Réponse à : MyPHPupload - upload php sécurisé     Posté le 27/10/2007 à 19:04
Fidji
Visiteur
Avatar
Bonjour à tous

Sky, merci bcp pour ton code, je pense que ca va servir à pas mal de monde.
Par contre, j'aurais juste une petite question :

"Inclusion sans parametres d'entetes !"

... qu'est-ce que je fais alors ?

_______________________
 
Pages : [1] 2 3 4 5 6 7 8 9 10 11 12 13 14
Vous n'est pas connecté en temps que membre, parceque j'en ai marre du spam, SEUL les membres peuvent poster des messages sur le forum.

Nous  -  Plan du site  -  Informations légale  -  Contact  -  © Graphiks.net