IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] Script de hacking


Sujet :

Langage PHP

  1. #1
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut [Sécurité] Script de hacking
    Bonjour,

    Je suis en train de finaliser une application web, qui fonctionne un peu comme un cms, avec des modules, des blocs, des composants, des thèmes..etc.
    J'en suis à la partie sécurité.
    Donc j'ai appliqué à mon appli l'url rewrite, toutes mes urls se finissent en html. Egalement j'ai refusé l'accès à toutes les fichiers php ou xml de mon appli. J'ai également testé l'injection de JS ou de SQL et apparemment c'est bon.
    Maintenant j'aimerais savoir si j'ai bien fait tout ça, et si il n'existerait pas quelques failles.
    Donc voilà ma question :
    Existe-t-il des scripts à téléchager testant la sécurité d'un site web passé en paramètre ?

    Merci pour vos réponses,

  2. #2
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    Salut =)

    Je ne pense pas que de tels scripts existent, étant donné que de tels tests dépendent totalement de l'environnement, de ton arborescence, de pleins de choses. De plus, des tests effectués automatiquement ne seraient pas complets, et vu ce que tu as déjà testé, je ne pense pas que ce serait utile.

    Par contre as-tu bien validé également les entrées imprévues (les dépassements de tampon) ? si des tests sont faits en JS, que se passe-t-il si l'utilisateur les désactive ? que se passe-t-il si quelqu'un se connecte en telnet sur ton serveur et envoie des requêtes à la main ?

    De toutes façons, il faut se dire qu'il y aura toujours un moyen de "hacker" un site, d'accéder à des ressources non prévues. La seule chose que l'on peut faire, c'est de gagner du temps, pour repérer le hacker et se protéger.

  3. #3
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut
    De toutes façons, il faut se dire qu'il y aura toujours un moyen de "hacker" un site, d'accéder à des ressources non prévues. La seule chose que l'on peut faire, c'est de gagner du temps, pour repérer le hacker et se protéger.
    On est bien d'accord.

    si des tests sont faits en JS, que se passe-t-il si l'utilisateur les désactive ?
    Alors ça c'est bon, les test js sont un "plus" dans l'appli et d'ailleurs j'ai fait une classe pour automatiser tout ça. Mais en fait au niveau verif, tout est doublé et revérifié côté serveur lorsqu'un formulaire est validé.

    Par contre il y a ces 2 points que je ne sais pas tester :

    que se passe-t-il si quelqu'un se connecte en telnet sur ton serveur et envoie des requêtes à la main ?
    Tu aurais un petit tutorial pour voir comment je peux accéder à mon site par telnet et essayer quelques intrusions ?

    as-tu bien validé également les entrées imprévues (les dépassements de tampon) ?
    Idem, je connais pas non plus les dépassements de tampon. Ca arrive à la suite de quoi ? et comment je peux y accéder pour vérifier mon appli ?

    Merci de ton aide et de ton intérêt pour ce post

  4. #4
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    Bon pour les dépassements de tampon, c'est pas vraiment pour le php... plus pour le C/C++. c'est le cas quand tu prévois une chaine de caractères de 30 lettres, et que l'utilisateur rentre 31 caractères. et bien ton appli plante.

    Mais pour le php, les entrées imprévues sont par exemple :
    tu as un formulaire avec 2 cases à cocher. Au moins une est obligatoire. le script qui reçoit le formulaire teste si c'est l'une ou l'autre. Ben oui, mais si je me connecte en telnet sur ton serveur web, je poste une requête avec une valeur complètement autre, et bien qu'est-ce qui se passe ? soit rien, tu as prévu, soit on a la liste de tous les mots de passe (c'est exagéré, mais ça peut arriver...).

    Pour en connaitre plus sur les requêtes HTTP et avoir un exemple de session telnet, tu peux aller voir ici :http://www.iprelax.fr/http/

    Tu hébegres toi-même ton site ?

  5. #5
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut
    Ok, merci , je vais aller y faire un tour et me renseigner davantage.

    Sinon, non je n'héberge pas mon site. Personnellement il est sur un serveur mutualisé. Et la j'utilise mon framework pour un client qui hébergera également les projets que je réalise pour lui, sur un serveur mutualisé.

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Je m'interroge sur la remarque de Luffy Duck : n'y a-t-il pas plus simple que de se connecter en telnet, si c'est simplement pour envoyer un formulaire ?
    Genre je vais sur le site, je connais la structure du formulaire puisque j'en enregistre un sur mon ordi, je le modifie selon mes besoins (j'ajoute ou je supprime des cases) de manière à envoyer une structure imprévue au serveur et je valide le formulaire.

    C'est similaire à modifier les paramètres GET d'une URL, simplement un peu plus long à faire.

    Le telnet (cherche puTTY pour l'utiliser sous Windows) n'est utilisable que dans certains cas. En mutualisé, c'est rare que tu y aies accès car telnet est plutôt réservé à l'administration de ton serveur (si tu n'es pas root, l'intérêt du telnet est limité).

  7. #7
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut
    Effectivement je n'ai pas réussi à accèder à ces sites par telnet, je pensais que je me trompais de commande.

    Sinon merci pour la remarque, effectivement je vérifie en ce moment la sécurité de mes formulaires en ce moment, et ta technique me semble intéressante.

    Je pense avoir malgré tout assez bien sécurisé mon appli. On verra si ça résiste bien quand y a aura une forte fréquentation.

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Ce à quoi il faut penser, c'est de toujours vérifier les données envoyées par l'utilisateur. Ne jamais utiliser de données brutes. Toujours gérer tous les cas possibles quand on a une suite de tests (tant les if/elseif que les switch).

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Un petit plus : si tu as des cases à cocher, des options ou des select, tu dois faire comme si c'étaient des text. Exemple : si tu as 2 option ('oui', 'non'), tu dois vérifier expressément si c'est 'oui' ou 'non' qui est transmis.
    Mauvais code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($_POST['choix']=='oui')
      {$choix_valide='oui';}
      else
        {$choix_valide=$_POST['choix'];}
    En effet, si une autre valeur est passée dans le POST, tu as une faille. Au mieux, tu as une entrée invalide en bdd. Au pire, tu as une sql injection.
    Meilleur code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($_POST['choix']=='oui' or $_POST['choix']=='non')
      {$choix_valide=$_POST['choix'];}
      else
        {echo 'Bouhh ! Va t'en, méchant pirate !';}

  10. #10
    Membre averti
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Par défaut ...
    un ptit coucou pour dir que j'aime bien ton site...
    franchement respééé

    c des sites comme le tien qui donne tjr envie de naviguer sur la toilleeeee.



    pour des failles j'ai pas tro cherché mais sa semble correcte. De toute facon quand ton v faire chier ya tjr une failleee

    bon courrrage et d'un gou perso casse un p le style "site deja vue" nivo design bien sur...demarque toi é la c le top

    @++

  11. #11
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Perso, j'aime bien le switch pour ce genre de cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch($_POST['choix']){
       case 'oui':
          //...
          break;
     
       case 'non':
          //...
          break;
     
       default:
          //...
    }
    C'est super visuel comme truc, on sait tout de suite si on a oublié quelque chose.

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Je suis d'accord pour le switch, surtout si il y a beaucoup de valeurs. J'avais cependant lu que switch n'était pas trop optimisé ?
    Sinon, s'il suffit de vérifier que la donnée est bien choisie dans la liste, on peut définir un array avec toutes les valeurs possibles, et tester avec in_array(). Ca me semble plus simple et plus optimisé.

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Pour l'optimisation du switch, je ne sais pas mais j'aurais tendance à penser que c'est systématiquement plus rapide que plusieurs tests (if/elseif) puisqu'il n'en fait qu'un (de test).

  14. #14
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    Salut

    Je m'interroge sur la remarque de Luffy Duck : n'y a-t-il pas plus simple que de se connecter en telnet, si c'est simplement pour envoyer un formulaire ?
    Genre je vais sur le site, je connais la structure du formulaire puisque j'en enregistre un sur mon ordi, je le modifie selon mes besoins (j'ajoute ou je supprime des cases) de manière à envoyer une structure imprévue au serveur et je valide le formulaire.
    C'est concernant le "je le modifie selon mes besoins" qui me gène. Tu as beau modifier le formulaire de la page que tu as enregistrée, celui du serveur restera le même. La seule manière d'envoyer des données au serveur est la session telnet (ou tout autre appli qui permette une connexion au serveur et d'envoyer ce que l'on veut.) Cependant, ceci n'est valable que pour les requêtes POST, car pour les requêtes GET, on a juste à passer ce que l'on veut dans l'URL.

    et pour ce qui est du switch, il est bien optimisé. Mais dans certains cas, mieux vaut utiliser in_array(). Tout dépend du contexte.

  15. #15
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Je ne suis pas d'accord.
    J'ai déjà testé de modifier un formulaire en local et d'envoyer les données vers le script distant : le serveur n'y a vu que du feu...

  16. #16
    Membre confirmé Avatar de Luffy Duck
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 165
    Par défaut
    tu as raison c'est vrai que c'est logique en plus, le client web fait sa requête en fonction de la page qu'il a entre les mains...

    En tout cas merci, c'est une chose à la quelle je n'aurais jamais pensé ! et c'est en effet plus simple qu'une session telnet, mais peut-être moins puissant pour tester

  17. #17
    Membre chevronné Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Par défaut
    Citation Envoyé par Kirkis
    Le telnet (cherche puTTY pour l'utiliser sous Windows) n'est utilisable que dans certains cas. En mutualisé, c'est rare que tu y aies accès car telnet est plutôt réservé à l'administration de ton serveur (si tu n'es pas root, l'intérêt du telnet est limité).
    Le but du test "telnet" est de faire un telnet sur le port 80, donc c'est forcément accessible, si il y a un site derriere.
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    telnet www.google.com 80
    et ensuite taper ça:
    Citation Envoyé par vg33
    J'ai déjà testé de modifier un formulaire en local et d'envoyer les données vers le script distant : le serveur n'y a vu que du feu...
    Sauf des fois dans le cas des sessions, et dans ce cas, il faut passer par telnet (ou autre)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sécurité script PHP
    Par G-nome dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2009, 08h42
  2. [MySQL] Sécurité Tentative de hacking
    Par Stoneblur dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/05/2008, 10h07
  3. Réponses: 1
    Dernier message: 14/03/2008, 19h59
  4. [Sécurité] Script de login / pass avec sessions
    Par atomcomputer dans le forum Langage
    Réponses: 12
    Dernier message: 29/11/2006, 09h58
  5. Réponses: 6
    Dernier message: 16/01/2006, 15h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo