Programmation Sécuriser votre site avec PHP

  • Auteur de la discussion 360matt
  • Date de début
360matt

360matt

Fondateur de Ulity
Membre du personnel
Administrateur
Wesh Alors (nan sans déconner) ...

Aujourd'hui je voudrais que l'on traite le sujet de Sécurité du langage de développement de site web PHP.




[1]: Sécurisez vos variables
Les attaques XSS (Cross Site Scripting) se basent par l'entrée utilisateur (formulaires POST, valeurs GET, Cookies), elles sont nombreuses et peuvent être exploités par divers outils comme SQLmap.
Pour s'en protéger il faudrait utiliser une fonction, on entre le nom de la variable en argument puis on récupère la valeur finale en prenant la valeur de la fonction.



PHP:
<?php
    
    $France = $_GET['page'];
    /* Pour l'instant, la valeur de la variable n'est pas sécurisé
    Autrement dit, Le contenu de la variable peut être dévastateur
    Ex: Utilisation d'une fuite pour insérer un code malicieux */

    
    $France = htmlspecialchars($France);
    /* On redefinis la variable France par la valeur de la fonction.
    Cette fonction ce base sur l'argument de la variable à sécuriser
    
    Cette variable qui était à sécuriser n'a pas changé
    tant que la fonction n'a pas renvoyé la nouvelle valeur */

?>



[2]: Utiliser $_SESSION au lieu de $_COOKIE
Certains développeurs ont déjà fait cette erreur (moi aussi d'ailleurs). Je vous recommande d'utiliser les sessions tout simplement par ce que celles-ci ne peuvent pas être lus ni modifiés par l'utilisateur.
En revanche, les cookies peuvent être lus et même modifiés. D'ailleurs en utilisant les cookies utilisez également la fonction "htmlspecialchars($_COOKIE['Cookie'])".


Je vous fais un petit exemple:
PHP:
<?php
    session_start();
    /* On démarre la session, PHP génera l'ID automatiquement */
    
    $a = 'une';
    $b = 'simple';
    $c = 'valeur';
    /* Ce seront les variables que nous aurons besoin pour le tutoriel */


    $_SESSION['valeur_de_session_1'] = $a;
    $_SESSION['valeur_de_session_2'] = $b;
    $_SESSION['valeur_de_session_3'] = $c;
    /* les sessions ont étés crées */


?>


C'est bien on a créé quelques variables de sessions, mais si on veut les utiliser ?
PHP:
<?php
    session_start()
    /* On a besoin des sessions, on déclare DONC ! */
    
    
    $recuperer = $_SESSION['valeur_de_session_1'];
    $une = $_SESSION['valeur_de_session_2'];
    $valeur = $_SESSION['valeur_de_session_3'];
    /* On récupère les valeurs des sessions
    
    Au fait elles sont stockés sur le serveur donc
    c'est pour ça qu'un utilisateur ne peut pas les modifier
    
    Comme d'habitude on oublie pas le point virgule en fin d'instructions */
    
    
?>

<p>Votre nom est: <b> <?php print($recuperer); ?> </b>
<br />
Vous avez: <b> <?php print($une); ?> </b> ans
<br />
Et la marque de ton ordinateur est: <b> <?php print($valeur); ?> </b>

</p>
Je me suis amusé à mettre un peu de HTML pour démontrer que
l'on peux récupérer les valeurs des variables mais également les utiliser comme toutes variables.





[3]: Utiliser une requête préparé
Si vous prévoyez d'utiliser une base de donnée, il est important d'utiliser une requête préparé et également le fonction vu en #1 (htmlspecialchars).
Cette fois-ci ce n'est pas moi qui fais la démonstration, ce tutoriel est assez bien expliqué:

https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/914508-ecrivez-des-donnees#/id/r-2175545
 
360matt

360matt

Fondateur de Ulity
Membre du personnel
Administrateur
Salut,

Attention ! Avec le "htmlspecialchars" parce que ce n'est pas très sécurisé que l'on pense !

Flippo (CatCore).
htmlspecialchars() permet de remplacer tous les caractères de symboles comme des tirets, des slashs ou bien des apostrophe ce qui rend difficile une faille XSS via un reqête GET, POST et la lecture d'un cookie.
 
• • •「Max」• • •

• • •「Max」• • •

Membre
Membre
htmlspecialchars() permet de remplacer tous les caractères de symboles comme des tirets, des slashs ou bien des apostrophe ce qui rend difficile une faille XSS via un reqête GET, POST et la lecture d'un cookie.
Flippo n'as pas totalement tort,

Je recommande personnellement d'utiliser htmlentities()

Pourquoi ? Tout simplement car :

htmlspecialchars() - Convertit les caractères spéciaux en entités HTML
htmlentities() - Convertit tous les caractères éligibles en entités HTML
 
360matt

360matt

Fondateur de Ulity
Membre du personnel
Administrateur

Haut