8719 sujets

Développement web côté serveur, CMS

Salut tout le monde ^^

Je me retrouve à vouloir autoriser les joueurs à personnaliser un peu leur compte en leur permettant d'ajouter un avatar perso.

Dans ce que j'ai pu en lire, une image peut être une source importante de faille et s'avère assez complexe à vérifier en cadeau. Le détail c'est que les informations que je trouve sur internet date de 2004~2006 pour la grande majorité et que j'ai appris à me méfier des informations de plus de deux ans d'âge.

Donc voilà, comment faire pour sécuriser au maximum ?

Plutôt hébergement de l'image chez moi ? ou ailleurs et juste url chez moi ?

Comment faire pour vérifier que ça soit vraiment une image (en php), que sa taille soit correcte (pas envie d'avoir un forum avec des avatars de 2000 px de large à redimensionner à 100,...) ?

Bref, on gère ça comment et proprement l'envoi d'images ?
Salut,

Si tu ne veut pas te prendre la tête utilise Gravatar ?

Sinon pour sécuriser le téléchargement d'images :

- vérifier la taille du fichier côté client et côté serveur
- valider le format via l'extension et via la fonction getimagesize()
- renommer le fichier (pour éviter caractères interdit + nom de fichier top grand + injection html...)
Pour ce qui est de la sécurité, je ne sais pas trop, tu pourrais tester la taille de l'image avant d'en faire quelquechose.

Concernat les volumes, tu pourrais implémenter un cropper resampler en html5, ainsi, l'image qui est uploadée est directement à la taille - résolution que tu souhaites.

J'ai utilisé cette possibilité il ya peu et publié un exemple ici:
Découper, redimensionner, rééchantillonner et uploader une image avec html5.


Si ça peut t'aider...
Gravatar, il est hors de question que j'impose à mes joueurs (et à ceux venant sur mon forum pro) de s'inscrire sous wordpress (le principe était sympa, s'il servait pas en partie à gonfler le nombre d'utilisateur de wordpress^^)
Salut,
Voici un code qui pourrait t'aider, avec un bout de html pout tester :

function image($nom, $chemin){
	if(isset($_FILES[$nom])){
		if($_FILES[$nom]['error'] === 0){
			$max_size = 2097152; // Taille max autorisée
			if($_FILES[$nom]['size'] < $max_size){
				$extension = strtolower(pathinfo($_FILES[$nom]['name'], PATHINFO_EXTENSION)); // Vérification de l'extension
				$extension_ok = array('jpg', 'jpeg','gif', 'png'); //extension autorisée
                                //Si le dossier existe pas on le créer				
                                if(in_array($extension, $extension_ok)){
					$dossier = $chemin;
					if(!is_dir($dossier)){
						@mkdir($dossier);
					}
                                        // On renomme l'image
					$nom = time().'.'.$_FILES[$nom]['name'];
                                        // On la déplace
					$depl = move_uploaded_file($_FILES[$nom]['tmp_name'], $dossier.$nom);
					if($depl){
						echo $depl;
					}
					else{
						$message = 'Le téléchargement de votre fichier ne s\'est pas éffectué.';
						return $message;
					}		
				}
				else{
					$message = 'Votre fichier ne posséde pas une bonne extension. Voici les extensions autorisées : <br />';
					$i = 0;
					foreach($extension_ok as $ok){
						$message .= $ok;
						if($i < count($extension_ok)-1){
							$message .= ', ';
						}
						$i++;
					}
					return $message;
				}
			}
			else{
				$message = 'Votre fichier est trop volumineux, merci de le compresser.';
				return $message;
			}
		}
		else if($_FILES[$nom]['error'] === 1 || $_FILES[$nom]['error'] === 2) {
			$message = 'Votre fichier est trop volumineux, merci de le compresser.';
			return $message;
		}
		else if($_FILES[$nom]['error'] ===4){
			$message = false;
			return $message;
		}
		else{
			$message = 'Erreur lors du transfert du fichier, merci de recommencer ultérieurement.';
			return $message;
		}
	}
}
if($_POST['envoyer']){
	$test = image('fichier','montestimage');
	echo $test;
}


<form action="fonction_image.php" method="post">
<input type="file" name="fichier" />
<input type="submit" name="envoyer" />
</form>

Il faut donner le name de l'input type file dans ton formulaire et le nom du dossier ou tu veux placer les images.
Tu peux faire des modification pour l'adapter comme tu le souhaite.

++++