Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

  1. Home
  2. Programmation
  3. Développement web
  4. PHP
  5. [Sécurité] Sécuriser ses $_POST & $_GET

[Sécurité] Sécuriser ses $_POST & $_GET

Scheduled Pinned Locked Moved PHP
11 Posts 9 Posters 8.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • BrokeosB
    BrokeosB
    Brokeos
    wrote on last edited by
    #1

    <p style="text-align:center;">Bonsoir, vous n'êtes pas sans savoir que, les hackeurs utilisent une méthode appelée "l'injection sql", qui comme son nom l'indique, permet d'injecté du code sql dans une fonction POST ou GET d'une page php.</p>
    <p style="text-align:center;">Elle est souvent utilisé pour contourner des connexion (par exemple, 'OR "=").</p>
    <p style="text-align:center;"> </p>
    <p style="text-align:center;">Mais comment se protégé ?</p>
    <p style="text-align:center;"> </p>
    <p style="text-align:center;">Tout simplement, rajoutez dans votre méthode POST ou GET :</p>
    <pre class="ipsCode prettyprint">
    mysql_escape_string();
    </pre>
    <p style="text-align:center;">Ce qui donnerais au final (avec la variable et la méthode) :</p>
    <pre class="ipsCode prettyprint">
    $user = mysql_escape_string($_POST['user']);
    </pre>
    <p style="text-align:center;">Voila, j'espère que ça vous auras aidé ! ^^</p>

    1 Reply Last reply
    1
    • C
      C
      Crisou
      wrote on last edited by
      #2

      <p>Merci du partage, mais la PDO ne règle aussi ce problème via les requêtes préparé : P</p>

      1 Reply Last reply
      0
      • AzadA
        AzadA
        Azad
        wrote on last edited by
        #3

        <p>Les requêtes préparées en PDO sont très pratiques à ce niveau là, c'est une vraiment habitude à prendre directement dés le début pour les jeunes développeurs.</p>
        <p>Néanmoins, merci du partage. 😉 </p>
        <p>
        +1 Rep</p>

        Administrateur du forum.
        Contactez-moi par message privé ou par mail.

        1 Reply Last reply
        0
        • S
          S
          Soon
          wrote on last edited by
          #4

          <p>Merci du partage !</p>

          1 Reply Last reply
          0
          • BrokeosB
            BrokeosB
            Brokeos
            wrote on last edited by
            #5

            <p>Au plaisir ! 🙂 </p>

            1 Reply Last reply
            0
            • mars073M
              mars073M
              mars073
              wrote on last edited by
              #6

              <p>toujours un risque de faille xss 😛 </p><p></p><p>solution pour les failles xss:</p><p>- <a href="http://www.php.net/manual/fr/function.htmlspecialchars.php" rel="external nofollow">htmlspecialchars()</a>: affiche les caractères html en caractères littérale ex: "<" devient "&lt;"</p><p>- <a href="http://www.php.net/manual/fr/function.strip-tags.php" rel="external nofollow">strip_tags()</a>: supprime les balises présentent dans le code</p><p></p><p>et pour modifier tout les gets et posts:</p><p></p><pre class="ipsCode prettyprint lang-auto">

              <?php
              foreach ($_GET as $key => $value) {
              $_GET[$key] = addslashes($value);
              }

              foreach ($_POST as $key =&gt; $value) {
              	$_POST[$key] = addslashes($value);
              }
              ?&gt;
              

              </pre>

              Aide à l'apprentissage et la réalisation pour des graphismes, des programmes, des sites ou autres.Signature aléatoire, proposez vous aussi une signature ici!

              1 Reply Last reply
              1
              • sugataseiS
                sugataseiS
                sugatasei
                wrote on last edited by
                #7

                <p>Chouette, un de mes sujets préféré !!!</p>
                <p> </p>
                <p>- Pour les failles d'injection SQL, attention car la librairie mysql est déprécié et sera supprimé très probablement dans la futur version majeur de PHP.</p>
                <p>PDO et mysqli pour ceux qui ne souhaitent pas sortir l'artillerie lourde, fournit une meilleure protection grâce aux requêtes préparées.</p>
                <p> </p>
                <p>- Pour les failles XSS vous pouvez aussi utiliser la fonction filter_var. Cette fonction possède un tas d'options pour filtrer et vérifier vos données. Pour se protéger des failles xss : filter_var($data, FILTER_SANITIZE_STRING)</p>
                <p> </p>
                <p>Remarque : Ne pas inclure ce filtre automatiquement sur tous vos paramètres HTTP. La faille XSS est une faille qui agit en sortie, pas en entrée. Ne filtrer donc que les variables que vous utilisez. Sinon on peut s'amuser à envoyer des requètes HTTP avec de très nombreux paramètres POST pour essouffler votre serveur qui va tout filtrer à chaque page 🙂 Et si vous vous attendez à un int, bool, float. Un simple cast fera l'affaire !!!</p>
                <p> </p>
                <p>- Ensuite il y a les failles CSRF (soumission de formulaire non contrôlé) : Vous pouvez créer un système de clé publique, clé privé (identifiant de la session) avec password_verify et password_hash. Vous collez la clé privée en session et la clé publique dans un input hidden de tous vos formulaires. Lors du traitement du formulaire, vous pourrez alors tester si la cohérence des clés pour vérifier que le formulaire est appelé depuis une page de votre site et non pas d'un bot.</p>
                <p> </p>
                <p>- Pour les formulaires d'upload : ne pas faire confiance à l'extension du nom de fichier ou du type contenu dans la superglobale $_FILE. Voir : <span style="font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif;margin:0px;color:rgb(0,0,0);">finfo_open</span><span style="font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif;margin:0px;color:rgb(0,0,0);">(</span><span style="font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif;margin:0px;color:rgb(0,0,0);">FILEINFO_MIME_TYPE</span><span style="font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif;margin:0px;color:rgb(0,0,0);">);</span></p>

                1 Reply Last reply
                1
                • SoulalexS
                  SoulalexS
                  Soulalex
                  wrote on last edited by
                  #8

                  <p>Merci pour ces précisions 🙂 </p>

                  Soulalex, Administrateur de Melinyel+ E-Mail : [email protected]+ GitHub : https://github.com/Soualex

                  1 Reply Last reply
                  0
                  • AlexMogA
                    AlexMogA
                    AlexMog
                    Modérateur spécialisé
                    wrote on last edited by
                    #9

                    <blockquote class="ipsQuote" data-cite="sugatasei" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="15952" data-ipsquote-contentid="33" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1425590154" data-ipsquote-username="sugatasei"><div>
                    <div>
                    <p>Chouette, un de mes sujets préféré !!!</p>
                    <p> </p>
                    <p>- Pour les failles d'injection SQL, attention car la librairie mysql est déprécié et sera supprimé très probablement dans la futur version majeur de PHP.</p>
                    <p>PDO et mysqli pour ceux qui ne souhaitent pas sortir l'artillerie lourde, fournit une meilleure protection grâce aux requêtes préparées.</p>
                    <p> </p>
                    <p>- Pour les failles XSS vous pouvez aussi utiliser la fonction filter_var. Cette fonction possède un tas d'options pour filtrer et vérifier vos données. Pour se protéger des failles xss : filter_var($data, FILTER_SANITIZE_STRING)</p>
                    <p> </p>
                    <p>Remarque : Ne pas inclure ce filtre automatiquement sur tous vos paramètres HTTP. La faille XSS est une faille qui agit en sortie, pas en entrée. Ne filtrer donc que les variables que vous utilisez. Sinon on peut s'amuser à envoyer des requètes HTTP avec de très nombreux paramètres POST pour essouffler votre serveur qui va tout filtrer à chaque page 🙂 Et si vous vous attendez à un int, bool, float. Un simple cast fera l'affaire !!!</p>
                    <p> </p>
                    <p>- Ensuite il y a les failles CSRF (soumission de formulaire non contrôlé) : Vous pouvez créer un système de clé publique, clé privé (identifiant de la session) avec password_verify et password_hash. Vous collez la clé privée en session et la clé publique dans un input hidden de tous vos formulaires. Lors du traitement du formulaire, vous pourrez alors tester si la cohérence des clés pour vérifier que le formulaire est appelé depuis une page de votre site et non pas d'un bot.</p>
                    <p> </p>
                    <p>- Pour les formulaires d'upload : ne pas faire confiance à l'extension du nom de fichier ou du type contenu dans la superglobale $_FILE. Voir : <span style="font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif;margin:0px;color:rgb(0,0,0);">finfo_open</span><span style="font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif;margin:0px;color:rgb(0,0,0);">(</span><span style="font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif;margin:0px;color:rgb(0,0,0);">FILEINFO_MIME_TYPE</span><span style="font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif;margin:0px;color:rgb(0,0,0);">);</span></p>
                    </div>
                    </div></blockquote>
                    <p>Pour l'upload, il faut faire attention, même finfo_open est traitre 🙂 . Il faut penser à utiliser des solutions plus poussées.</p>
                    <p>Par exemple, l'intégration de code php exécutable (ou encore de shellcode) est très simple dans une image (je vous laisse chercher par vous mêmes 🙂 ).</p>
                    <p>Le contre, c'est de vérifier, dans le header d'une image par exemple, si elle est corrompue. Beaucoup d'images proposent un hash de leur données dans leur header pour savoir si il y a eu corruption, à vous de vous amuser avec ça 😉 .</p>
                    <p> </p>
                    <p>Have fun!</p>

                    Multiplayer GameDev @ Unexpected
                    

                    Mon CV

                    1 Reply Last reply
                    0
                    • sugataseiS
                      sugataseiS
                      sugatasei
                      wrote on last edited by
                      #10

                      <p>Rien n'empêche de mettre à jour le hash de l'image après la corrompre.<br/><br/>
                      Le code PHP contenu dans une image n'est pas interprété si on l'affiche dans un contexte statique. A moins que le serveur soit configuré pour exécuter les images comme du PHP mais dans ce cas autant donner les clés root ce sera plus rapide ^^<br/><br/>
                      Pour exécuter le code contenu dans ton image vérolé, il faut l’exécuter dynamiquement avec un "require/include". Inclure un fichier externe comme ceci est <strike>passible de peine de mort</strike> est en effet très dangereux car on demande explicitement d’exécuter du code externe ... Il y a des librairies tel que gd ou imagick qui permettent de manipuler les images sans les exécuter. On peut également utiliser readfile pour servir l'image comme une image. Ou si on veut afficher le contenu (pas le lien) directement dans une balise img l'utilisation de base64encode est aussi safe.</p>
                      <p> </p>
                      <p>J'édite pour synthétiser (et corriger mes fautes d'aurttaugraf) :</p>
                      <p>- finfo_open permettra surtout de vérifier que le type de fichier upload est cohérent avec le type de fichier que vous souhaitez utiliser. (pas de docx renommé en pdf si un pdf est attendu).</p>
                      <p>- Recueillir des données externe est toujours source de faille de sécurité (même avec un antivirus). Il faut l'accepter et faire avec 🙂 La sécurité se passe à la sortie : ne pas exécuter / intérepreté un fichier externe dans votre environnement d’exécution (PHP). Desservez vos media dans un contexte statique (url/img.jpg). Dynamiquement, envoyez le contenu au navigateur sans l’interpréter.</p>

                      1 Reply Last reply
                      1
                      • F
                        F
                        FaKe77
                        wrote on last edited by
                        #11

                        <p>Function obsolete.</p>

                        1 Reply Last reply
                        0

                        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                        With your input, this post could be even better 💗

                        Register Login
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Login or register to search.
                        Powered by NodeBB Contributors
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups