PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 16-07-2009 14:42:35

JulioBox
Membre
Inscription : 25-06-2009
Messages : 20

Question de sécurité avec $_POST

Bonjour
J'ai fait un système simple de loggin/pass, je ne désire pas le changer, juste savoir si c'est sécurisé ou pas, si non, merci de m'indiquer la faille et si elle est grande/dangereuse et si un utilisateur peut vraiment faire des choses (même avec WebDeveloppeur, l'addon de firefox par exemple). Si oui c'est sécu alors tant mieux :)

Voici le code important :

<?php
require("config.inc.php");
$logginok=0;

if (isset($_POST['submit']))
{
 for ($i=0;$i<sizeof($users);$i++)
 {
  if ($users[$i]==$_POST['username'] && $passw[$i]==$_POST['password'])
  {
   $logginok=1;
  }
 }
 if ($logginok==1)
 {
 ...// actions admin ici
 }
}
...
?>

config.inc.php contient :

<?php
...
 $users[0]="defaultname";
 $passw[0]="defaultpass";
 $users[1]="defaultname2"; 
 $passw[1]="defaultpass2";
?>

Bien sur le tout derrière un formulaire !

<form name="monform" method="post" action="<?php echo $_SERVER['PHP_SELF'] ;?>">
 <label id="username">Nom</label><br />
 <input type="text" name="username"><br />
 <label id="password">Pass</label><br />
 <input type="password" name="password"><br>
 <input type="submit" name="submit" value="Entrer">
</form>

Merci d'avance à tous !

Hors ligne

#2 17-07-2009 08:21:45

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Question de sécurité avec $_POST

Salut,

Vaste sujet... smile

La règle c'est que $_POST venant de l'utilisateur, celui-ci peux contenir tout et n'importe quoi mais surtout des choses malveillantes.
Donc il faut contrôler ces données en fonction de leur utilisation.

Dans ton cas, tu n'intègre pas $_POST dans une requête SQL donc tu ne crains pas d'injection SQL, tu ne l'affiche pas non plus dons pas de risque XSS, tu ne l'utilise pas dans un mail donc pas de risque non plus de ce coté là.

Tu le compare à d'autres valeurs (qui elles sont sures apparemment) mais tu fait tu fait une comparaisons des valeurs uniquement ( == ) or si $_POST['username'] et $_POST['password'] ont la valeur "TRUE" d'assignée, le test sera bon... !!

Il est donc mieux de faire une comparaison de valeur et de type :

if ($users[$i] === $_POST['username'] && $passw[$i] === $_POST['password'])

De plus une vérification par !empty des deux valeurs sera mieux qu'un simple isset.

if (!empty($_POST['submit']) && !empty($_POST['password'])

Reste quand même qu'apparemment  le pass n'est pas hashé et est passé en clair donc il peut être intercepté.

Voila ce que je peux en dire au vue de cette portion de code.

A+


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#3 17-07-2009 08:24:42

JulioBox
Membre
Inscription : 25-06-2009
Messages : 20

Re : Question de sécurité avec $_POST

Merci pour cette réponse, j'ai essayé en mettant "TRUE" mais ça ne passe pas ! OUF ! J'imagine que le php compare "TRUE" en tant que chaine et non booleen.
edit : j'ai laissé == pour le moment.

Dernière modification par JulioBox (17-07-2009 08:26:13)

Hors ligne

#4 17-07-2009 08:36:03

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Question de sécurité avec $_POST

teu teu teu... smile

Sur que si tu as mis TRUE dans le champs input, a l'arrivée ce sera une chaine de caractères contenant "true".
Mais il y a d'autres moyens de balancer un véritable TRUE dans $_POST.
... C'est toi qui vois ... smile


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#5 17-07-2009 08:37:28

JulioBox
Membre
Inscription : 25-06-2009
Messages : 20

Re : Question de sécurité avec $_POST

o_O je peux balancer un TRUE dans un $_POST sans passer par le INPUT ? C'est quoi ce truc hmm

Hors ligne

#6 17-07-2009 08:41:05

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Question de sécurité avec $_POST

Il est tout à fait possible d'envoyer des $_POST sans utiliser de formulaire !
Mais c'est une autre histoire... smile


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#7 17-07-2009 08:46:30

JulioBox
Membre
Inscription : 25-06-2009
Messages : 20

Re : Question de sécurité avec $_POST

J'aime les histoires, et celle-ci m'intéresse afin d'éviter d'autres erreurs de sécurité, je vais donc mettre === mais j'aimerais tout de même en savoir plus sur cet envoie de $_POST. On dirait que tu essaies d'éviter d'en parler, est-ce un secret défense ?

Hors ligne

#8 17-07-2009 09:01:46

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Question de sécurité avec $_POST

est-ce un secret défense ?

Oui c'est pour éviter l'invasion Russe... big_smile


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#9 17-07-2009 09:24:29

JulioBox
Membre
Inscription : 25-06-2009
Messages : 20

Re : Question de sécurité avec $_POST

Non mais je suis sérieux, ya pas un MP possible ? Un mail ? J'ai pas envie de rester dans l'ignorance, savoir que ça, ça existe, que mon == pouvait être dangereux et ne pas savoir, je vais mal dormir pendant 10 ans là Alain ! big_smile

Hors ligne

#10 17-07-2009 10:01:01

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Question de sécurité avec $_POST

Cela n'est quand même pas si simple et je n'ai pas envie de m'étaler sur ce sujet qui dépasse quand même le cadre d'un forum pour débutant.
Tu peux cependant te documenter sur les headers HTTP (en php ou pas d'ailleurs).


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#11 17-07-2009 10:16:36

JulioBox
Membre
Inscription : 25-06-2009
Messages : 20

Re : Question de sécurité avec $_POST

sad okok je vais acheter des somnifères alors ...
Merci pour tout le reste

Dernière modification par JulioBox (17-07-2009 10:54:10)

Hors ligne

#12 17-07-2009 10:54:18

JulioBox
Membre
Inscription : 25-06-2009
Messages : 20

Re : Question de sécurité avec $_POST

J'ai trouvé comment envoyer du POST sans formulaire MAIS je ne peux tout de même pas envoyer de TRUE, en tout cas, ça ne fonctionne tout de même pas...
Vite fait testé avec :

$req = "username=".TRUE."&password=".TRUE;

et

$req = "username=TRUE&password=TRUE";

> edit : l'url passée est en fait : &username=1&password=1 DONC je me demande vraiment si c'est possible de passer TRUE tongue
Rien ne fonctionne :]
Une idée Alain pour faire passer ce TRUE correctement  ?
Sinon il me semble qu'on ne peut pas passer de TRUE validé avec un == de cette manière.
Merci

Dernière modification par JulioBox (17-07-2009 11:37:58)

Hors ligne

#13 17-07-2009 12:30:09

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Question de sécurité avec $_POST

Sinon il me semble qu'on ne peut pas passer de TRUE

Si tu le dis...

Une idée Alain pour faire passer ce TRUE correctement  ?

Non car je n'ai jamais eu à le faire, mais il y a tellement de façons de procéder, et j'ai pas envie de chercher.

Si tu ne veux pas utiliser === libre à toi, mais c'est une sécurité supplémentaire qui ne coute rien.

Comme je te l'ai déjà dis, c'est toi qui voie.


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#14 17-07-2009 13:02:17

JulioBox
Membre
Inscription : 25-06-2009
Messages : 20

Re : Question de sécurité avec $_POST

C'est pas "Si je le dis", je viens de tester et sans le bon pass/user on ne passe pas malgré le ==, je vais TOUT DE MEME mettre === mais voilà...
Tu me dis une chose, je le test et ça ne fonctionne quand même pas. Peut etre une configuration/option de php5 fait que ... aucune idée.
Bref, si quelqu'un sait passer un TRUE pour que la faille fonctionne, qu'il se manifeste, mon script reste donc blindé malgré sa simplicité !

Hors ligne

Pied de page des forums