Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sécuriter PHP / JS

    20 juin 2018 à 21:14:38

    Bonjour, j'ouvre se sujet libre pour répondre a mes multiple question, j'aimerais savoir tout se qu'il faut faire pour que notre site soit sécuriser au maximum :

          -Y-t-il une base de donnée a suivre.

          -Y-t-il des fonction a utilisé ?

    ...

    Bref si vous connaissé la moindre chose sur la sécurité web écrivez le !

    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2018 à 21:24:44

      Oui, déjà, si tu veut entrer des informations (que l'utilisateur auras préalablement entrer dans des "input"), il faut faire une fonction qui évite les injections de code avant de tout faire rentrer dans ta BDD.

      Pour cela;

      Par exemple si tu veut faire entrer un pseudo dans ta BDD comme celà:

      <input type="text" name="pseudo" />

      Il faut que tu la sécurise en PHP de toute injection de code avec un "htmlspecialchars" comme cela:

      $pseudo = htmlspecialchars($_POST['pseudo']);

      Après, comme BDD simple à utiliser je te conseille MYSQL dans Wamp64.exe


      • Partager sur Facebook
      • Partager sur Twitter
      "La connaissance de l'Homme ne peut pas s'étendre au-delà de son expérience propre", Locke
        21 juin 2018 à 7:09:14

        Attention htmlspecialchars ne sert qu'à l'affichage et pas pour une insertion en base. On peut très bien faire une injection sql avec un htmlspecialchars. Pour les requêtes il faut les préparer et bien sur toujours vérifier ce que ti reçois. Exemple, si tu demande un email tu vérifie le format. Un age tu regarde qu'il soit compris entre 1 et 150.

        Voilà 

        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2018 à 8:28:32

          Utilise PDO pour la connexion a la BDD c'est plus sur et c'est mise a jour régulièrement

          après le reste fait comme la dit quenti77 requête préparer et toujours vérifier ce qui va s'insérer dans ta BDD 

          • Partager sur Facebook
          • Partager sur Twitter
            21 juin 2018 à 10:30:22

            Merci Beaucoup

            Mettre un cookie qui contient l'id du visiteur est dangereux ?

            • Partager sur Facebook
            • Partager sur Twitter
              21 juin 2018 à 10:33:55

              C'est pas très utile avec les sessions et avec un cookie on doit toujours vérifié ce que l'on reçoit. Juste un id c'est pas terrible car si je modifie le cookie je peux me faire passer pour n'importe qui.
              • Partager sur Facebook
              • Partager sur Twitter
                21 juin 2018 à 11:44:42

                Comment font les réseaux sociaux alors ? ils doivent utiliser des cookie puisque l'on a pas besoin de se connecter tout le temps

                • Partager sur Facebook
                • Partager sur Twitter
                  21 juin 2018 à 12:18:45

                  Oui mais il ne stock pas "QUE" l'id, ils vont par exemple mettre id + token et vérifié en base que les informations correspondent.

                  Si je regarde twitter ils ont ça comme cookie : https://imgur.com/a/qIPdwtn

                  Mais à chaque fois que tu envoie une requête et qu'ils ont besoin de l'un des cookies il le vérifie. Ne serai-ce que le cookie "lang" qui ne peux pas valoir n'importe quoi.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 juin 2018 à 13:39:57

                    Comment font-t-il la verification ? ils sont obligé de partir d'une valeur qui ne change pas

                    -
                    Edité par Blush_WigThéo 21 juin 2018 à 13:42:07

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 juin 2018 à 13:44:02

                      > Exemple, si tu demande un email tu vérifie le format. Un age tu regarde qu'il soit compris entre 1 et 150.

                      Encore une fois, valider n'est pas sécuriser. Ce sont deux tâches bien distinctes. La validation est facultative ; la sécurité, non. Prenons justement l'exemple d'une adresse email : la ' est, selon la RFC, parfaitement légale dans une adresse email or, si tu la valides avec filter_var + FILTER_VALIDATE_EMAIL, il te l'accepte. Maintenant, si tu te dis que valider suffit (pas de préparation ni échappement derrière) en pensant que la ' n'est pas acceptée, tu te fous le doigt bien profond dans l'oeil, te voilà avec une injection SQL. S'il y a bien une chose à faire dès le départ, c'est de sécuriser. Surtout que généralement, les validations, elles évoluent au fil du temps, elles sont rarement mises en place une fois pour toute dès le départ (et souvent bugguées).

                      Valider, c'est juste s'assurer que les données sont un minimum cohérentes par rapport à ce qu'on attend. Ca n'a RIEN à voir avec la sécurité, mais vraiment rien.

                      -
                      Edité par julp 21 juin 2018 à 14:36:36

                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 juin 2018 à 13:53:40

                        Je suis débutant et je fais que vérifier les champs que m'envoie les utilisateurs rien d'autre je ne comprends pas comment je peux les sécuriser je dois les écrire en hash ?

                        Verification js et php c'est tout

                        -
                        Edité par Blush_WigThéo 21 juin 2018 à 14:01:42

                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 juin 2018 à 14:56:34

                          julp a écrit:

                          > Exemple, si tu demande un email tu vérifie le format. Un age tu regarde qu'il soit compris entre 1 et 150.

                          Encore une fois, valider n'est pas sécuriser. Ce sont deux tâches bien distinctes. La validation est facultative ; la sécurité, non. Prenons justement l'exemple d'une adresse email : la ' est, selon la RFC, parfaitement légale dans une adresse email or, si tu la valides avec filter_var + FILTER_VALIDATE_EMAIL, il te l'accepte. Maintenant, si tu te dis que valider suffit (pas de préparation ni échappement derrière) en pensant que la ' n'est pas acceptée, tu te fous le doigt bien profond dans l'oeil, te voilà avec une injection SQL. S'il y a bien une chose à faire dès le départ, c'est de sécuriser. Surtout que généralement, les validations, elles évoluent au fil du temps, elles sont rarement mises en place une fois pour toute dès le départ (et souvent bugguées).

                          Valider, c'est juste s'assurer que les données sont un minimum cohérentes par rapport à ce qu'on attend. Ca n'a RIEN à voir avec la sécurité, mais vraiment rien.

                          -
                          Edité par julp il y a 17 minutes


                          Regarde bien je parle de préparer les requêtes et j'y ajoute après de vérifier les données. J'y ajouterais aussi de désactiver l'émulation des requêtes sous PDO.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 juin 2018 à 15:30:17

                            Ca [valider] n'aurait même pas dû être mis sur le tapis.

                            On voit déjà assez de ********* concernant la sécurité en général : htmlspecialchars qui vaut pour les injections SQL, type="email|number|..." ou un contrôle JS qui t'assure des données valides, le fait d'utiliser PDO::prepare + PDOStatement::execute (sans bind, on injecte tout directement dans la requête) qui te prémunit des injections SQL et j'en passe.

                            -
                            Edité par julp 21 juin 2018 à 15:58:35

                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 juin 2018 à 15:34:30

                              A chercher trop compliquer les gens ne font au final rien pour sécuriser les données alors qu'il suffit de faire un prepare (avec marqueur ? ou :nominatif) et un execute si vraiment tu n'a que des chaines ou carrément un bind par marqueur. Et à cela la désactivation de manière globales de l'émulation des requêtes comme dit au dessus.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 juin 2018 à 19:24:49

                                Je fais tout le temps sa et rien que avec sa mon site est sécurisée ?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  22 juin 2018 à 8:45:02

                                  tu peut créer ton filtertext du genre pour filtrer les données avant l'insertion mais en mode vraiment vraiment sécurisé:

                                  static function filtertext($str) {
                                  		$str = stripslashes(htmlspecialchars($str));
                                  		$texto = trim($str); 
                                  		$texto = htmlspecialchars($texto);
                                  		$texto = str_replace("INSERT","IN-SER-T",$texto); 
                                  		$texto = str_replace("DELETE","DE-LE-TE",$texto);
                                  		$texto = str_replace("TRUNCATE","TRUN-CA-TE",$texto);
                                  		$texto = str_replace("SELECT","SE-LEC-T",$texto);
                                  		$texto = str_replace("ALTER","AL-TER",$texto);
                                  		$texto = str_replace("UPDATE","UP-DA-TE",$texto);
                                  		$texto = str_replace("inert","IN-SER-T",$texto);  
                                  		$texto = str_replace("delete","DE-LE-TE",$texto);
                                  		$texto = str_replace("truncate","TRUN-CA-TE",$texto);
                                  		$texto = str_replace("select","SE-LEC-T",$texto);
                                  		$texto = str_replace("alter","AL-TER",$texto);
                                  		$texto = str_replace("update","UP-DA-TE",$texto);
                                  		$texto = str_replace("script","",$texto);
                                  		$texto = str_replace("SCRIPT","",$texto);
                                  		$texto = str_replace('"','&#34;',$texto);
                                  		$texto = str_replace("'","&#39;",$texto);
                                  		$texto = str_replace("<","&#60;",$texto);
                                  		$texto = str_replace(">","&#62;",$texto);
                                  		$texto = str_replace("(","",$texto);
                                  		$str = str_replace(")","",$texto);
                                  		return $str;
                                  	}

                                  utilise les prepares !

                                  créer un token pour les requête qui utilise le $_GET ou du Ajax (éviter la faille csrf)

                                  après, vérifier le formualaire, les pseudos écarte les trucks qui sont inutile tel que: /*-/*-/*--*é""é*-é"*-"éé"*- avec un regex

                                  surtout le token créer un token qui change toute les x temps sur la session au moins même si un petit malin créer un script et récupérer le token, il changera tous le temps il lui sera donc inutile plein de chose comme sa ^^

                                  -
                                  Edité par Anonyme 22 juin 2018 à 8:49:41

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 juin 2018 à 9:41:53

                                    Salut, Encore une fois il faut arrêter de confondre XSS et injection SQL. Si tu utilises cette fonction avant tes insertions alors il faudrait l'arrêter car ça n'apporte rien

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    le bienfait n'est jamais perdu
                                    Anonyme
                                      22 juin 2018 à 9:55:28

                                      WillyKouassi a écrit:

                                      Salut, Encore une fois il faut arrêter de confondre XSS et injection SQL. Si tu utilises cette fonction avant tes insertions alors il faudrait l'arrêter car ça n'apporte rien

                                      je sais, le plus souvent on l'utilise une fois le renvoye sur tableaux

                                      Directement filtrer le text renvoyé par un fetch par exemple.

                                      mais faut quand même, l'utiliser avant une insertion certaine fois. autrement tes cuis !

                                      enfin le plus souvent on utilise du regex, pour filtrer les pseudos etc etc ou des fonctions, dans les validations. sa sert tjr à sa au final. après le reste c'est bon ta pas de soucis à te faire.

                                      -
                                      Edité par Anonyme 22 juin 2018 à 10:02:37

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 juin 2018 à 10:44:56

                                        FabianHrd a écrit:

                                        WillyKouassi a écrit:

                                        Salut, Encore une fois il faut arrêter de confondre XSS et injection SQL. Si tu utilises cette fonction avant tes insertions alors il faudrait l'arrêter car ça n'apporte rien

                                        mais faut quand même, l'utiliser avant une insertion certaine fois. autrement tes cuis !


                                        Le htmlspecialchars avant une insertion ne sert absolument à rien et ne protège pas contre les injections SQL. Et en plus ça pollue tes données de choses que tu veux pas (en plus de prendre plus de place). Les méthodes comme htmlspecialchars ne s'utilise que à l'affichage point.

                                        De plus ta fonction va replace des choses qui aurait pu être logique. Si j'ai envie de mettre un pseudo, mdp, mail ou autre qui contient script ou INSERT c'est mon droit. et ça ne fera pas d'injection sql.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          22 juin 2018 à 14:04:17

                                          OK merci beaucoup si j'ai d'autre question je reviendrais vers vous:)

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Sécuriter PHP / JS

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown