Protection de variable PHP

Petit nouveau ! | 2 Messages

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 !

ViPHP
ViPHP | 2287 Messages

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
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 737 Messages

20 févr. 2009, 15:29

Salut,

L'autre astuce est de switcher ta variable.

Mega
;)

Petit nouveau ! | 2 Messages

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>

Mammouth du PHP | 737 Messages

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
:)