IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[PHP] Mettre des sécurités pour un formulaire php


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de theocbr
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 206
    Par défaut [PHP] Mettre des sécurités pour un formulaire php
    J'aimerais rajouter des sécurités du genre : ne pas pouvoir s'inscrire si l'adresse mail est déjà utilisé ,ou du genre si les caractère ne sont pas valides...
    J'ai essayé plusieurs code , mais à chaque fois ça cassé mon code :c


    Le traitement en php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?php
    /* Afficher les erreurs à l'écran */
    ini_set('display_errors', 1);
    // connexion à la bdd
     
    $bdd = new PDO('mysql:host=localhost;dbname=utilisateur','root','root'); 
     
    if(isset($_POST['forminscription'])) {
    	if(isset($_POST['mail']) AND isset($_POST['pseudo']) AND isset($_POST['motdepasse'])){
    		if(!empty($_POST['mail']) AND !empty($_POST['pseudo']) AND !empty($_POST['motdepasse'])){
     
     
    		$mail = trim(htmlspecialchars($_POST['mail']));
    		$pseudo = trim(htmlspecialchars($_POST['pseudo']));
    		$mdp = trim(htmlspecialchars($_POST['motdepasse']));
    			$mdpcrypt = sha1($mdp);
     
     
    					$req =$bdd->prepare("INSERT INTO membres (pseudo, mail, motdepasse) VALUES (?,?,?)");
    					$req->execute(array($pseudo, $mail , $mdpcrypt));
    					if($req){
     
    	$message = ' Vous êtes désormais inscris !';
    					}
    else{
     
    	$message = 'Echec de l inscription ';
     
    }
     
    		}
    	}
    }
     
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    	<title>Home Sweet Home</title>
    	<link rel="stylesheet" href="style.css">
    </head>
    <body>
    	<br></br>
    	<p><?php echo $message; ?></p>
    	<a href="connexion.html">Se connecter</a><br />
    	<a href="index.html">Retour au formulaire d'inscription</a>
    </body>
    </html>
    Le formulaire html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8" />
    		<title>Inscription</title>
    			<link rel="stylesheet" href="style.css">
     
    </head>
    <body>
      <div id="conteneur">    
        <nav>
        	<ul id="menu">
     
    			<li><a href="index.html">Inscription</a></li>
    			<li><a href="connexion.html">Se connecter</a></li>
     
    		</ul>
        </nav>
      </div>
      <center>
      	<form method="POST" action="traitement.php">
    		<h1>Inscription :</h1>
    		<br></br>
    		<b>
    		<fieldset id="formulaire">
     
    					<input type="text" name="pseudo" id="pseudo" placeholder="Pseudo" autofocus required /><br />
    					<input type="mail" name="mail" id="mail" placeholder="Adresse Mail" required /><br />
    					<input type="password" name="motdepasse" id="motdepasse" placeholder="Votre Mot de Passe" required /><br />
    					<input type="submit" name ="forminscription" value="S'inscrire" />		
    		</fieldset>
    		</b>
    </center>
    <?php if(isset($error)) { echo $error;} ?>
    </body>
    </html>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    • on n'utilise htmlspecialchars QUE pour l'affichage (PAS AVANT l'enregistrement en BDD)
    • on n'utilise plus sha1(), mais password_hash() / password_verify()
    • je ne vois aucun test de l'email *
    • on écrit "Accueil", ' Vous êtes désormais inscrit !'
    • Que fait le bloc <nav> dans le <head> ??
    • on t'a déjà dit que la balise <center> est obsolète...
    • <br></br> ?? (balise <br>)
    • ...

    * Pour tester si l'email existe, il suffit de faire une requête en BDD sur cet email et verifier qu'elle ne renvoie pas de ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	if(isset($_POST['mail']) AND isset($_POST['pseudo']) AND isset($_POST['motdepasse'])){
    		if(!empty($_POST['mail']) AND !empty($_POST['pseudo']) AND !empty($_POST['motdepasse'])){
    Pas besoin de 2 tests :

    CONSEILS :

    Quand tu auras corrigé TOUT ça, tu auras fait un GRAND pas en programmation.

    ** Comme tu vois : je ne suis pas rancunier.
    Dernière modification par Invité ; 16/12/2019 à 18h35.

  3. #3
    Membre très actif Avatar de theocbr
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 206
    Par défaut
    Merci pour tes réponses , ça m'aide beaucoup , mes profs sont encore à l'ancienne école je crois... et les tutos sur Youtube en parlons pas alors !!
    Les fautes d'orthographes j'ai honte xd

    on n'utilise plus sha1(), mais password_hash() / password_verify()
    Pourquoi ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par theocbr Voir le message
    ...Pourquoi ?
    Ce n'est pas faute de t'avoir dit de cliquer sur les liens...........................

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pourquoi les fonctions traditionnelles de hashage comme md5() et sha1() sont-elles inappropriées aux mots de passe ?

    Les algorithmes de hashage comme MD5, SHA1 et SHA256 sont destinés à être rapides et efficaces. Avec les équipements informatiques modernes, il est devenu facile d'attaquer par force brute la sortie de ces algorithmes pour retrouver la chaîne originale.

    C'est la raison pour laquelle de nombreux experts en sécurité considèrent ces algorithmes comme faibles et les déconseillent fortement pour hasher un mot de passe utilisateur.
    PHP: Hashage de mots de passe - Manual

    Pour la validation du formulaire, personnellement, j'ai tendance à faire les vérifications dans l'autre sens. De cette façon, on peut afficher des messages d'erreur spécifiques et des validations un peu plus poussées (par exemple, vérifier si le mot de passe n'est pas "toto")

    Comme validations un peu plus avancées, tu peux vérifier que le mail est bien un mail avec filter_input et FILTER_VALIDATE_EMAIL (et au passage ça vérifie aussi si le champ est rempli )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $message = '';
    if(!filter_input(INPUT_POST, 'mail', FILTER_VALIDATE_EMAIL)) {
        $message .= 'Le champ mail doit être renseigné avec un email correct. <br>';
    }
    if(empty($_POST['pseudo'])) {
        $message .= 'Le pseudo est obligatoire <br>';
    }
    if(empty($_POST['motdepasse'])) {
        $message .= 'Le mot de passe est obligatoire <br>';
    } else if (mb_strlen($_POST['motdepasse']) < 8) {
        $message .= 'Le mot de passe doit faire au moins 8 caractères <br>';
    }
     
    if (empty($message)) {
        // Si il n'y a pas d'erreurs, on fait l'insertion 
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur BackEnd - FrontEnd
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur BackEnd - FrontEnd
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Par défaut
    Désolé je sais que c'est un petit HS mais j'ai appris des trucs en lisant ce topic.

    Merci pour les liens et les explications je dormirais moins bête.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/01/2017, 16h53
  2. Récuperation des donnees pour une formulaire
    Par dalidali86 dans le forum JSF
    Réponses: 0
    Dernier message: 28/08/2009, 05h02
  3. Réponses: 2
    Dernier message: 19/09/2007, 10h46
  4. mettre des OVERFLOW pour un DIV
    Par Argorate dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/08/2006, 20h13
  5. Réponses: 1
    Dernier message: 10/03/2006, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo