[RESOLU] Protection formulaires.

ViPHP
AB
ViPHP | 5818 Messages

18 déc. 2014, 04:06

Salut,

Bon allez on efface tout, voici un tuto complet avec code fonctionnel. J'ai verrouillé le tuto, tu me diras ce que tu en pense ici :wink:

Eléphant du PHP | 290 Messages

18 déc. 2014, 10:35

Attends, j'ai adapté mon code et j'ai quelque chose d'intéressant qui marche :D

Page de formulaire (page_1.php):
<!DOCTYPE html>
 <html>
 <body>
 
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  
 <title>Identification avec mot de passe hashé et grain de sel aléatoire</title>

<script language="javascript">
 
function doChallengeResponse(form) {
  
form.mot_de_passe.value = "";
  
document.getElementById("myForm").submit();
    
  
   }

 
</script>




        <form id="myForm" name="identification" method="post" action="page_2.php">
             <p>
                 Utilisateur:
                 <input type="text" name="utilisateur" size="32" maxlength="32"><br>
                 Mot de passe:
                 <input type="password" name="mot_de_passe" size="32" maxlength="32"><br>

                 <input onclick="doChallengeResponse(this.form)" id="myForm" type="button" value="identification">
<!-- pas pour l'instant                <input type="hidden" name="reponse"  value=""> -->
            </p>
         </form>

</body>
Page de traitement de formulaire (page_2.php):
<?php
header('Content-Type: text/html; charset=UTF-8');
echo "j'ai réussi à atteindre la feuille de traitement de formulaire";
$utilisateur=$_POST['utilisateur'];
var_dump($utilisateur);
$mot_de_passe=$_POST['mot_de_passe'];
var_dump($mot_de_passe);
?>
Je rentre un nom d'utilisateur et un mot de passe.
Je valide.
Mon var_dump($utilisateur) ressort la variable rentrée et mon mot de passe est bien effacé
(chaîne de caractères de 0 caractère, pas de valeur, variable vide).

Du coup, je pense plutôt garder la même piste avec le tuto initial.
Les lignes
[javascript]
var str = form.utilisateur.value+form.mot_de_passe.value;
form.reponse.value = SHA256(str);
[/javascript]
bloquent à ce jour la validation du formulaire,
mais mon javascript me permet d'effacer le champs du mot de passe
et d'envoyer le formulaire.
Mais si je peux continuer d'avancer sur cette piste c'est plus facile
que de repartir de zéro avec un nouveau tuto.

Je crois qu'il est important que je comprenne bien l'utilité de mon javascript.
C'est ce que j'aimerais vérifié avec toi maintenant pour être sûr de bien savoir ce que je fais
par rapport à mon objectif :D
Tu peux me dire si je comprends bien? (ci-dessous)

Il faut que j'évite absolument de traiter de mot de passe dans un langage côté serveur
car je risque de me le faire piquer par un pirate, alors que côté client j'ai moins ce problème
sauf cas d'infectation par un virus sur l'ordinateur de l'utilisateur (et là encore la tâche est plus ardue pour le pirate).
Donc pour la ligne:
<input type="password" name="mot_de_passe" size="32" maxlength="32"><br>
ça va car le html est un langage côté client.
Pour la ligne:
[javascript]
form.mot_de_passe.value = "";
[/javascript]
ça va aussi car le javascript est aussi un langage côté client.
Si je comprends bien, c'est surtout pour cette ligne que me sert le javascript => question importante.
Maintenant, pour ce qui est de la concaténation de valeurs avec la variable str,
est-il pertinent que celle-ci soit déclarée en javascript?
Est-ce que ça craint si j'écris cela en php ou c'est pareil?
=> je me dis que comme il s'agit de toute façon d'une concaténation le mot de passe n'est pas envoyé
"seul" en clair sur le serveur.
Cette question est intéressante aussi pour que je comprenne.
Si bien sûr tu es d'accord de m'expliquer.

ViPHP
AB
ViPHP | 5818 Messages

18 déc. 2014, 22:21

Salut,

T'as à peu près compris. Je comprends moins l'histoire d'écrire la variable str avec php plutôt qu'avec javascript.

Pour le dire un peu autrement, il s'agit d'écrire en javascript une chaine de caractères "str" qui inclut le mot de passe concaténé à d'autres caractères qu'on appelle le "sel" et pour que cette chaine soit protégée on la hash afin de rendre difficile "l'extraction" du mot de passe. Si on avait hashé simplement le mot de passe sans sel, le pirate qui intercepterait le post pourrait se servir d'un dictionnaire de hash. De cette façon le mot de passe est bien plus protégé quand il transite dans les tuyaux du web que s'il était exposé en clair ou hashé isolément.

Le but du jeu est de pouvoir comparer ensuite cette chaine à la même chaine construite en php à partir de la valeur du champ "pass" récupéré en bdd. Donc il faut construire cette chaine avec javascript et la construire aussi avec php pour faire la comparaison. C'est les deux ! pas l'un ou l'autre.

Et NON ce sera pas plus facile de faire un assemblage de tout ce que j'ai dit dans ce long sujet plutôt que de LIRE, TESTER ET COMPRENDRE le tuto. En plus il est testé et fonctionnel et chaque ligne de code est commentée ! Que te faut-il de plus ? Prend modèle sur du code qui fonctionne ! Quand tu l'aura fait fonctionner et compris tu pourras poser des questions pertinentes pour éventuellement modifier le code, mais pas avant. Alors arrête de poser des questions et bosse avec le tuto. Ce doit être ta nouvelle base de réflexion, mes autres messages dans ce sujet sont trop éparpillés pour que tu puisse t'en servir correctement, d'où tes innombrables questions sans fin... :wink:
Je t'expliquerai donc si besoin quelques extraits de code du tuto que tu n'aurais pas compris, mais je ne répondrai plus sur des question en dehors 8-)

Eléphant du PHP | 290 Messages

19 déc. 2014, 18:25

Je t'avoue n'avoir jamais rien fait d'aussi difficile.

Je n'ai jamais touché à PDO (j'utilise mysqli).
D'autre part, si j'ai appris le php "normal", je n'ai jamais appris php POO.
Est-ce "fatal" pour appréhender le tuto?

Si je peux poser quelques questions par rapport à ce tuto:

1)
<form action="#" method="post" id="authentification">
Ici, je ne laisse pas le dièse mais le remplace par le nom de ma page php.
Cest bien ça?

2) Qu'est-ce que ça veut dire stmt?

3) Je n'écris pas le détail de la fonction javascript 512, n'est-ce pas?

4) Me faut-il absolument rapatrier jquery? (je dis absolument car c'est jamais évident
comme ça pourrait paraître de rapatrier des bibliothèques externes ou fichiers semblables).
Si oui pourquoi, comment et quels fichiers?
=> désolé d'avoir autant de mal :oops:

5) Est-ce que tu peux me dire de quoi il s'agit dans la partie suivante:
// Activer openssl si possible (sur le serveur) pour pouvoir se servir de la fonction 'openssl_random_pseudo_bytes'
function Unique_Sel()
{
         return function_exists('openssl_random_pseudo_bytes')? hash("sha512",openssl_random_pseudo_bytes("128", $cstrong)) : hash("sha512",uniqid(rand(), true));
}
A part pour ces quelques points, je devrais peut-être bien arriver à me débrouiller 8-|

ViPHP
AB
ViPHP | 5818 Messages

20 déc. 2014, 05:12

Salut,

1/ Dans un premier temps, ce qu'il faut c'est que tu installe les deux fichiers - le script de connexion et le script de la requête ajax - sur ton serveur local. Ils ne fonctionneront correctement que si tu as renseigné les identifiants de connexion à la bdd dans le code php : $hostname = "localhost"; $database = "...."; $username = "root"; $password = "", et que tu as copié la table mysql (le troisième et dernier script) dans une fenêtre "sql" de phpMyadmin pour créer la table "test" dans ta bdd. C'est tout, ensuite tu pourras tester le fonctionnement sur ton serveur local.

Avec le contenu actuel de la table tu pourras te connecter en indiquant comme login la lettre "a" et comme pass la lettre "b". Toutes les autres combinaisons te renverront une erreur.
Essaies de faire cela, c'est le minimum à savoir pour faire des tests avec une bdd. Le code est écrit avec pdo mais tu n'as rien à modifier, juste à renseigner le nom de ta base de donnée et à créer la table "test" dans cette base (je me répète mais à ce niveau il n'y a rien de différent avec mysql ou mysqli).

Ensuite non tu ne modifie rien. Tout est fonctionnel tel que c'est écrit. Le '#" dans le action du formulaire indique simplement la même page, donc la page qui contient aussi le code php de connexion (tout le script de connexion est dans le premier script, le second script php contient le code de la requête ajax à copier dans un fichier que l'on nomme "recuperation_sel.php").

2/ "stmt" c'est un nom de variable comme un autre mais tu pourrais en changer.

3/ La fonction javascript 512 tu la laisse tranquille, elle est indispensable mais pas besoin de la comprendre...

4/ Fais fonctionner le script tel quel, ensuite pour plus de sérénité tu pourras rapatrier jquery sur ton serveur plutôt que de faire un lien vers google

5/ Si la fonction 'openssl_random_pseudo_bytes' existe, on s'en sert pour générer un nombre aléatoire de 128 caractères hasché avec sha512, sinon on utilise la fonction "uniqid(rand()" hashé avec sha512, et on retourne le résultat. Donc le "function_exists" permet de tester l'existence d'une fonction préférentielle (pas toujours disponible suivant la version de php ou la configuration du seveur) et sinon de se rabattre sur une fonction plus ancienne comme ici "uniqid" (quand tu te pose des question sur une fonction tu colle son nom dans un moteur de recherche pour avoir les infos et tu tomberas le plus souvent sur le manuel php).

Concentre toi sur 1/

Eléphant du PHP | 290 Messages

22 déc. 2014, 13:46

Bonjour,

Oui, je fais que 1/ et je travaille à 100% à partir du tuto.

J'ai rentré la table test via phpmyadmin.
J'ai repris le formulaire suivant dans une page test_formulaire.php en gardant
la structure la plus élémentaire qui soit:
<?php
//paramétrage du jeu de caractères UTF-8
header('Content-Type: text/html; charset=UTF-8');

//création du sel aléatoire 
$_SESSION['sel_aleatoire']=hash("sha256",(uniqid(rand(), true)));

//identifiants bdd
include("mes_identifiants.php");
?>



         <!-- partie javascript ci-dessous à refaire -->
         <script src="gds.js"></script> <!-- programme Ajax -->
         <div id="output"></div><!-- champs caché à l'emplacement du div via Ajax. J'y récupère mon grain de sable. -->
         <!-- => <input type="text" name="salt" id="salt" value="'. $salt .'" size="9" maxlength="7"/> -->        
         <script type="text/javascript">

         <script language="javascript"> //à refaire
         var reponse = "<?php echo $_SESSION['sel_aleatoire']; ?>"; //à revoir
         </script>              
         <input type="hidden" name="reponse" id="reponse" value="" size="32" maxlength="32"><br>
         <script type="text/javascript">
         var ensemble = document.getElementById("reponse");
         ensemble.value = reponse;
         </script>



<form id="formIdentification" name="valider" method="POST" action="test_traitement.php" accept-charset="UTF-8">
<ul style="list-style-type: none; width: 63%; font-size: 20px;">
    <fieldset>
       <legend align="center">Veuillez entrer vos identifiants.</legend>
         <br/>
         <li>Nom d'utilisateur:&nbsp;&nbsp;<input type="text" name="nom_utilisateur" id="nom_utilisateur" size="17" maxlength="15"/><li/>
         <br/>
         <li>Mot de passe:&nbsp;&nbsp;<input type="password" name="mot_de_passe" size="14" maxlength="12"/><li/>
    </fieldset>
         <br/>
         <br/>
         <input onclick="doChallengeResponse(this.form);" id="formIdentification" type="button" value="valider"/>         
         <br/>
         <br/>
         <input type="reset" name="reset" value="recommencer"/>
         <input type="submit" name="submit" value="valider" id="valider"/>
         <input type="hidden" name="reponse" id="reponse" value="" />
         </li>
</ul>
</form>
Mon script de connexion se trouve dans un fichier mes_identifiants.php (atteind par un include situé en haut du script ci-dessus).

Maintenant, je ne comprends pas trop ce qu'il faut faire à propos du script Ajax.
J'ai l'impression qu'il doit y avoir un fichier <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
correspondant à priori au fichier javascript qui gère à la fois l'envoi de la requête desynchronisée avec ou sans variable(s)
et le retraitement de la réponse du serveur avec le innerHTML.
J'ai aussi l'impression qu'il doit y avoir un fichier recuperation_sel.php correspondant à la réponse du serveur à écrire en php.
Mais je ne sais pas où se trouvent ces deux fichiers.

Je ne comprends pas non plus l'envoi du token qui semble correspondre au sel fixe de l'utilisateur.
Mais ce sel fixe est justement ce qu'on veut récupérer grâce au programme Ajax.
Alors comment mettre ce sel fixe en paramètre à envoyer puisque c'est justement ce qu'on cherche
à récupérer grâce au programme Ajax?
... je me doute bien que c'est moi qui n'ai pas compris quelque chose :oops:

Dans tous les cas, il faut bien envoyer le nom d'utilisateur vers le SGBD pour savoir quel grain de sel
de quel utilisateur récupérer dans la bdd, n'est-ce pas?

Enfin, toujours à propos de l'Ajax, je reprends un fichier Ajax en js et un fichier de réponse du serveur en php
proposés avec le tuto ou je reprends les miens?
J'ai cru comprendre que je reprends des fichiers proposés par le tuto mais je ne sais pas où ils se trouvent.

Voilà, si tu peux de donner quelques précisions à propos de l'Ajax ça m'aiderait :D

ViPHP
AB
ViPHP | 5818 Messages

22 déc. 2014, 17:42

Bonjour,

Oui, je fais que 1/ et je travaille à 100% à partir du tuto.

J'ai rentré la table test via phpmyadmin.
J'ai repris le formulaire suivant dans une page test_formulaire.php en gardant
la structure la plus élémentaire qui soit...
Nan dans un premier temps faut pas bricoler. Il s'agit simplement de faire fonctionner les scripts tel qu'ils sont écrit sans rien modifier excepté évidemment de renseigner tes identifiants de connexion à la bdd.
1/ Copies le premiers script dans un fichier vierge que tu nomme par exemple "connexion.php".
2/ Copies le second script dans un fichier vierge que tu dois nommer "recuperation_sel.php" (ce nom est impératif à moins de changer la destination ajax dans le code javascript, mais dans un premier temps ne touche rien).
Ces deux fichiers doivent être situés dans le même répertoire sur ton serveur.

Dans ces deux fichiers, modifies simplement les variables de connexion à ta bdd, soit :
$hostname = "localhost";
$database = "ma_base";
$username = "root";
$password = "";

Normalement si tu es sur un serveur d'évaluation tu auras juste à changer la valeur de $database avec le nom de la base dans laquelle tu as copié le troisième et dernier script du tuto qui donne la création d'une table de test (apparemment si j'ai bien compris tu l'a déjà fait).

Voilà c'est tout ce que tu as à faire pour commencer. Ensuite quand tu exécuteras le premier script cela devrait fonctionner (la seule combinaison qui permet l'enregistrement est pour l'instant login : 'a' et pasword : 'b').
Est-ce que cela fonctionne chez toi ?

Et NE SUPPRIME RIEN !!! Y'a rien en trop dans le code, la seule chose que tu pourrais supprimer sont les commentaires, le reste est indispensable. Quand tu auras compris le fonctionnement, tu pourras ajouter ton propre code mais pas supprimer celui déjà existant, il est déjà au minimum !

Eléphant du PHP | 290 Messages

05 janv. 2015, 12:29

Bonjour,
Je souhaite une excellente année 2015 à tous les utilisateurs et administrateurs de phpfrance :D

Je reviens à mes moutons.

J'ai donc fait exactement comme tu m'as dit.
Quel quel soit le nom d'utilisateur et le mot de passe que je rentre
il ressort:
Problème : "A la conquête du sel"

ViPHP
AB
ViPHP | 5818 Messages

07 janv. 2015, 20:22

Salut,

Bonne année à tous également.

Et as tu cherché cette expression dans le code ?

C'est l'erreur qui est renvoyée par le fichier "recuperation_sel.php" en cas d'erreur dans la requête qui doit retourner le sel.

Dans ce fichier, as-tu remplacé les variables de connexion avec tes valeurs personnelles ? Les valeurs "$hostname", $username et $password sont celles qu'on utilise souvent par défaut sur un serveur de test local. Par contre il faut au minimum rentrer le nom de ta base de donnée que je ne peux pas connaître à ta place (il y a peu de chances qu'elle se nomme "ma_base").
$hostname = "localhost";
$database = "ma_base";
$username = "root";
$password = "";
Remarque qu'il y a les mêmes paramètres à renseigner dans le premier fichier de connexion.

Il y a juste ces valeurs à renseigner pour faire fonctionner les scripts et il faudra que tu pense à les changer également quand tu mettras ton code sur un autre serveur (serveur distant par exemple).
Pour plus de facilité et pour une meilleure portabilité on met souvent ces valeurs dans un fichier que l'on inclus avec un include() ou un require(). Elles sont ici écrites en dur dans le code uniquement pour la cohérence des exemples.

Eléphant du PHP | 290 Messages

08 janv. 2015, 11:15

Salut,

J'avais changé les paramètres dans le premier fichier seulement, maintenant ça marche :mrgreen:

Cette phrase apparaît à l'écran:
Vous êtes maintenant connecté !

ViPHP
AB
ViPHP | 5818 Messages

08 janv. 2015, 23:08

Bon, tu as maintenant tous les éléments fonctionnels =D>

D'ailleurs j'ai rajouté une note dans le tuto pour éviter cette étourderie :)

Eléphant du PHP | 290 Messages

09 janv. 2015, 21:05

Salut,

La question pour moi maintenant est où j'en suis et qu'est-ce que je fais?

Je comprends le code dans sa globalité.
Maintenant, pour tout comprendre avec aisance ça risque d'être compliqué:
je n'ai pas appris PDO, je n'ai pas appris non plus PHP POO et je n'ai encore jamais utilisé JSON.
J'aime bien les challenge, mais l'apprentissage pour arriver à bien assimiler le tutoriel risque d'être compliqué.
S'il faut vraiment que j'en passe par là, je risque d'avoir besoin d'aide/de conseils pour savoir vers quels
tutos me tourner d'abord pour aborder le tuto que tu me proposes.

Sinon, il faut savoir que j'ai continué en parallèle à travailler sur le premier tuto que tu m'avais proposé en premier
et après avoir lu plusieurs tutos sur javascript et php (plus basiques et plus à ma portée), j'ai réussi à terminer
toute la programmation, sauf un point: arriver à faire partir mon Ajax depuis ma fonction js au lieu de le faire
partir "de l'intérieur" de mon formulaire et arriver à récupérer le grain de sel fixe toujours depuis cette fonction
et non depuis "l'intérieur" du formulaire.

Si tu es toujours d'accord pour m'aider, et que tu ne veux vraiment pas que je garde la première solution,
alors je vais avoir besoin d'être un peu guidé dans un premier temps vers des choix de tutos me permettant d'aborder
ce tuto dans un deuxième temps. Mon niveau actuel est malheureusement en dessous du niveau nécessaire pour bien comprendre
ce dernier tuto et ne me permet pas de juger vers quels tutos je dois
d'abord me diriger pour trouver les éléments qui me manquent pour aborder le tuto que tu me proposes d'étudier.
Si jamais il est envisageable que tu m'aides à terminer mon programme avec le premier tuto étant donné le chemin déjà accompli
(juste en répondant à quelques petites questions courtes, il ne me reste qu'une toute petite partie à faire) je ne te cache pas
avoir plus d'assurance.

Je n'insiste pas plus concernant le premier tuto, simplement si je m'accroche toujours sur le second tuto je vais absolument
avoir besoin que tu m'orientes sur plusieurs tutos au préalable afin d'être ensuite capable de comprendre ce tuto.

J'ai déjà deux questions à te poser (utiles quelque soit l'option choisie: tuto 1 ou tuto 2):

Dans la fonction js:
// DESTINATION DE LA REQUETE AJAX
var destination_ajax = 'recuperation_sel.php';
et:
                // On envoie la requête ajax
                $.ajax({
                        // type du retour attendu
                        dataType: "json",
                        // type de l'envoi
                        type: "POST",
                        // destination du fichier php
                        url: destination_ajax,
                        // données à envoyer
                        data: data_post
                        })
semblent permettre de lire un fichier (ici recuperation_sel.php) à partir de
l'intérieur d'une fonction javascript.
C'est ça le but du code? Je peux avoir quelques explications sur le sens précis de ce code?

Pourquoi avoir sérialisé le login dans data_post avant de l'envoyer avec le programme Ajax?

Est-ce que le but de:
 echo json_encode(array('sel'=>$sel_retour,'erreur'=>$erreur));
est de permettre une autre sérialisation ou une encapsulation pour le retour avec le programme Ajax?

Je crois que dans tous les cas j'aurais déjà besoin de comprendre la relation entre le JSON
et la sérialisation.

ViPHP
AB
ViPHP | 5818 Messages

10 janv. 2015, 09:16

Salut,

1/ Un tuto PDO ici

2/ JSON tu n'as pas à l'apprendre c'est juste une fonction que l'on applique côté php pour pouvoir transmette un tableau vers javascript.

3/ Il te manque des connaissances en javascript. J'utilise jquery, une lib javascript très populaire (et pratique) qui facilite bien les choses. La doc est ici. Pour les requêtes ajax tu rentre dans un moteur de recherche les termes "jquery ajax" et le premier lien est celui-ci. Tu ne perds pas ton temps à apprendre cette lib car elle fait gagner du temps et résout en même temps la compatibilité entre les différents navigateurs.

Dans la fonction js:
// DESTINATION DE LA REQUETE AJAX
var destination_ajax = 'recuperation_sel.php';
et:
                // On envoie la requête ajax
                $.ajax({
                        // type du retour attendu
                        dataType: "json",
                        // type de l'envoi
                        type: "POST",
                        // destination du fichier php
                        url: destination_ajax,
                        // données à envoyer
                        data: data_post
                        })
semblent permettre de lire un fichier (ici recuperation_sel.php) à partir de
l'intérieur d'une fonction javascript.
C'est ça le but du code? Je peux avoir quelques explications sur le sens précis de ce code?

Pourquoi avoir sérialisé le login dans data_post avant de l'envoyer avec le programme Ajax?

Est-ce que le but de:
 echo json_encode(array('sel'=>$sel_retour,'erreur'=>$erreur));
est de permettre une autre sérialisation ou une encapsulation pour le retour avec le programme Ajax?
Oui donc c'est à peu près cela.
1/ var destination_ajax c'est la destination de la requête ajax. Si tu nommais le fichier php de destination autrement que ''recuperation_sel.php", il faudrait changer en conséquence.

2/ Pour passer les posts d'un formulaire html vers php avec ajax, il faut sérialiser les données pour avoir le bon format et protéger les caractères spréciaux. Jquery dispose d'une fonction très pratique serialize. Mais si tu regarde la doc tu vois qu'elle prend d'un coup toutes les données du formulaire. Or le but du script est de ne pas transmettre le mot de passe en clair sur le réseau, mais il fait partie du formulaire. On ne peut donc pas utiliser cette fonction. Je dois prendre seulement les données nécessaires, c'est à dire le login qui est nécessaire à la requête sql et le sel aléatoire qui fait office de token (jeton de sécurité qui assure que le post envoyé par la requête ajax et reçu par le script php provient bien de ton formulaire). Et donc je mets ces variables (et seulement ces deux variables) dans un objet que je sérialise avec $.param de jquery. La fonction $.param donne le même format que la fonction serialize mais j'ai pu trier les données que je veux envoyer (pour ne pas envoyer le mot de passe :non: ).

Et de la même manière qu'on utilise serialize() ou une fonction équivalente pour transmettre les variables d'un formulaire de javascript vers php, on utilise la fonction json_encode de php pour sérialiser un tableau qui sera transmis vers javascript.
On est pas obligé de transmettre un tableau en retour. On aurait pu faire simplement un "echo $sel_retour" pour ne retourner que le sel, mais le tableau est la seule manière de pouvoir retourner plusieurs valeurs à la fois. Et le retour d'erreur est utile en plus du sel, il m'a permis de connaître facilement l'origine de ton problème "A la conquête du sel" qui est généré s'il y a une erreur dans la requête idoine :wink: Pour les visiteurs tu pourrais mettre plus simplement "erreur dans la requête d'authentification ajax" (faut pas être trop précis pour ne pas renseigner précisément d'éventuels pirates). Cela dit une fois bien paramétré tu ne devrais plus avoir souvent cette erreur. Enfin au passage cela apprend à passer plusieurs valeurs en retour de php vers javascript (et json_encode permet aussi d'encoder des tableaux de tableaux si besoin).

Bon ben grosso modo t'avais bien compris... C'est sûr que c'est un peu hard pour un débutant, mais en même temps c'est un excellent exercice. Ajax est quasi indispensable pour un site un peu évolué de nos jours. Jquery est la lib javascript actuelle quasi incontournable (avec en plus des milliers de modules disponibles, slides show, menus déroulants, diaporamas et autres effets visuels en pagaille). PDO est ce qu'il faut utiliser aujourd'hui pour la connexion à une base de donnée avec php. A la fin de cet exercice tu ne sera plus plus débutant et tu seras parti sur de bonnes bases :) avec un plus le maximum de sécurité qu'on peut avoir pour une authentification sans connexion ssl.

Mammouth du PHP | 558 Messages

11 janv. 2015, 14:16

bonjour
j'ai sur mon site les mots de passe en md5 le code date de 6 ans.
comment faire pour passer du md5 au SHA-256.
modifier la clé de cryptage pour ceux déjà inscrit ?
je pourrais faire également une double vérification, dans ce cas les anciens membres seront moins bien protéger que les nouveaux...
ou encore faire SHA-256 sur un Md5.
je ne sait pas trop quoi faire.
merci
3) Le MD5 est devenu dépassé à notre ère (à cause des rainbow table), il est préférable d'utiliser SHA-256.
Pour l'utiliser : crypt

Mammouth du PHP | 2278 Messages

11 janv. 2015, 15:16

J'ai créé un sujet avec ton textei; sinon tu seras submergé par les échanges.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD