question sur la sécurité

Eléphanteau du PHP | 14 Messages

13 juil. 2009, 15:37

Bonjour,
Très probablement ma question aura déjà été traitée quelque part, mais n'ayant pas réussi a dénicher des éléments de réponse intelligible pour moi (un bébé qui vient de naître face au php), voici ma question : le code ci-dessous (péniblement adapté d'un code trouvé sur le web et que je destine à une galerie photo) pose-t-il des problème de sécurité et si oui, pourquoi ?
Devant des avertissements de sécurité lus en plusieurs endroits (tutos, manuels et forums), évoquant de possibles intrusions via les URL quand on utilise $_GET et des moyens d'y remédier, mon esprit reste hébété :shock:.
Donc, un très grand merci par avance à quiconque prendra la peine de me répondre...
Voici le code (réduit à l'affichage de 3 photos, pour faire simple):
<?php
//fabrique l'adresse des grandes images en fonction du parametre
if (!isset($_GET['photo']))
$adressphoto = "autour_de_merbleue.jpg";
else{
  if ($_GET['photo'] == "autour_de_merbleue" )
  $adressphoto = "autour_de_merbleue.jpg";
  else if ($_GET['photo'] == "avecbbchouette" )
  $adressphoto = "avecbbchouette.jpg";
  else if ($_GET['photo'] == "baleines" )
  $adressphoto = "baleines.jpg";
} ?>
<div><p>
<?php	
//appelle les grandes images avec les miniatures
echo "<img src=\"images/" .$adressphoto ."\"style=\"position:absolute;top:70px;left:165px;\" alt=\"\" />";
?>
</p>
<p>
<a href="galerie2.php?photo=autour_de_merbleue" title=""><img src="images/minis/autour_de_merbleue.jpg" width="68" height="89" alt="" /></a><br />
<a href="galerie2.php?photo=avecbbchouette" title=""><img src="images/minis/avecbbchouette.jpg" width="68" height="48" alt="" /></a><br />
<a href="galerie2.php?photo=baleines" title=""><img src="images/minis/baleines.jpg" width="68" height="49" alt="" /></a><br />
</p>
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Mammouth du PHP | 2937 Messages

13 juil. 2009, 16:02

Pas de problèmes de sécurité a priori. Il faudrait juste assigner une valeur par défaut à la variable $adressphoto lorsque $_GET['photo'] est récupérée (imagine que je tape l'URL en envoyant le paramètre photo=titi).
<?php
if (!isset ($_GET['photo']))
$adressphoto = 'autour_de_merbleue.jpg';
else{
  if ($_GET['photo'] == 'autour_de_merbleue')
  $adressphoto = 'autour_de_merbleue.jpg';
  else if ($_GET['photo'] == 'avecbbchouette')
  $adressphoto = 'avecbbchouette.jpg';
  else if ($_GET['photo'] == 'baleines')
  $adressphoto = 'baleines.jpg';
  else
  $adressphoto = 'autour_de_merbleue.jpg';
}
?>
Soit dit en passant, lorsque les chaînes de caractères ne comportent pas de variable PHP à interpréter, il vaut mieux les entourer de guillemets simples (comme dans le bout de code ci-dessus) : on y gagne en rapidité. En outre, pour afficher l'élément img de la photo en grand, il est plus lisible de coder comme suit :
<img src="images/<?php echo $adressphoto ?>" style="position:absolute;top:70px;left:165px;" alt="" />
de quoi éviter d'avoir à échapper les guillemets. ;)

Eléphanteau du PHP | 14 Messages

13 juil. 2009, 18:00

Eh bien, Victor !
Voilà une réponse claire et compréhensible même au nouveau-né que je suis...
j'ai le pourquoi, le comment et même un petit conseil en plus.
Mille merci.
j'imagine que je dois cliquer sur "résolu"... dont acte.
Tarak