Problème déstruction de cookie

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème déstruction de cookie

par goeb » 01 juin 2006, 16:53

salut,

le motif de cette restriction c'est que les headers HTTP doivent être envoyés au tout début de l'échange serveur-navigateur, et le moteur PHP se charge d'envoyer les headers HTTP si toi tu ne le fais pas.

donc dès que tu envoies des caractères (<html>, des espaces, ...), PHP est obligé d'envoyer lui-même les headers HTTP avant.

et après, c'est trop tard pour que toi tu envoies les tiens à toi.

et les cookies, ça se transmet à l'intérieur des headers HTTP, et les sessions aussi, puisqu'elle utilisent généralement des cookies.

par skystef » 01 juin 2006, 14:13

Mais j'envois pas de HTML pourtant avant de détruire mon cookie?!
Un simple espace peut en être la cause. Dans ton code, j'en vois un...
Bon ben j'ai enfin trouvé, c'était la ligne blanche au début de mon code. J'ai finalement opté pour travailler avec des sessions et si jamais je fait session_start() avec un epsace blanc plouf plus rien ne marche.

c'est pénible... quelqu'un connaît le motif de cette réstriction? :?

par charabia » 30 mai 2006, 16:29

Mais j'envois pas de HTML pourtant avant de détruire mon cookie?!
Un simple espace peut en être la cause. Dans ton code, j'en vois un...

par skystef » 30 mai 2006, 15:59

Mais j'envois pas de HTML pourtant avant de détruire mon cookie?!

par momox » 30 mai 2006, 15:53

Les cookies, c'est comme les sessions, ne jamais envoyer une seule donnée avant telle que du html, sinon t'es sur de planter ton script.
@+

Problème déstruction de cookie

par skystef » 30 mai 2006, 15:48

Bonjour, j'ai un petit problème qui provoque une énorme faille de sécurité dans le site que je suis en train de réaliser.

J'ai crée une interface d'administration, j'ai donc une page qui demande un login + mot de passe et quand on valide on se retourve sur un script php pour vérifier si les données sont correctes.

Je crée en fait un cookie et si le mot de passe ou le login sont faux je le détruit. Sans ce cookie, mon interface d'administration affichera Accès Interdit sinon elle affiche ce qu'elle doit afficher...

Voici le code du script de vérification :

Code : Tout sélectionner

<? setcookie('admin','toto',time()+3600*24*365);?> <?php include('include/base.php'); /*Varialbes sur les informations du client*/ if(isset($_POST['login']) && isset($_POST['password']) && !empty($_POST['login']) && !empty($_POST['password'])){ $login=$_POST['login']; $pass=$_POST['password']; /**********************************************/ $resultat=mysql_query("select * from admin where login='".$login."' and password='".$pass."'"); $nbresult=mysql_num_rows($resultat); if($nbresult==0){ setcookie('admin','toto',0); echo ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); echo("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); echo("<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />"); echo ("<html><body>"); echo "connexion refusée, <a href=\"http://skystef.infoliens.com/test/\">Cliquez-ici</a>"; print"</body></html>"; } else{ echo ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); echo("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); echo("<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />"); echo ("<html><body>"); echo ("<br/><br/><br/><br/><br/><br/><br/><br/><br/>"); echo ("<center><h3><img src=\"images/validation.png\" width=\"96\" height=\"96\">Connexion réussie. <a href=\"http://skyst3f.infoliens.com/n/access.php\">Cliquez-ici</a> pour continuer.</h3> </center></body></html>"); } } ?>
Le code n'est pas trè beau je le reconnait. Si le login + pass son ok, je clique sur le lien cliquez ici et je vais sur ma page d'administration qui avant d'afficher quelque chose vérifie la présence du cookie.

Mais là avec mon script j'ai ce message d'erreur quand le login ou le mot de passe (ou les deux ) sont faux :

Warning: Cannot modify header information - headers already sent by (output started at /home/skystef/www/ntemp/confirm.php:6) in /home/skystef/www/ntemp/confirm.php on line 27
connexion refusée,
Mais le cookie existe toujours, je peux donc acceder à mon interface d'administration sans problème!

Pouquoi ais-je ce message, je n'affiche pourtant aucunne données avant de détruire le cookie...