J'ai fait le même formulaire de téléchargement pour le téléchargement de photos comme here. Est-ce tout ce que je peux faire pour protéger mon site web ou dois-je ajouter quelque chose? Merci beaucoup.Est-ce tout ce que je peux faire pour rendre ce formulaire de téléchargement "sûr"?
Répondre
Je dirais que non. Il y a des contrôles là-dedans pour restreindre le type du fichier en cours de téléchargement:
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
....
Ce « type » est fourni par le navigateur et ne peut être invoqué pour des raisons de sécurité. Quelqu'un pourrait facilement pirater quelque chose ensemble qui a envoyé un fichier exécutable avec un type de "image/gif" et le script serait heureux de l'accepter.
Une meilleure vérification serait d'utiliser quelque chose comme getimagesize
ou l'une des autres fonctions GD pour vérifier qu'il s'agit bien d'une image.
Pouvez-vous me donner un exemple de fichier dont le type est .gif, .jpeg ou .jpg et ce n'est pas une image? Merci, parce que je suis très curieux. –
@hey, bien sûr - faites un clic droit sur un fichier exe, choisissez renommer, et changez le "exe" en "gif" :) –
Je pense que vous avez tort, car il ne me permet toujours pas de télécharger le fichier. Essayez-vous. Ou je fais quelque chose de mal. –
i ont cette ancienne fonction que je continue à utiliser pour créer une image unique:
<?
$portal_name = 'yoursite name that will be written as watermark';
/**
*
* @param $only_file_name if isset, returns two files as array with paths to folder where they are saved
* @param $type_action if isset crop, crops the images
* @param $t_h = thumbnail height
* @param $t_w = thumbnail width
* @param $n_h = big height
* @param $n_w = big width
* @param $path1
* @param $path2
* @param $param_file_name = name your file, e.g. rand(0,50); or better time();
* @param $file_object = the $_FILES['filename'];
* @param $file_size = file size in kb
* @param $thumb = shall i crop the thumbnail ?
* @param $watermarkon = use watermark or not
*/
function Make_Single_Picture($only_file_name="on",$type_action="crop", $t_h, $t_w, $n_h, $n_w, $path1, $path2, $param_file_name, $file_object, $file_size, $thumb="crop", $watermarkon="yes") {
global $portal_name;
$Picture=$file_object;
$errors=0;
$image =$Picture["name"];
$uploadedfile = $Picture['tmp_name'];
$watermark = imagecreatefrompng("watermark.png");
imagealphablending($watermark, true);
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
if ($image)
{
$filename = stripslashes($Picture['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg")
&& ($extension != "png"))
{
return FALSE;
$errors=1;
}
else
{
$size=filesize($Picture['tmp_name']);
if ($size > $file_size*1024)
{
return FALSE;
$errors=1;
}
if($extension=="jpg" || $extension=="jpeg")
{
$uploadedfile = $Picture['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png" || $extension=="gif")
{
$uploadedfile = $Picture['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
}
else
{
$src = imagecreatefromgif($uploadedfile);
}
list($width,$height)=getimagesize($uploadedfile);
if ($type_action=="crop") {
$newwidth=$n_w;
$newheight=$n_h;
if ($width<$n_w) {
$newwidth=$width;
}
if ($width<$n_h) {
$newheight=$height;
}
$tmp=imagecreatetruecolor($newwidth,$newheight);
}
else {
$newwidth=$n_w;
$newheight=($height/$width)*$newwidth;
if ($width<$n_w) {
$newwidth=$width;
}
if ($width<$n_h) {
$newheight=$height;
}
$tmp=imagecreatetruecolor($newwidth,$newheight);
}
if ($thumb=="crop") {
$newwidth1=$t_w;
$newheight1=$t_h;
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);
}
else {$newwidth1=$t_w;
$newheight1= ($height/$width)*$newwidth1;
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);}
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight, $width,$height);
$dest_x = ($newwidth - $watermark_width) + 20;
$dest_y = ($newheight - $watermark_height) + 35;
if ($watermarkon=="yes") {
$color_of_the_text = imagecolorallocate($tmp, 255, 255, 255);
// path to the font that you want to use when printing watermark
$font = "txt_cache/GILLUBCD.TTF";
imagettftext($tmp, 16, 0, $dest_x, $dest_y, $color_of_the_text, $font, $portal_name);
}
imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1, $width, $height);
$time_and_id = ''.$param_file_name.'_'.$kolko.'';
$image_name=$time_and_id.'.'.$extension;
$filename = "$path1". $image_name;
$filename1 = "$path2". $image_name;
imagejpeg($tmp,$filename,100);
imagejpeg($tmp1,$filename1,100);
imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
imagedestroy($watermark);
if ($only_file_name=="on") {
return array('huge'=>$image_name, 'thumb'=>$image_name);
} else {
return array('huge'=>$filename, 'thumb'=>$filename1);
}
}
}
}
/**
*
* @param entire array of files $files to be used BEFORE foreach
* @return will return a valid array of files.
* @author vertazzar
*/
function fixFilesArray(&$files)
{
$names = array('name' => 1, 'type' => 1, 'tmp_name' => 1, 'error' => 1, 'size' => 1);
foreach ($files as $key => $part) {
$key = (string) $key;
if (isset($names[$key]) && is_array($part)) {
foreach ($part as $position => $value) {
$files[$position][$key] = $value;
}
unset($files[$key]);
}
}
}
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
?>
utilisation:
$files = Make_Single_Picture('off', 'crop', 200,100,800,600,'path/big/', 'path/small', time(), $_FILES['filename'], 1000, 'crop', 'yes');
<? echo $files['huge']; echo $files['thumb']; ?>
REMARQUE: cette fonction/code est légèrement modifié de la version originale, parce que Les variables étaient sur d'autres langages, donc vous comprenez mieux ce qu'est ce que vous voulez, donc vous pourriez vouloir tester d'abord.
- 1. Tout ce que je peux faire pour améliorer l'utilisation de 'Solution Explorer' dans VS2008?
- 2. Lorsque j'utilise Finch pour lire de l'audio, est-ce que je peux faire tout ce qu'OpenAL peut faire?
- 3. Comment est-ce que je peux rendre à un cubemap?
- 4. Est-ce que ce fil est sûr?
- 5. Est-ce que je peux rendre ce compte MySQL avec COUNTs plus efficace?
- 6. Comment est-ce que je peux simplifier ce tableau?
- 7. Comment est-ce que je peux simplifier ce jquery répétitif?
- 8. Est-ce que ce fil de code ruby est sûr?
- 9. Comment est-ce que je peux faire ce tableau multidimensionnel et ces boucles foreach fonctionnent ensemble?
- 10. Comment est-ce que je peux rendre le paysage de vue d'UIViewController dans la mémoire?
- 11. Comment est-ce que je peux énumérer DataTable?
- 12. Visual Studio Designer n'est pas satisfait de mon TabControl, tout ce que je peux faire? (.NET/C#)
- 13. Que vais-je faire avec ce AppID?
- 14. Comment est-ce que je peux rendre les éléments HTML unhighlightable?
- 15. Comment est-ce que je peux rendre automatiquement des partiels en utilisant markdown dans Rails 3?
- 16. Comment est-ce que je peux rendre ce vieux code JavaScript/ASP classique (propre) non intrusif, en utilisant JQuery?
- 17. Comment est-ce que je peux faire un Custom QueryInterface pour .NET 3.5?
- 18. Quels livres m'aideront à apprendre tout ce que je peux sur SSL/PKI?
- 19. Est-ce que Facebook a une sorte d'API que je peux faire un client?
- 20. est-ce que quelqu'un voit comment je peux rendre cela plus efficace?
- 21. svn update: est-ce que je peux itérer les résultats?
- 22. Comment est-ce que je peux faire défiler des événements de mouseover de déclenchement de page?
- 23. Comment est-ce que je peux brique l'émulateur d'Android?
- 24. Comment est-ce que je peux patcher des assemblys .NET?
- 25. Qu'est-ce que le composant Delphi Gantt/Scheduler est-ce que je peux utiliser?
- 26. Comment est-ce que je peux plier un objet d'affichage?
- 27. Comment est-ce que je peux centrer et encadrer ce menu, tout en travaillant quand redimensionné par le navigateur?
- 28. Comment est-ce que je peux permalink lettre majuscule (majuscule)?
- 29. Comment puis-je faire ce travail en profondeur tout
- 30. Est-ce que la syntaxe Sql2008 MERGE est ce que je devrais faire, ici?
Pourquoi continuez-vous à demander une variation de la même question? http://stackoverflow.com/questions/3114147/100-safe-photo-upload-script –
Ce n'est pas la même chose. –