Tutoriaux pour ASP-Nuke
             
 
Menu
 Accueil
 News
 Forum
 Annuaire
 Sondages
 Téléchargements
 Balises
 Images
 Chat ASP-Nuke
 Tests hébergeurs
 Tutoriaux
 ASP-Nuke à la une
 FAQ

 S'identifier
 S'inscrire

 Démo en ligne

Visiteurs
Actuellement en ligne: 2
Dont membres: 0
+ d'infos...

Comptes
Membres : 387
Dernier inscrit : TomHDL
Liste des membres

Rechercher

 
Tutoriaux pour ASP-Nuke
Retour à la liste des tutoriaux

La sécurité sur un site web
J'ai pense qu'un petit tutorial sur la sécurité est un point très important pour vous aider à éviter les principaux pièges.
J'en profiterai pour mettre en évidence les mesures prises pour ASP-Nuke et celles que vous devrez prendre afin de ne pas vous faire hacker votre site.


1. Encoder ses chaînes de caractères
Vous utilisez à travers vos sites web différents variables que le visiteur a rempli lui-même, dans des formulaires par exemple (pseudo, email, adresse internet, ...). Vous n'avez que peu de moyens de vérifications sur ces données (à part utiliser systématiquement des expressions régulières pour empêcher certaines valeurs, mais ce n'est pas toujours applicable).
Le visiteur peut détourner l'affichage de ces valeurs en y insérant des scripts (on appelle cette méthode le cross-site scripting). Les premières versions (RC1 et RC2) d'ASP-Nuke ont connu ce problème. Il vous faut utiliser le Server.HTMLEncode sur toutes les valeurs que vous ne pouvez pas contrôler (affichage de champs de la base de données par exemple).
Attention, une erreur peut survenir si vous tentez de faire un Server.HTMLEncode d'une chaîne nulle; vous pouvez faire alors un Server.HTMLEncode(maChaineVide & ") pour contourner le problème.
L'encodage HTML des chaînes permet de transformer les caractères utilisés par le HTML comme >, &lt ou encore le " en leur code spécial (par exemple &lt; pour <) et ainsi éviter que le navigateur l'interprète comme une balise HTML.

Voici 3 exemples simples :
  • Affichage d'un email que l'utilisateur a rempli avec <script>alert('?')</script> causera l'affichage d'une boîte de dialogue à chaque fois que cet email sera appelé (c'est une exemple "gentillet" sur l'utilisation du Javascript).
  • Affichage de ce même email dans un champ texte, mais avec un "> avant le <script... Les 2 caractères "> seront interprétés comme une fermeture de balise texte, et le texte suivant pourra être affiché tel quel.
  • De la même façon, on peut rajouter un </textarea> pour fermer un champ TEXTAREA.
Donc pensez à TOUT coder, affichage de valeurs dans la page ou dans des formulaires ! De plus, n'oubliez pas que Server.HTMLEncode est une fonction propre à l'ASP.


2. Doubler les apostrophes (') pour les chaînes de caractères utilisées pour les requêtes dans les bases de données
De la même façon qu'on peut fermer des balises HTML comme ci-dessus, on peut fermer une requête SQL en insérant un ' dans une variable texte. Ce caractère ' est utilisé pour délimiter les champs textes dans les requêtes SQL.
Pour éviter ce problème, il suffit de remplacer toutes les apostrophes dans votre chaîne par 2 apostrophes (c'est ce que fait la fonction que j'appelle chaque fois pour mes requètes dans ASP-Nuke SQLEncrypt).
Un simple Replace(laChaine, "'", "''") fera l'affaire. Un petit exemple pour illustrer cela :
Vous avez la requête SELECT * FROM Users WHERE uLogin = '" & sPseudo & "'. Si sPseudo est égal à "Pat l'étourdi" vous aurez un problème. Si de plus il en profite pour rajouter une requète supplémentaire, ce sera pire encore.
En doublant les quotes, vous obtiendrez SELECT * FROM Users WHERE uLogin = 'Pat l''étourdi'' qui fonctionnera, au leu de SELECT FROM Users WHERE uLogin = 'Pat l'étourdi' qui plantera.

3. La protection de vos données
Sur un site web, vous stockez vos données principalement sous 2 formes : du code ASP dans vos pages .asp et vos données dans vos bases de données (Access dans le cas qui nous intéresse ici).

Pour le code ASP, il est fréquent d'utiliser des fichiers inclus sous la forme de SSI (Server Side Includes). C'est ce que vous retrouvez en début et fin des pages ASP d'ASP-Nuke (<include file="includes/moninclude-inc.asp">). C'est très pratique car cela permet de dissocier des grosses functions de la page qui s'en sert, et permettant ainsi la réutilisation de ce code dans plusieurs pages (comme ici functions-inc.asp ou variables-inc.asp).
Une erreur a ne pas commettre est d'appeler ces fichiers en MonFichier.txt par exemple. Car ainsi, le code sera bien utilisable par la page l'incluant, mais la personne mal intentionnée pourra chercher à afficher directement le code de cette page (appel direct dans le navigateur).
Appelée directement, cette page ne sera pas interprétée par le serveur car l'extension ne sera pas .asp et le code sera ainsi affiché tel quel, en clair. Vous perdrez du coup le bénéfice du code côté serveur.

Pour les bases de données, il vous faudra protéger l'accès au répertoire les contenant. Cela peut se faire de plusieurs moyens, mais généralement les hébergeurs proposent un répertoire non accessible par le web (uniquement par FTP et par code ASP). Pensez bien à cela, car sinon n'importe qui peut trouver l'emplacement de vos bases, les télécharger et ainsi vous voler toutes vos informations (logins, mots de passe, ...).
J'ajouterai aussi la possibilité au créateur de la base de données Access de mettre un mot de passe sur la base elle-même. Ce n'est pas la panacée, et autant dire que ce moyen n'est pas la solution ultime, loin s'en faut.

Conclusion
J'espère que ces quelques points vous aideront dans vos créations en évitant les failles de sécurité les plus communes.
J'espère avoir été assez clair, mais si vous avez besoin d'un conseil ou d'aide, n'hésitez pas à me mailer à webmaster@asp-nuke.com.
La sécurité est un point trop important pour l'ignorer ou la sous-estimer !

Tutoriaux pour ASP-Nuke
Retour à la liste des tutoriaux

 
Version

Mes Favoris
Codes-Sources (1261)
PHP-Nuke (828)
ADSL-Facile (453)
myPHP Soft (356)
AspIn (281)
FaitMain.com (241)
eFrance (233)
MS Supinfo (185)
IMaxel (180)
PocketPC France (153)
Free - Jeux en ligne (130)

Top - Sites web
Oilfiltration.com (EN)
Web-pour-tous (FR)
Internet-hebergeur.fr (FR)
AfondLesGaz (FR)
ConsoleMag (FR)
cestpasdur.com (FR)
Fun[R]eseau (FR)
Portail Communautaire de Programmation (FR)
Scepo (FR)
Prof GROMONO (FR)

Votez pour ce site au Weborama


Hit-Parade