Bonjour, me revoilà avec mes tokens anti CSRF je déploie ces tokens sur tous les formulaires de mon appli et là je rencontre l'erreur undefined index sur mes tokens.
Je m'explique : dans ma vue qui contient mon formulaire je génère un token et je met un champ caché dans le formulaire qui prend pour valeur le token.
Dans une autre page php (RsManager.class.php) qui gère ici l'envoi d'un mail je met une condition pour vérifier que mon token est valide
publicfunctionmailRsBd($id,$ville,$cmbl,$fichier){if(verifier_token(600,'http://localhost/portail/rs/mailrs/'.$id,'mail_rs')){//Requete sql qui permet de sélectionner un utilisateur //Création du mail //Envoi du mail }else{// Pour afficher mes messages d'erreurs var_dump($_SESSION['mail_rs']);echo'<br><br>';var_dump($_POST['token']);echo'<br><br>';var_dump($_SESSION['mail_rs_time']);echo'<br><br>';echotime();echo'<br><br>';var_dump($_SERVER['HTTP_REFERER']);echo'<br><br>';if(isset($_SESSION['mail_rs'])&&isset($_SESSION['mail_rs_time'])&&isset($_POST['token'])){if($_SESSION['mail_rs']==$_POST['token']){if($_SESSION['mail_rs_time']>=(time()-600)){if($_SERVER['HTTP_REFERER']=='http://localhost/portail/rs/mail/59'){echo'token bien vérifié';}else{echo'problème avec http_referer != http://localhost/portail/rs/mail/59';}}else{echo'problème avec le time';}}else{echo'$_SESSION["mail_rs_token"] != $_POST["token"]';}}else{echo'mail_rs, mail_rs_time, token ne sont pas tous isset';}}}
Les fonctions verfier_token et generer_token dans mon index.php
Notice: Undefined index: mail_rs in C:\Applications\wamp64\www\portail\models\RsManager.class.php on line 893
NULL
string(31) "31792904637cc5e35b3ca3.88068889"
Notice: Undefined index: mail_rs_time in C:\Applications\wamp64\www\portail\models\RsManager.class.php on line 897
NULL
1669121518
string(43) "http://localhost/portail/rs/mailrs/59"
mailRs_token, mailRs_token_time, token ne sont pas tous isset
Comment avoir accès à mon token générer dans ma vue ?
jordane45
Messages postés38423Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention15 février 20254 734
>
Patate
23 nov. 2022 à 14:50
Il faut bien garder mail_rs dans l'appel de ta fonction
¨Par contre, je parlais des messages d'erreurs liés à tes var_dump .. pas du fonctionnement de ta fonction.
Pour ta fonction, ajoutes y des else et du debug pour comprendre ce qui n'est pas bon.
par exemple
functionverifier_token($temps,$referer,$nom='mail_rs'){$s_token=!empty($_SESSION[$nom.'_token'])?$_SESSION[$nom.'_token']: NULL;$s_token_time=!empty($_SESSION[$nom.'_token_time'])?$_SESSION[$nom.'_token_time']: NULL;$p_token=!empty($_POST['token'])?$_POST['token']: NULL;if($s_token&&$s_token_time&&$p_token){if($s_token==$p_token){if($s_token_time>=(time()-$temps)){if($_SERVER['HTTP_REFERER']==$referer){return true;}else{echo"SERVER['HTTP_REFERER'] != referer ";echo"<br>".$_SERVER['HTTP_REFERER'];echo"<br>".$referer;}}else{echo"<br>"." s_token_time < temps ".$s_token_time."-".$temps;//le temps du debug}}else{echo"<br>"."Variables session et post différentes! ";//le temps du debug}}else{echo"<br>"."Variables non renseignées ! ";//le temps du debug}return false;// si aucune condition bonne}
Patate
>
jordane45
Messages postés38423Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention15 février 2025 Modifié le 23 nov. 2022 à 15:24
J'comprend pas bien à ce moment là on dirait qu'il prend plusieurs mails
SERVER['HTTP_REFERER'] != referer
http://localhost/portail/rs/mailrs/59 // 59 = id du rs 59 dans ma bdd
http://localhost/portail/rs/mailrs/31 // 31 = id du rs 31 dans ma bdd
Okay j'ai essayé de mettre l'id en statique dans mon if au lieux de
'http://localhost/portail/rs/mailrs/'.$id
J'ai mis
'http://localhost/portail/rs/mailrs/59'
Et ça m'a bien envoyé mon mail de l'id 59 mais mtn j'aimerais mettre $id mais j'ai toujours ce 31 qui reviens et je ne sais pas du tout à quoi il correspond il y a aucun id 31 en plus dans ma table.
jordane45
Messages postés38423Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention15 février 20254 734 23 nov. 2022 à 16:39
Faudrait regarder ( et nous montrer ? ) comment tu fais appel à ta fonction
mailRsBd
Patate
>
jordane45
Messages postés38423Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention15 février 2025 Modifié le 24 nov. 2022 à 09:22
J'ai capté en fait pour remettre dans le contexte je choisis quelque chose qui a un id pcq c dans ma bdd que j'envois à une liste de diffusion qui a aussi un id et en fait au lieux de prendre l'id de mon truc que j'envois, celui qui est dans la barre d'url, il prend l'id de la liste de diffusion à laquelle j'envois le mail.
L'appel de ma fonction mailRsBd dans mon controller
A noter : je reprend du code qui n'est pas le miens donc je déchiffre peu à peu ce qui a été fait.
EDIT : Je viens d'afficher le $_POST['id'] qu'il y a dans le Controller pcq je pensais que lui prenais l'id de mon RS mais nan il prend aussi l'id de la liste de diffusion. WTF comment il sait quoi envoyer ??
23 nov. 2022 à 08:45
Merci de ton retour,
var_dump($_POST)
var_dump($_SESSION)
On peut voir que j'ai bien mes deux token de mail pourtant :
23 nov. 2022 à 12:02
Et maintenant, regarde la ligne correspondant à tes messages d'erreur .... (compare le nom des variables avec ceux que tu as en session... )
23 nov. 2022 à 14:19
Si tu fais allusion à
comparé à
C'est normal sur tous mes autres token c'est pareil et ça fonctionne, si tu regarde ces deux fonctions :
J'ai quand même essayé ça pour être sur mais ça ne fonctionne pas :
23 nov. 2022 à 14:50
Il faut bien garder mail_rs dans l'appel de ta fonction
¨Par contre, je parlais des messages d'erreurs liés à tes var_dump .. pas du fonctionnement de ta fonction.
Pour ta fonction, ajoutes y des else et du debug pour comprendre ce qui n'est pas bon.
par exemple
Modifié le 23 nov. 2022 à 15:24
J'ai changé ma fonction par la tienne,
Voici le résultat :
J'comprend pas bien à ce moment là on dirait qu'il prend plusieurs mails