Après m'être rendu compte que de nombreuses personnes se font pirater ou recherchent une sécurité maximum pour leurs sites, je lance ce sujet qui a pour but de recenser les "choses à faire et ne pas faire".
Le but de ce post n'est pas de donner les techniques complètes, mais plutôt une sorte d'index. Chacun des points évoqués ici pourront faire l'objet d'autres sujets pour rentrer dans le détail.
Je vais commencer cette liste. j'appelle tout le monde à participer pour que cette liste soit le plus exhaustive possible et je mettrai à jour la liste au fur et à mesure.
Libre à un admin du site de le mettre en post it ou de le laisser sombrer dans les méandres du forum.
LES CHOSES A FAIRE ET NE PAS FAIRE POUR SÉCURISER SON SITE INTERNET :
- Toujours penser qu'un bon pirate trouvera toujours les infos qu'il veut
Par exemple, il y a quelques jours un collègue me disais à propose de son site à propos de ces pages passées en "include" avec une variable GET :"J'ai utilisé url rewriting, changé toutes les variables, il est quasiment impossible de comprendre comment la page est traitée... Bien sur si un pirate le comprends, la c'est vulnérable"...
ERREUR ! Il faut TOUJOURS penser que quelqu'un arrivera à trouver ses infos, donc sécuriser au cas ou.
- Utiliser la politique du "tout interdire sauf..." plutôt que "tout accepter sauf..."
Par exemple, vous faite un formulaire, il y a 6 choix possibles : Lors du traitement de ce formulaire en php, il faut faire des IF qui vont accepter Seulement les 6 choix et interdire tous les autres !
- Bien verrouiller toutes les variables en GET
Si c'est une variable du style machin=55 ( que des chiffres ), penser a voir ce que ca donne si on met des lettres ( très souvent cela donne une erreur, et le navigateur affiche l'erreur avec une partie de ta requête sql = vulnérabilité )
- Désactiver les messages erreur php/sql lors de la mise en ligne
C'est bien pour le codage, mais avoir des messages genre " mysql erreur line 55 near 'query machin from table", c'est pas bon pour la sécurité.
- Bannir les includes par GET
ou alors vraiment les sécuriser en acceptant que vos url avec un code du genre :
- Ne pas mettre de lien vers l'interface administrateur depuis le site accessible coté "client"
L'administration du site se fait par un dossier ou une adresse que l'on tape manuellement dans le navigateur
- Mettre un fichier "index.php" ou "index.html" dans chacun de ses dossiers
Tous les dossiers ! images, photos, etc...
Pour éviter que l'on puisse, en tapant l'adresse du dossier dans le navigateur ( comme w*ww.example.com/images/ ) avoir la liste des pages ou fichiers contenus dans ce dossier.
Cet index peut , au choix, renvoyer vers la page d'accueil du site ou afficher un message d'erreur.
- Utiliser le htmlentities ou des fonctions ereg pour traiter les variables en POST ou GET
Pour éviter l'injection de script par un internaute.
- Protéger ses dossiers sensibles ( commme admin ) avec un htaccess et htpass
Ca peut paraître tout bête mais j'ai connu des personnes qui l’oubliaient.
De plus, nommer son fichier admin d'un autre nom que admin ou administrateur est conseillé.
- Ne passer aucune variable "sensible" ( comme un mot de passe ) en GET, cookie ou en form hidden
Il sera très facile pour un pirate débutant de les récuperer.
- Nommer les fichiers à inclure en .php
Quand vous faites des includes nommez vos fichiers en .php et pas .inc, .txt ou autre sinon un pirate malin pourra lire vos commandes php, vos données et autres!
Le but de ce post n'est pas de donner les techniques complètes, mais plutôt une sorte d'index. Chacun des points évoqués ici pourront faire l'objet d'autres sujets pour rentrer dans le détail.
Je vais commencer cette liste. j'appelle tout le monde à participer pour que cette liste soit le plus exhaustive possible et je mettrai à jour la liste au fur et à mesure.
Libre à un admin du site de le mettre en post it ou de le laisser sombrer dans les méandres du forum.
LES CHOSES A FAIRE ET NE PAS FAIRE POUR SÉCURISER SON SITE INTERNET :
- Toujours penser qu'un bon pirate trouvera toujours les infos qu'il veut
Par exemple, il y a quelques jours un collègue me disais à propose de son site à propos de ces pages passées en "include" avec une variable GET :"J'ai utilisé url rewriting, changé toutes les variables, il est quasiment impossible de comprendre comment la page est traitée... Bien sur si un pirate le comprends, la c'est vulnérable"...
ERREUR ! Il faut TOUJOURS penser que quelqu'un arrivera à trouver ses infos, donc sécuriser au cas ou.
- Utiliser la politique du "tout interdire sauf..." plutôt que "tout accepter sauf..."
Par exemple, vous faite un formulaire, il y a 6 choix possibles : Lors du traitement de ce formulaire en php, il faut faire des IF qui vont accepter Seulement les 6 choix et interdire tous les autres !
- Bien verrouiller toutes les variables en GET
Si c'est une variable du style machin=55 ( que des chiffres ), penser a voir ce que ca donne si on met des lettres ( très souvent cela donne une erreur, et le navigateur affiche l'erreur avec une partie de ta requête sql = vulnérabilité )
- Désactiver les messages erreur php/sql lors de la mise en ligne
C'est bien pour le codage, mais avoir des messages genre " mysql erreur line 55 near 'query machin from table", c'est pas bon pour la sécurité.
- Bannir les includes par GET
ou alors vraiment les sécuriser en acceptant que vos url avec un code du genre :
Code:
$valid_pages = array ('index', 'rechercher', 'downloads', 'liens', 'construction');
if (in_array($_GET['page'], $valid_pages)) { $PAGE = $_GET['page']; return $PAGE; } else { $PAGE='construction'; $FOLDER='construction'; return $PAGE; return $FOLDER; }
- Ne pas mettre de lien vers l'interface administrateur depuis le site accessible coté "client"
L'administration du site se fait par un dossier ou une adresse que l'on tape manuellement dans le navigateur
- Mettre un fichier "index.php" ou "index.html" dans chacun de ses dossiers
Tous les dossiers ! images, photos, etc...
Pour éviter que l'on puisse, en tapant l'adresse du dossier dans le navigateur ( comme w*ww.example.com/images/ ) avoir la liste des pages ou fichiers contenus dans ce dossier.
Cet index peut , au choix, renvoyer vers la page d'accueil du site ou afficher un message d'erreur.
- Utiliser le htmlentities ou des fonctions ereg pour traiter les variables en POST ou GET
Pour éviter l'injection de script par un internaute.
- Protéger ses dossiers sensibles ( commme admin ) avec un htaccess et htpass
Ca peut paraître tout bête mais j'ai connu des personnes qui l’oubliaient.
De plus, nommer son fichier admin d'un autre nom que admin ou administrateur est conseillé.
- Ne passer aucune variable "sensible" ( comme un mot de passe ) en GET, cookie ou en form hidden
Il sera très facile pour un pirate débutant de les récuperer.
- Nommer les fichiers à inclure en .php
Quand vous faites des includes nommez vos fichiers en .php et pas .inc, .txt ou autre sinon un pirate malin pourra lire vos commandes php, vos données et autres!