Sécurité PHP

VaN
Mammouth du PHP | 1107 Messages

16 janv. 2006, 18:47

Bonjour à toute la communauté,
Ca faisait un bail que j'étais pas passé.

J'aimerais avoir des informations sur la sécurité en PHP, et plus précisement, sur la sécurité à mettre en place lors d'utilisation de formulaire.

Je suis en train de créer un site, et je planche actuellement sur le forum, et j'aimerais le rendre le plus sécurisé possible.

Quelles sont les précautions à prendre quand on utilise des formulaires qui vont ensuite lancer une connection à la bdd ?

Vaut-il mieux utiliser des fonctions utilisant les regex, ou les fonctions PHP comme htmlspecialchars() et htmlentities() (il me semble avoir lu que cela avait un rapport avec la sécurité).
Est-il également indispensable d'interdire les caracteres < et > ?

Commen se fait-il que lorsque j'ecris du PHP ou du HTMl dans ce message, il ne soit pas prit en compte lors de l'affichage ?

Voila, tout plein de questions que je me pose, et que j'aimerais eclaircir avant de me lancer.

Mammouth du PHP | 768 Messages

16 janv. 2006, 20:10

Ce message a tout à fait sa place dans la rubrique "méthodologie et sécurité".

Pour éviter qu'un utilisateur malveillant inclus un script dans ton forum (à l'aide du formulaire) tu peux utiliser la fonction strip_tags() http://fr2.php.net/manual/fr/function.strip-tags.php qui supprime les balises HTML et PHP d'une chaine de caractères.
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Mammouth du PHP | 19672 Messages

16 janv. 2006, 20:12

Commen se fait-il que lorsque j'ecris du PHP ou du HTMl dans ce message, il ne soit pas prit en compte lors de l'affichage ?
Pour ça, il faut faire le redoutable effort de cliquer sur les boutons [code] ou [php] qui ajoute en plus une coloration syntaxique.

Pour le reste, ben il y a de nouveaux forums dont un beaucoup plus approprié sur la modélisation et la sécurité ou je déménage ce sujet de ce pas ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VaN
Mammouth du PHP | 1107 Messages

17 janv. 2006, 14:58

Pour ça, il faut faire le redoutable effort de cliquer sur les boutons [code] ou [php] qui ajoute en plus une coloration syntaxique.
Je parlais au point de vue sécurité.
Imaginons que mon message soit :
<table width="1">
<tr>
<td><b> hello !</b></td>
</tr>
</table>
Le code source de la page entiere devrait etre :

..bla bla..
<td>

<table width="1">
<tr>
<td><b> hello !</b></td>
</tr>
</table>

</td>
.. bla bla..

Or cela n'affiche que le texte.

C'est la fonction strip_tags() qui a été utilisée ?
Modifié en dernier par VaN le 17 janv. 2006, 17:29, modifié 1 fois.

Mammouth du PHP | 19672 Messages

17 janv. 2006, 15:07

Beaucoup plus probablement la fonction htmlentities().
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 353 Messages

17 janv. 2006, 21:34

Il ne faut pas utiliser strip_tags sans bien comprendre son fonctionnement.
Comme strip_tags() ne valide actuellement pas le HTML, les balises partielles ou rompues peuvent conduire à la suppression de plus de textes/données que désiré.
<?php
$s = 'Est-ce que 4 est < à 7 , je me pose la question ?';
echo strip_tags($s); // affiche "Est-ce que 4 est "
?>

ViPHP
ViPHP | 1380 Messages

17 janv. 2006, 21:59

Vaste sujet.

Les dangers les plus évidents:
  • Injection SQL. Solution: protéger tous les champs remplis par l'utilisateur avec addslaches() ou mieux, mysql_real_escape_string()
  • Injection mail. Solution facile: supprimer tous les \r\n des champs to from subject
  • crypter ou hacher les mots de passe en base de données.
  • sortir les include sensibles (avec mots de passe de connexion à la bdd) hors DOCUMENT_ROOT du serveur web
  • désactiver l'option Apache Indexes qui révèle la liste de tous les fichiers html ou PHP
  • si tu as la main sur le serveur: fermer tous les ports non strictement nécessaires. Limiter l'accès ftp à un seul utilisateur à la fois. Supprimer ftp guest. Désactiver l'accès ssh par root.
  • Pour les parano: serveur https - ssl
  • Surveiller ses log Apache, ftp et ssh.
  • Prier [-o<
  • etc....
Je sens que la liste va s'allonger :wink:

Edit: Ah, j'oubliais, vérifier ses mots de passe serveur (ssh et autres) avec John the Ripper, la dernière fois que je l'ai fait il m'a trouvé deux mdp.
J'en ai pas dormi de la nuit! :afraid:
ripat

VaN
Mammouth du PHP | 1107 Messages

20 janv. 2006, 17:28

merci Ripat, c'est le genre de conseils que je cherchais : )