Protection de variable PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Protection de variable PHP

par Megadeth » 22 févr. 2009, 22:32

Salut,

J'entends que ta variable ne peut prendre que quelques types de valeur et que toute autre valeur est comprise comme erronée.

Ci-dessous un exemple quand j'ai géré les langues pour un site.
$lang = $_GET["lang"];//je récupère la valeur lang de l'url
switch($lang) { //je teste la valeur
case "fr": echo "je fais ci"; break; 
case "en": echo "je fais ca"; break; 
default :header("Location: index.htm"); break;//tous les autres cas, tu éjectes ;) 
} 
J'ai pas détaillé ton code, mais j'ai cru voir que le switch() était utilisé pour la variable $page.

A toi de jouer ;)

Mega
:)

par Asbjørn » 20 févr. 2009, 17:14

Merci pour vos réponses rapides ! Qu'entends-tu Megadeth par switcher la variable ? Je me permet de vous montrer ma page index.php, je débute dans le milieu donc si vous avez 2min pour jeter un coup d'oeil, ça serait vraiment sympa !
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Alice Locoge</title>

<link rel="stylesheet" type="text/css" href="css/style.css" />
<link rel="stylesheet" type="text/css" href="css/lightbox.css" />

<!-- Do not edit IE conditional style below -->
<!--[if gte IE 5.5]>
<style type="text/css">
#motioncontainer {
width:expression(Math.min(this.offsetWidth, maxwidth)+'px');
}
</style>
<![endif]-->
<!-- End Conditional Style -->

<script type="text/javascript" src="js/motiongallery.js"></script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="js/lightbox.js"></script>

<script type="text/javascript">
<!--
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a)&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a.indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a;}}
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>

<style type="text/css">
#conteneur{
margin-left:auto;
margin-right:auto;
width:781px;
height:515px;

<?php if(isset($_GET['page'])) {
$monFond = $_GET['page'];
}
else {
$monFond = 'nomimage';
}
?>

background-image:url(./images/<? echo $monFond; ?>.gif);
background-repeat: no-repeat;

}

body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color:#FFFFFF;
background-color:#000000;
background-attachment: scroll;
background-repeat: repeat-x;
background-position: left top;
}
</style>

</head>

<body>
<script language="JavaScript">
<!--
function makevisible(cur,which) { if(document.getElementById) {
if (which==0) { if(document.all) { cur.filters.alpha.opacity=100 } else { cur.style.setProperty("-moz-opacity", 1, ""); } }
else { if(document.all) { cur.filters.alpha.opacity=80 } else { cur.style.setProperty("-moz-opacity", .8, ""); } } }
}

<?php if (!isset($_GET['page'])) $page= 'accueil'; else $page= $_GET['page'];
$page_min="album/".$page."/miniatures";
echo "dir_min = '$page_min'; ";
?>

nom_photo = new Array;
desc_photo = new Array;

/******
FONCTION POUR CHANGER LES PHOTOS
******/
function changeImage(nom_image)
{
document.image_dyn.src=""+dir_gran+"/"+nom_image + "";
}
<?
$a = 0;
$handle = opendir($page_min);
while (($file = readdir())!=false) {
clearstatcache();
if($file!=".." && $file!=".")
{
if(preg_match('/\.jpg$/', $file))
{
echo "nom_photo[$a] = '$file'; ";
$a++;
}
}
}
closedir($handle);
?>
//->
</script>

<div id="etres"><a href="index.php?page=etres&contenu=galerie" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('etres','','images/menu_etres.gif',1)"><img src="images/menu_etres_off.png" name="etres" width="90" height="350" border="0" id="etres2" /></a></div>

<div id="animaux"><a href="index.php?page=animaux&contenu=galerie" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('animaux','','images/menu_animaux.gif',1)"><img src="images/menu_animaux_off.png" name="animaux" width="90" height="350" border="0" id="animaux2" /></a></div>

<div id="conteneur">

<div id="centre">

<div id="menu">
<a href="index.php?page=accueil">accueil</a>
<a class="a0" href="index.php?page=parcours">parcours</a>
<a class="a0" href="index.php?page=agenda">agenda</a>
<a class="a0" href="index.php?page=contact">contact</a>
</div>

<div id="droite">

<?php if (!isset($_GET['contenu'])) $contenu= 'description'; else $contenu= $_GET['contenu'];
switch($page){
}

if ($contenu=='description'){
include ($page.'.html');
}
else if($contenu=='galerie'){
?>

<div id="motioncontainer">
<div id="motiongallery" style="position:absolute;left:0;top:0;white-space: nowrap;">
<nobr id="trueContainer">

<script type="text/javascript">
<!--
for(i=0;i<nom_photo.length;i++)
{
document.write("<a href=# rel=lightbox><img class=\"apercu\" name=\""+nom_photo+"\" src=\""+dir_min+"/"+nom_photo+"\" onMouseover=\"makevisible(this,0)\" onMouseout=\"makevisible(this,1)\" /></a>");
if(i!=nom_photo.length-1)
document.write("&nbsp&nbsp&nbsp;");
}
//->
</script>
</nobr>
</div>
</div>

<? } ?>

</div>
</div>
</div>

</body>
</html>

par Megadeth » 20 févr. 2009, 15:29

Salut,

L'autre astuce est de switcher ta variable.

Mega
;)

par Calimero » 20 févr. 2009, 15:27

Bonjour,

Il faut absolument contrôler le contenu des variables qui viennent de l'extérieur de ton script avant de les utiliser.

Voici ce que tu fais :
<?php
include($_GET['page']); // C'est mal !
Voici ce que tu pourrais faire à la place :
<?php
if(strpos($_GET['page'],'/')===false) include($_GET['page']);
else include('erreur.php'); // Si notre variable contient un caractère interdit, on envoie sur une page d'erreur

Protection de variable PHP

par Asbjørn » 20 févr. 2009, 15:19

Hej !

Mon serveur a été bloqué par mon hébergeur (1&1), parce que la structure index.php (plus précisément la variable $page), n'est pas sécurisée et qu'on s'amuse à envoyer un grand nombre de spam via ce site...

J'ai eu beau chercher sur le net une quelconque protection, je n'ai rien trouvé. Pour le moment je n'ai rien mis en ligne, ça ne va aider personne mais si vous avez déjà eu ce genre de soucis... Je suis preneur d'idées !