Le grand principe:
Tout ce qui est hors d'une entité (serveur, classe, méthode,...) est dangereux pour cette entité: tout ce qui entre dans le serveur est potentiellement dangereux, et tout ce qui sort du serveur n'est plus traçable
Les principes de bases:
• Ne jamais accorder le moindre crédit aux données extérieurs: en conséquence, toujours les valider (via filter_input pour PHP)
• De même, éviter d'accorder du crédit aux entrées des fonctions/méthodes: si le paramètre n'est pas typé, Classe::methode($x) doit pouvoir accepter n'importe quoi pour $x (la méthode peur vérifier que le paramètre est du bon type); n'oubliez pas que les attributs publics $this->* et les variables globales ($_*) sont des entrées implicites
• Toute commande sérialisée est dangereuse et doit être maniée avec précaution (dans SELECT * FROM users WHERE user_id=$id, la machine ne sait pas que $id est un 'paramètre')
• Tout ce qui sort du serveur n'est plus fiable; ergo toute page peut être appelée avec n'importe quels paramètres, par n'importe qui, n'importe quand
• Hasher et saler tout ce qui peut l'être, c'est à dire tout ce dont seule la signature compte (mot de passe principalement)
Ressource utile:
• L'OWASP et son Top 10 des failles de sécurité, à savoir:
Le TOP 10
→ L'injection = Accepter un paramètre qui sera ensuite interprété comme une commande
→ L'authentification = Une mauvaise façon d'identifier les utilisateurs
→ XSS = L'injection dans HTML (ou toute autre sortie du serveur)
→ Les fuites de références = Faire sortir du serveur une donnée qui lui est interne
→ La configuration = Mal configurer ses outils de sécurité
→ Les fuites d'informations = Donner plus d'informations à l'utilisateur que ce dont il a besoin
→ La vérification des droits = Ne pas oublier de vérifier les droits dans la page appelée par un formulaire/URL
→ CSRF = La requête reçue par le serveur n'a pas forcément été envoyée consciemment par l'utilisateur
→ Les versions obsolètes = Se reposer sur de vielles versions
→ Les redirections = Rediriger l'utilisateur vers une URL que l'on n'a pas vérifiée
Tout ce qui est hors d'une entité (serveur, classe, méthode,...) est dangereux pour cette entité: tout ce qui entre dans le serveur est potentiellement dangereux, et tout ce qui sort du serveur n'est plus traçable
Les principes de bases:
• Ne jamais accorder le moindre crédit aux données extérieurs: en conséquence, toujours les valider (via filter_input pour PHP)
• De même, éviter d'accorder du crédit aux entrées des fonctions/méthodes: si le paramètre n'est pas typé, Classe::methode($x) doit pouvoir accepter n'importe quoi pour $x (la méthode peur vérifier que le paramètre est du bon type); n'oubliez pas que les attributs publics $this->* et les variables globales ($_*) sont des entrées implicites
• Toute commande sérialisée est dangereuse et doit être maniée avec précaution (dans SELECT * FROM users WHERE user_id=$id, la machine ne sait pas que $id est un 'paramètre')
• Tout ce qui sort du serveur n'est plus fiable; ergo toute page peut être appelée avec n'importe quels paramètres, par n'importe qui, n'importe quand
• Hasher et saler tout ce qui peut l'être, c'est à dire tout ce dont seule la signature compte (mot de passe principalement)
Ressource utile:
• L'OWASP et son Top 10 des failles de sécurité, à savoir:
Le TOP 10
→ L'injection = Accepter un paramètre qui sera ensuite interprété comme une commande
→ L'authentification = Une mauvaise façon d'identifier les utilisateurs
→ XSS = L'injection dans HTML (ou toute autre sortie du serveur)
→ Les fuites de références = Faire sortir du serveur une donnée qui lui est interne
→ La configuration = Mal configurer ses outils de sécurité
→ Les fuites d'informations = Donner plus d'informations à l'utilisateur que ce dont il a besoin
→ La vérification des droits = Ne pas oublier de vérifier les droits dans la page appelée par un formulaire/URL
→ CSRF = La requête reçue par le serveur n'a pas forcément été envoyée consciemment par l'utilisateur
→ Les versions obsolètes = Se reposer sur de vielles versions
→ Les redirections = Rediriger l'utilisateur vers une URL que l'on n'a pas vérifiée