Dans le cas présent (la faille mongodb décrite), j’ai surtout l’impression que ce qui pêche est l’absence de typage fort.
En gros, il faut distinguer plusieurs choses :
- l’entrée est du type attendu : ça ça peut se vérifier dès le départ (ce n’est pas spécifique aux langages faiblement typés, c’est le cas dès qu’il y a usage de variant dans une api)
- l’entrée est au format attendu : là aussi ça peut se vérifier dès le départ (par exemple, une entrée de type « email » correspond bien à une adresse email)
- l’entrée ne va pas faire un truc hostile : ça c’est le problème que tu décris, et je suis parfaitement d’accord avec ta conclusion : la notion de « sanitize your inputs » ne devrait effectivement même pas exister. La solution est d’utiliser une API sûre.
En revanche, dans le cas présent, la blague, c’est qu’on peut créer une requête parfaitement valide, au moyen d’une api raisonnablement sûre, qui ne fait pas du tout ce qu’on voulait faire et va probablement résulter en une faille applicative.
Et là, la solution est bien de vérifier (≠ sanitize) que les entrées sont correctes d’un point de vue type.
Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0
[^] # Re: Typage strict
Posté par whity . En réponse à la dépêche Sortie de PHP 7.0 - un nouveau départ. Évalué à 3. Dernière modification le 16 décembre 2015 à 09:04.
Dans le cas présent (la faille mongodb décrite), j’ai surtout l’impression que ce qui pêche est l’absence de typage fort.
En gros, il faut distinguer plusieurs choses :
- l’entrée est du type attendu : ça ça peut se vérifier dès le départ (ce n’est pas spécifique aux langages faiblement typés, c’est le cas dès qu’il y a usage de variant dans une api)
- l’entrée est au format attendu : là aussi ça peut se vérifier dès le départ (par exemple, une entrée de type « email » correspond bien à une adresse email)
- l’entrée ne va pas faire un truc hostile : ça c’est le problème que tu décris, et je suis parfaitement d’accord avec ta conclusion : la notion de « sanitize your inputs » ne devrait effectivement même pas exister. La solution est d’utiliser une API sûre.
En revanche, dans le cas présent, la blague, c’est qu’on peut créer une requête parfaitement valide, au moyen d’une api raisonnablement sûre, qui ne fait pas du tout ce qu’on voulait faire et va probablement résulter en une faille applicative.
Et là, la solution est bien de vérifier (≠ sanitize) que les entrées sont correctes d’un point de vue type.
Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0