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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 207 fois - Téléchargée 17 fois

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

Ajouter un commentaire

Commentaires

Messages postés
27
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
17 octobre 2007

alors,
je vais etre bref;
la page authentification.php (verification du login et mdp):
<?php (ou <?, je vois pas la différence)

function password_encode($filter, $str)
{
$filter = md5($filter);
$letter = -1;
$newpass = '';

$strlen = strlen($str);

for ( $i = 0; $i < $strlen; $i++ )
{
$letter++;

if ( $letter > 31 )
{
$letter = 0;
}

$neword = ord($str{$i}) + ord($filter{$letter});

if ( $neword > 255 )
{
$neword -= 256;
}

$newstr .= chr($neword);

}

return base64_encode($newstr);
}

$username = $_POST['username'];
$password = $_POST['password'];

$filtre= "toto";

$log_enc=password_encode($filtre, $username);

$mdp_enc=password_encode($filtre, $password);

?>

<SCRIPT language="JavaScript1.1">

larg = screen.width;
haut = screen.height;

fen = window.open("popup.php?code1=<?echo$log_enc;?>&code2=<?echo$mdp_enc;?>",'page',
'toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=0, copyhistory=0, menuBar=0,fullscreen=0,width='+screen.width+', height='+screen.height);
</SCRIPT>

page popup.php

<title></title>
<?

$log_enc=$_GET['code1'];
$mdp_enc=$_GET['code2'];

?>
<FRAMESET COLS="125,*" FRAMEBORDER="no" BORDER="0" FRAMESPACING="0">
<FRAME SRC="menu.html" name="gauche" scrolling=no>

<FRAME SRC="accueil.php?code1=<?echo$log_enc;?>&code2=<?echo$mdp_enc;?>" name=corps>
</FRAMESET>
</FRAMESET>

accueil.php:

<?php
session_start();

$log_enc= $_GET['code1'];
$mdp_enc= $_GET['code2'];

$_SESSION['login']=$log_enc;
$_SESSION['mdp']=$mdp_enc;

?>
<script language=javascript>

window.location.replace("page1.php");

</script>

là j'ai réussi a mettre en session le login et le mot de passe, en crypté

je vous laisse deviner la suite ;)

merci a MERKHALED pour les fonctions de cryptage/décryptage ca été très utile
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Nix est comme tout le monde : on supprime un code quand on a de bonnes raisons de le faire. Dans ce cas, pas de soucis. Sinon, soucis. Normal quoi.
Bon...on arrête les commentaires n'ayant aucun rapport avec ce code.
PHPAJAX, t'en es où de tes déboires avec les sessions ?
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
35
et au moins entre le 06 et le 08 l'auteur aura pris conscience de la domination du <?php sur le <?, meme si ca ne sert a personne

(il parait que nix n'aime pas que les admins suppriment trop de codes (il parait) )
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
JE Peux supprimer des commentaires ;-)
Non ce n'est pas nouveau, ça a tjrs été ainsi.

Oui il y a un anti-flood.
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
ah on peux supprimer des commentaires ?
c'est nouveau ca nan ?
Sinon (j'ai pas testé pour pas polluer) mais est-ce qu'il y a un laps de temps entre deux posts de commentaires ? car ca risque de vite flooder nos boites non ?
Afficher les 45 commentaires

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.