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

Sécurité Discussion :

Quelles sont les meilleures pratiques de sécurité pour protéger un site des hackers ?


Sujet :

Sécurité

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Quelles sont les meilleures pratiques de sécurité pour protéger un site des hackers ?
    Bonjour,

    Il y a quelques jours je vais un site que je visite régulièrement, et à ma grande surprise la page d'accueil a été remplacée par un hacker, plus rien ne fonctionnait. Aujourd'hui c'est rentré dans l'ordre mais je me dit que si ce site important est tombé sous l'assaut d'un hacker, mon site sera alors très facile à hacker parce que je ne m'y connait pas autant que le webmaster de ce site, qui est à priori un professionels dans ce domaine.
    Je me demande juste alors comment se prémunir de ce genre d'attaque pour ne pas retrouver son site un beau matin totalement effacé, remplacé par une page d'un hackeur qui se vente de son acte !

    Quels sont leurs techniques pour récupérer les identifiants ? Comment les protéger ? Comment tout simplement protéger son site des hackeurs ?

    Merci
    Au revoir
    Bonne journée ++

  2. #2
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    il y a des failles de sécurité connues à vérifier, notemment au niveau des include en PHP.
    Sinon, mieux vaut encoder login et password en MD5.

    Je me suis aussi fait pirater la semaine derniere par des abrutis (y'a pas d'autres mots, c'est débile de pirater un site perso) mais pas moyen de trouver comment ils ont fait

  3. #3
    Rédacteur en Chef
    Avatar de Marc Lussac
    Homme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Mars 2002
    Messages
    28 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable marketing opérationnel
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2002
    Messages : 28 664
    Points : 61 564
    Points
    61 564
    Par défaut
    Personnellement je vois quelques petites choses, en majorité évidentes :

    1) utiliser toujours les dernières versions du système et des scripts, et etre à l'écoute des messages d'alertes pour appliquer imédiatement les mise à jours ou patchs pour ces scripts ou ce système.

    2) selectionner des scripts d'équipes sérieuses, et avec des équipes encore vivantes, qui peuvent mettre à jour rapidement leur soft en cas de découverte de failles

    3) si la licence le permet, camoufler le nom et la version du script, pour éviter de faciliter le travail des hackers.

    4) changer des choses dans le scripts, comme les noms de fichiers ou de répertoires, pour le rendre plus impérméable aux attaques de virus ou de hack en kit prets à l'emploi.

    5) toujours installer tous les modules de sécurité en sus pour un script donné

    6) sécuriser le serveur autant que possible, en mettant des protections partout ou c'est possible, par exemple pour Apache c'est des htaccess un peu partout. A cet égard il faut choisir un hébergement qui vous le permet, comme par exemple dédié, ou semis dédié, ou mutualisé pro à valeur ajoutée.

    7) etre abonnés aux bulletins de sécurités concernant les systèmes, logiciels, ou scripts que vous utilisez pour réagir promprement en cas de nouvelles failles.

    8 ) avoir toujours des sauvegardes à jours, et vérifier que ces sauvegegardes sont valables, en effet on ne peut jamais etre sur à 100%.

    9) ne pas utiliser de pc ou de réseaux à usages collectifs (travail, cyber café, voir famille) ou vos identifiant peuvent etre aiséments retrouvés ou captés.


    Autres choses ?
    Ne pas me contacter pour le forum et je ne répondrai à aucune question technique. Pour contacter les différents services du club (publications, partenariats, publicité, ...) : Contacts

    15 000 offres d'emploi développeurs et informatique
    Cours et tutoriels développeurs et informatique
    Les FAQ's & Les Livres
    Codes sources
    Téléchargements

  4. #4
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    et je rajouterai, si c'est un site dynamique:
    - Faire attention aux injections SQL
    - Faire attention aux formulaires (surtout a ce que l'on recupere)

    la liste peut etre longue.....
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  5. #5
    Invité4
    Invité(e)
    Par défaut
    Ce que je fais, c'est garder un log des 100 dernières actions de chaque uilisateur, c'est à dire le nom d'utilisateur si connecté, le timestamp, l'ip, le phpsessid, la page visitée, les POST et GET.
    Comme ça, tu peux voir si c'est un membre qui a semé le trouble et éventuellement voir comment il a fait et détecter les floods.

  6. #6
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Points : 3 522
    Points
    3 522
    Par défaut
    J'ajouterais, il faut connaitre les vulnérabilités des sytemes connus :

    http://www.securityfocus.com/vulnerabilities

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    Bonsoir,

    Tout d'abord merci pour vos réponses.

    Autrement,
    Eldacar :
    Comment tu fais pour garder ces informations ? Effectivement ca peut etre intéressant pour retrouver un abrutis... lol


    C'est quoi exactement cette fameuse injection SQL, j'en ai souvent entendu parlé mais sans savoir vraiment a quoi ca consistait... ??
    Tout comme avec les includes, c'est quoi le véritable probleme ?

    Et sinon pour les formulaires, tu veux dire d'être plus restrictif sur ce que retourne le post et de vérifier plus précisément, par exemple si on doit avoir des chiffres dans une certaine variable, bien vérifier que ce sont des chiffres ou sinon bloquer le tout c'est ca ?

    Euh concernant le serveur, quand des individus ont réussi a tout effacer du serveur ftp ou dans la base mysql, c'est qu'ils ont réussis a se procurer les identifiants que normalement seul le propriétaire du site et l'hébergeur connaisse, mais comment les ont-ils récupéré puisqu'on ne les utilise pas sur le site en lui meme si ?
    Enfin je ne sais pas si vous voyez ce que je veux dire...
    Ca m'intrigue tout ca... lol

    Aller bonne soirée
    ++

  8. #8
    Invité4
    Invité(e)
    Par défaut
    Eldacar :
    Comment tu fais pour garder ces informations ? Effectivement ca peut etre intéressant pour retrouver un abrutis... lol
    Je mets dans des fichiers texte de je nomme genre historique.log
    Dès que le fichier atteint ~20Mo je le vide.
    Je mets une entrée par ligne et sépare les infos par des virgules.

    Arrow
    C'est quoi exactement cette fameuse injection SQL, j'en ai souvent entendu parlé mais sans savoir vraiment a quoi ca consistait... ?? Rolling Eyes
    Je crpis à introduire une requête dans un GET qui sera interpretée ensuite, bon il faudrait que le script soit très mal construit (mais je sais pas si c'est exactement comme cela que ça se passe).

    http://www.phpsecure.info/v2/article/InjSql.php

  9. #9
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Points : 3 522
    Points
    3 522
    Par défaut
    Citation Envoyé par netwebzone
    C'est quoi exactement cette fameuse injection SQL, j'en ai souvent entendu parlé mais sans savoir vraiment a quoi ca consistait... ??
    La encore je ne vais t'expliquer toutes les failles qui peuvent être utiliser pour faire du sql injection ni comment réellement le faire, pour une raison simple c'est que je n'ai pas envi que mes explications soient utilisé à mauvais escient.
    Mais grosso modo c'est pouvoir (via un champs de fomulaire par exemple) lancer une requête SQL qui permettra à l'attaquant de pouvoir se logguer à un endroit ou il n'avait pas le droit, de pouvoir récupérer des infos ... etc.
    Mais il ya tant d'autre attaque connu, comme le cross site scripting(XSS), DoS, DDoS, DNS Spoofing ... etc.

    Pour résumer la sécurité d'application Web est un vrai métier, et le seul conseil que je peux te donner c'est de se tenir au courant des dernière attaque connu (cf: mon post au dessus)

    Citation Envoyé par netwebzone
    Euh concernant le serveur, quand des individus ont réussi a tout effacer du serveur ftp ou dans la base mysql, c'est qu'ils ont réussis a se procurer les identifiants que normalement seul le propriétaire du site et l'hébergeur connaisse, mais comment les ont-ils récupéré puisqu'on ne les utilise pas sur le site en lui meme si ?
    Enfin je ne sais pas si vous voyez ce que je veux dire...
    Ca m'intrigue tout ca... lol
    Le sujet n'est pas de te donner comment t'introduire sur un serveur FTP, hein ?

  10. #10
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Points : 3 522
    Points
    3 522
    Par défaut
    Je crpis à introduire une requête dans un GET qui sera interpretée ensuite, bon il faudrait que le script soit très mal construit (mais je sais pas si c'est exactement comme cela que ça se passe).
    Pas uniquement en GET, faire du SQL injection en POST est tout aussi faisable.
    Mais effectivement il faut que le script soit de très mauvaise qualité.

  11. #11
    Invité4
    Invité(e)
    Par défaut
    Le piège est d'intégrer directement un élément d'un formulaire à une requête.
    Par exemple un formulaire qui demande l'âge,
    le piège serait de faire $sql = ('SELECT * from table WHERE age = "'.$_POST["age"].'";');
    Il faut donc vérifier avant si c'est bien un integer, addslashes, et co

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par BrYs
    Le sujet n'est pas de te donner comment t'introduire sur un serveur FTP, hein ?
    lol ne t'inquiete pas c'est pas ce que je voulais savoir en posant ce post si c'est ca que tu sous-entends...
    Ca ne m'intéresse pas de hacker un ftp de quelqu'un, personellement je serais trop énervé si on me le fesait a moi alors je ne vais pas faire ce que j'aimerais pas qu'on me fasse aux autres !!

    J'ai choisis des mots de passes différents pour mon serveur ftp, ma base de données, mon compte mail, enfin histoire que au cas ou si on récupere un des identifiants, ca ne lui ouvre pas toutes les portes, j'ai bien fait ou pas ? ou ca sert a rien ? lol

    Allé bone soirée
    Merci
    ++

  13. #13
    Rédacteur en Chef
    Avatar de Marc Lussac
    Homme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Mars 2002
    Messages
    28 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable marketing opérationnel
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2002
    Messages : 28 664
    Points : 61 564
    Points
    61 564
    Par défaut
    Oui en effet.
    Ne pas me contacter pour le forum et je ne répondrai à aucune question technique. Pour contacter les différents services du club (publications, partenariats, publicité, ...) : Contacts

    15 000 offres d'emploi développeurs et informatique
    Cours et tutoriels développeurs et informatique
    Les FAQ's & Les Livres
    Codes sources
    Téléchargements

  14. #14
    Membre habitué Avatar de Orionmel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 174
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par Eldacar
    Le piège est d'intégrer directement un élément d'un formulaire à une requête.
    Par exemple un formulaire qui demande l'âge,
    le piège serait de faire $sql = ('SELECT * from table WHERE age = "'.$_POST["age"].'";');
    Il faut donc vérifier avant si c'est bien un integer, addslashes, et co
    Ou tout simplement renseigner dans un input :
    ' OR '1'='1
    Ca marche très bien ca aussi. Voilà ce que c'est l'sql injection

  15. #15
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    euh que veux-tu dire par la ?

  16. #16
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Points : 3 522
    Points
    3 522
    Par défaut
    Citation Envoyé par netwebzone
    euh que veux-tu dire par la ?
    c'est un des exemples très simple de sql injection.

    grace à :
    ' OR '1'='1
    tu fini une requete et la valide tout le temps, donc pour un systeme de login mal géré, tu peux rentrer dans la partie sécurisé à tous les coups.

    Voila l'idée.

    J'aimerais que ce post ne dérape pas trop sur les explications et sur le comment on peut attaquer svp. Je compte sur vous.

  17. #17
    Membre habitué Avatar de Orionmel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 174
    Points : 185
    Points
    185
    Par défaut
    Simple :

    Imagine ta requête de vérification de mot de passe comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(id) FROM table WHERE login='login' AND password='password'.
    Tu met entre les cotes les variables post que tu récupéres et si le résultat est supérieur à 0 c'est que l'utilisateur est valide.

    Imaginons maintenant que l'utilisateur mette dans l'input ceci :
    , ta requête est transformée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(id) FROM table WHERE login='login' AND password='password' OR '1' = '1'
    La requête renvoie donc bon.

    Bon je suis pas sur du tout que mon exemple marche (je pense qu'il ne marche pas d'ailleurs) mais ca te donne une idée.

    Mon but n'est pas de t'apprendre à haker un site mais plutôt de te montrer qu'en deux secondes on peut faire sauter un site mal protégé. Et ce genre d'attaque est fréquente donc je ne risque rien à divulguer son secret au contraire ca ouvrira les yeux à pas mal de développeur débutant je pense

  18. #18
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    le ' or '1' = '1 ne marche que si les magic_quotes ne sont pas activés.
    Les magic_quotes rajoute des \ devant chaque ' ou " passés dans une variable par GET ou POST. Mais il existe d'autres attaques où le magic_quote ne sert à rien.

    Le mieux que je puisse dire c'est de toujours vérifier la validité des données en n'autorisant qu'un certain nombre de caractères, car en se contantant d'interdire certains caractères et en autorisant tous les autres on risque de laisser passer des caractères potentiellements dangeureux.
    Dans une requête SQL, toujours protéger la valeur d'un champ avec des '. Quand ce n'est pas possible (quand c'est dans une clause LIMIT par exemple), vérifier l'interval.
    Éviter au maximum d'avoir une variable dans un include.
    Ne rien stoquer d'important dans les cookies, car leur valeur peut être modifié, et peut-être récupéré par quelqu'un d'autree en cas de faille XSS.

    Pour l'utilisation de scripts déjà faits, Marc Lussac à déjà résumé parfaitement ce qu'il faut savoir.


    Et puis dernière chose, si vous avez peur qu'un mot de passe soit intercepté sur le web, toute tentative de chiffrement perso est vaine ; à ma connaissance seul https est à peu près sûr.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  19. #19
    Invité4
    Invité(e)
    Par défaut
    Citation Envoyé par Orionmel
    Simple :

    Imagine ta requête de vérification de mot de passe comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(id) FROM table WHERE login='login' AND password='password'.
    Tu met entre les cotes les variables post que tu récupéres et si le résultat est supérieur à 0 c'est que l'utilisateur est valide.

    Imaginons maintenant que l'utilisateur mette dans l'input ceci :
    , ta requête est transformée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(id) FROM table WHERE login='login' AND password='password' OR '1' = '1'
    La requête renvoie donc bon.

    Bon je suis pas sur du tout que mon exemple marche (je pense qu'il ne marche pas d'ailleurs) mais ca te donne une idée.

    Mon but n'est pas de t'apprendre à haker un site mais plutôt de te montrer qu'en deux secondes on peut faire sauter un site mal protégé. Et ce genre d'attaque est fréquente donc je ne risque rien à divulguer son secret au contraire ca ouvrira les yeux à pas mal de développeur débutant je pense
    Tu viens de me faire très peur.
    Il faut absolument que je revoie mon système de login.
    Je vais essayer de m'injecter pour voir.

    Et maintenant, et si nous parlions des méthodes de protection ?
    En php par exemple, addslashes() suffirait à se protéger ?

  20. #20
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Un addslashes suffit si la valeur de tes champs est entouré par des '.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_query('SELECT * FROM table WHERE id = '.$id); // 1
    mysql_query('SELECT * FROM table WHERE id = "'.$id.'"'); // 2
    Dans la première requête, même si tu fais un addslashes sur $id, ta requête n'est pas protéger car il est possible de mettre n'importe quel bout de code sql dans $id.
    Par contre dans la deuxième requête, un addshashes suffit car pour sortir des guillemets et que le code sql soit interprêté il faut mettre un " dans $id, or avec un addshashes il sera transformé en \" qui n'a donc plus d'effet.

    Mais dans l'exemple que je cite, il vaut mieux vérifier que $id ne contient que des chiffres.


    De toutes façon selon le langage, il existe souvent des fonctions prédéfinis qui permettent d'échapper tous les caractères qui pourraient avoir une signification pour le sgbd.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

Discussions similaires

  1. Quelles sont les meilleures pratiques pour une démonstration en ligne?
    Par bbalet dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 25/02/2015, 14h07
  2. Réponses: 0
    Dernier message: 11/12/2012, 15h08
  3. Réponses: 5
    Dernier message: 25/05/2009, 14h59
  4. Réponses: 33
    Dernier message: 18/04/2009, 12h36
  5. Réponses: 7
    Dernier message: 23/03/2009, 22h38

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