Sécurité : eviter les injections sql et les accès aux pages sans autorisations spécial popup

Contenu du snippet

Cas pratique :
-une interface de connection : login et mot de passe, une fois connecté un popup se lance et ouvre la page qui correspond au login/mot de passe.
le gros problème est d'eviter l'accès aux pages, si elle sont lancée en dehors du popup.

l'idée est de donner une clé aléatoire à chaque connexion, et de l'enregistrer dans une table (log) (avec l'adresse ip et le timestamp) avant de lancer le popup.

Une fois le popup ouvert, tester si la clé a été deja validée, dans ce cas : intru ! ! , sinon aller dans la table (log) et valider la clé pour qu'elle ne soit plus utilisable.

Source / Exemple :


dans la page d'authentification :
<?
$taille = rand(4, 8);
$c1 = array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z', 'dd', 'ff', 'll', 'mm', 'nn', 'pp', 'rr', 'ss', 'tt');
$c2 = array('a', 'a', 'a', 'e', 'e', 'e', 'i', 'i', 'o', 'o', 'u', 'u', 'y');
$code="";
//generation du code
for ($i=1;$i<$taille;$i++) $code .= ($i%2==0)?$c1[rand(0, count($c1)-1)]:$c2[rand(0, count($c2)-1)];
//on peut encore ajouter un nombre, pour augmenter les possibilités
$code .= "" . rand(0, 99);

$ip=$_SERVER["REMOTE_ADDR"];

$code= MD5($code);

$SQL_nouveau = <<<FDT
INSERT INTO `log` ( `clef` ,  `valide` , `ip`) 
VALUES ( '$code','', '$ip');
FDT;

$result=mysql_query($SQL_nouveau);

?>
<script language=javascript>

window.open(theURL+"?code=<?echo$code;?>",'popup',
  'toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=0, copyhistory=0, menuBar=0,fullscreen=0,width='+screen.width+', height='+screen.height);

?>

---------------------

dans la page popup.php

$SQL_02 = <<< FDT
SELECT count(valide) FROM log where clef='$code' and ip='$mon_ip' and valide="0000-00-00 00:00:00";
FDT;
if($result=mysql_query($SQL_02)){
while($ligne=mysql_fetch_row($result)){
$nbr=	$ligne[0];

}
}

$connect="0";

if($nbr=="1")
{
$connect="1";

$modif_reponse = mysql_query("UPDATE `log` SET 
`valide` = NOW() 
 WHERE clef ='$code'") or die("database connexion error1");

}
else
{
$connect="0";

die("connexion refusée");

}

Conclusion :


merci de donner vos comm

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.