Envoyé par
kmdkaci
Bonjour,
Je vais essayer de répondre à quelques points que tu as décris.
Un exemple complet ? J’ai relaté les bases d’un captcha, après c’est au développeur de creuser d’avantage pour optimiser les choses. Le tutoriel est plus pédagogique qu’autre choses.
Non, juste ce genre de note ou d'exemple
<img src="/servletCaptcha.png"/>
afin d'éviter ce genre de contre fonctionnalité que j'ai déjà vu régulièrement:
<img src="/servletCaptcha.png?captcha=AE23X"/>
où le bot a juste a regarder l'url pour savoir quel est le captcha
C’est dit dans l’article, à deux reprises, voici une phrase :
Mais cela contribue à freiner efficacement ce genre d'attaque. Réduire les spams via les formulaires est possible, mais dire qu'on peut les anéantir complètement est un mythe.
J'avais justement lu à plusieurs reprise que ca freine de moins en moins efficacement, le bot faisant maintenant de la reconnaissance de caractère approximative réussissant dans plus ou moins 30% des cas, il leur suffit de 4/5 submit pour arriver passer le captcha. Ou alors faut compliquer le captcha, mais alors c'est l'humain qui a tendance à de moins en moins y arriver
Pour ne pas faire les 500 submits, il faut poursuivre l’article. Voir Eviter les attaques par bombing, notamment la phrase :
il suffit d'autoriser uniquement quelques envois de formulaire pour chaque session donnée.
D'accord avec toi, j'allais justement suggérer de faire explicitement le lien. Ton attaque par bombing est plutot présentée comme un moyen de deviner les mots de passe, alors qu'elle devrait être présentée aussi comme un moyen de contourner les captcha, d'ou l'intérêt de les combiner.
La validation par les framworks, notamment Struts que j’utilise est
relativement (Je précise) sécurisée comme indiqué dans l’article. Voici un exemple de validation d’un champ Password avec Struts… et explique-moi comment tu peux injecter une expression sql dans un cas pareil avec une validation en utilisant cette expression régulière.
pourquoi présenter une solution approximative qui n'est qu'un emplatre (limiter les mots de passe en qualité!) alors qu'il existe une solution sure pour empecher l'injection SQL et qui relève des bonne pratique en gestion de base de donnée? L'utilisation de prepared statements. De plus c'est déporter dans l'interface graphique un travail qui aurait du déjà être fait du coté buisness. J'ai rien contre proposer d'utiliser la validation, mais il n'est pas normal de ne pas mentionner le B-A-BA des bonnes pratiques dans les SGBD dans ce domaine en priorité. De plus filtrer un mot de passe est facile (même si personnellement tous mes mots de passe utilisent alègrement des caractères absents de ton range imposé), filtrer un champ complexe (comme le champ de soumission de texte dans ce même forum) relève de l'impossible, hors l'injection SQL peut très bien avoir lieu ailleurs que sur le login.
Quand je lis tes suggestions, je me mis en doute, tu parles de JavaScript comme étant une solution peu efficace, et c’est ce que j’ai écris et il s’agit du premier point présenté dans les solutions.
Je ne suis pas d'accord sur le peu efficace. C'est peu efficace si bien implémenté en étant non reproductible (ce que tu ne mentionne pas) car ca reste toujours attaquable en man in the middle ou (comme dans le forum de developpez) ca tombe si le javascript ne s'exécute pas pour certaines raisons. C'est par contre totalement inefficace et de la simple poudre aux yeux si tu te contente de toujours faire correspondre le même hash au même mot de passe. Hors, pour le lecteur, cette distinction n'es pas innée.
quand au https, je pense que tu as repris à des exceptions près ma phrase :
Il reste la solution d'utilisation du protocole HTTPS qui demeure la méthode la plus sécurisée
Je suis d'accord que le HTTPS est plus sécurisé, mais ca manque de précision. Plus particulièrement, le lecteur est intéressé à savoir "en quoi" c'est plus sécurisé
S’il y a beaucoup de code que de texte, c’est parce que je ne suis pas un journaliste, je n’écris pas de news, je suis plutôt technique.
L'ennui c'est qu'on parle de sécurité et, personnellement, je suis assez tatillons là dessus (ce qui explique que j'ai un peu "sauté" sur l'article) Pour que des bonne pratiques de sécurités soient bien suivies et mises en place par ton lecteur il faut bien détailler le pourquoi de ces pratiques, leurs limites et le moyen de les contourner, afin qu'il saisse bien ce qu'il fait et pourquoi.
Tu as le droit de dire que ça manque de rigueur, mais si tu as lu l’article tranquillement- avec rigueur - tu vas te rendre compte que la plus part de ce que tu avances est dans l’article.
J'ai précisé mes points plus haut. Je suis d'accord quand tu dis que beaucoup de choses sont présentes dans l'article. Un bon programmeur qui lit ton article comprendra sans soucis les implications et fera les liens entre les différentes techniques (et haussera un sourcil voir deux sur le javascript). L'ennui, c'est qu'on parle de sécurité, et un mauvais programmeur, risque de comprendre ton article de travers
- j'ai filtré les mot clé SELECT, FROM et " du password et du username -> pas d'injection possible
- je convertit mon password avec md5(password) -> pas possible d'intercepter le mot de passe
- j'ai mis un captcha avec <img src="/servletCaptcha?1AX2P"/> -> relativement protégé contre les bots
Et il aura tout faux!
Hors je préfère, personnellement, avoir dans mon équipe quelqu'un qui sait ne rien y connaitre en sécurité (ce qui m'obligera à l'épauler et le former à ce sujet) que d'avoir quelqu'un qui pense savoir a la lecture de l'article mais qui n'a pas fait les recherche ad-hoc pour bien comprendre et va tout faire de travers (comme juste ici au dessus) ce qui est le plus grave a mon avis.
Désolé si je parait agressif là dessus. Mais j'ai peut qu'à la lecture de ton article, en plus de donner de bonne base à une partie des lecteur, on en donne de mauvaise à d'autre, et que ca mette à terme des système en production en danger.
Sur ce, bonne nuit à tous
Partager