Ekilio a écrit :Je suis en train de rédiger un tutorial sur le casting et les types. Après, ta remarque est tout à fait juste ; mais elle présente une faille, c'est que indiquer qu'un point est problématique c'est donner un indice à un éventuel pirate.
C'est un cas précis où il faut comparer la sécurité et la performance ; mais si un pirate voit qu'il y a une erreur chaque fois qu'il tente de transformer un paramètre pour que ce ne soit plus un entier, il n'aura pas la même réaction que lorsqu'il ne note pas d'erreur (chaque erreur étant un indice lorsqu'on cherche à pirater un site web).
On pourra me répondre (avec raison) que c'est pousser la paranoïa un peu loin ; je l'admet et je l'assume totalement. C'est juste que j'ai l'habitude de raisonner d'abord au terme de minimorceau de sécurité avant de raisonner en terme de performance.
Lancer une erreur ne veut pas dire l'afficher. Les classes d'exception permettent facilement d'afficher une page d'erreur tout en mailant la vraie erreur pour l'administrateur.
Parce que typer une chaine donne souvent 0, il est inutile de lancer la requête sur l'id 0. Voir même avec une chaine en typant un entier, je peux modifier un identifiant aléatoire suivant la chaine, par exemple "3 chiens" donne "3"...
En gros :
Code PHP :
<?php
$id = "3 petits chiens";
'SELECT * FROM table WHERE id = ' . (int) $id
Code PHP :
<?php
$id = "3 petits chiens";
'SELECT * FROM table WHERE id = ' . $id