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 116 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

malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

ça n'a aucun rapport avec les injections SQL ton truc.
Et dans les pages à accès restreint, tu fais quoi au juste? Ton code est très incomplet, là.
En l'état, je vois mal l'avantage par rapport à une technique plus classique de session, ou de HTTP Realm.
merkhaled
Messages postés
26
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
8 octobre 2007
-
dans le popup, j'ai une frame a gauche : menu et a droite : corps,

le frame se lance avec le passage du code en GET, je le récupère dans la frame du menu, et je verifie dans la bdd si ce code est "validé" ou pas, s'il est validé, c'est qu'il a deja été utilisé, et donc je met un et s'il na pas été activé, je met et je met a jour la bdd (jactive la clé),
dans toutes les pages, si jai besoin dune connection a la bdd, jai un include(connect.php) qui contient les infos de connections, et aussi qui vérifie si top.parent.getElementById("droit").value==1 ou sinon redirection vers intru.php ;), donc pour avoir la connection a la bdd, il faut etre dans la frame qui se lance de mon site, et avec un code de verification. jespère que j'été clair :)
merkhaled
Messages postés
26
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
8 octobre 2007
-
dans la page connect.php :
--------------------------

<SCRIPT LANGUAGE="JavaScript">

var test=top.parent.gauche;
if(!test)
{
top.window.location.replace("intru.php");

}
else
if(top.parent.gauche.document.getElementById("droit").value!="1")
{
top.window.location.replace("intru.php");
}

</script>
codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1 -
le probleme c'est que certains utilisateurs (type Aol a ce qu'il parrait), ont une ip qui change aléatoirement donc ton truc est moyen pour ca.
Il faut travailler sur les sessions, c'est apparement l'une des meilleures solutions pour le moment.

Niveau 'travail sur la sécurité', il n'y a pas de rapport comme dirait Malalam.

A vrai dire il n'y a pas vraiment de sécurités complètement sures pour une protection de fichier / repertoire (outre le htaccess). Les sessions peuvent être détournée, une ip aussi, etc...

Pour ton code, il y a des choses bizarres, dans ta popup, tu utilise la variable $code et $mon_ip ainsi que la resource sql n'ont pas été crées donc si je reprends ton code comme celui que tu a donné, ca ne marchera pas.
Les codes comme celui ci sont déjà légions sur phpcs, si tu veux te faire remarquer, essaye de faire un code qui dépasse celui des autres, sinon il tombera dans le code basique et sera supprimé, ce qui est compréhensible.

Re-travaille dessus et met-le à jour, ca peux aboutir à quelque chose d'efficace.
Par contre, change de titre :p
merkhaled
Messages postés
26
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
8 octobre 2007
-
j'ai juste donné une idée, j'ai pas donne un code qui marche, celà n'empeche que ca marche très bien chez moi, je ne sait pas si tu as vraiment compris l'idée...

regarde la demo sur http://ns25643.ovh.net/ , ca ne marche que sous IE, et il faut que tu authorise les popup.

et je pari que tu pourra pas afficher des pages (qui communiquent avec la bdd) de ce site, sans passer par le popup, c'est à dire sans se logger correctement.

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.