Je me demande comment mettre en place une manière intelligente d'avoir toutes mes entrées 'propres', une procédure à exécuter au début de chaque script. Je pensais que pour créer une classe pour le faire, puis, ajouter un préfixe 2 lettres au début de chaque entrée pour identifier le type d'entrée, par exemple:Est-ce que cela peut être un moyen efficace et fiable pour purifier l'entrée de l'utilisateur?
in-mynumber
tx-name
ph-phone
em-email
Ainsi, au sommet de mes scripts je lance simplement une fonction (par exemple):
function cleanInputs(){
foreach($_GET AS $taintedKey => $taintedValue){
$prefix = substr($taintedKey, 0, 2);
switch($prefix){
case 'in':
//I assume this input is an integer
$cGet[$taintedKey] = intval($taintedValue);
break;
case 'tx':
//i assume this input is a normal text
//can contains onely letters, numbers and few symbols
if(preg_match($regExp, $taintedValue)){
$cGet[$taintedKey] = $taintedValue;
}else{
$cGet[$taintedKey] = false;
}
break;
case 'em':
//i assume this input is a valid email
if(preg_match('/^[a-zA-Z0-9-_.][email protected][a-zA-Z0-9-_.]+.[a-zA-Z]{2,4}$/', $taintedValue)){
$cGet[$taintedKey] = $taintedValue;
}else{
$cGet[$taintedKey] = false;
}
break;
}
}
}
..so je vais créer d'autres tableaux 2, cget $ et cPost $ avec les données propres respectivement de _GET et $ _POST, et dans mon script i Je vais même penser à ajouter un deuxième préfixe pour déterminer la longueur maximale de l'entrée ... par exemple: tx-25-name ..mais je ne suis pas très sûr de ça .. et si je prends de cette façon, peut-être une approche POO sera meilleure.
Que pensez-vous de cela? Semble-t-il un bon moyen d'utiliser? Les points négatifs que je peux réellement voir (je n'ai pas encore utilisé de cette façon, est juste une merveille de ce matin) 1. Le préfixe, et donc les procédures, doivent être nombreuses si je veux que mon application ne soit pas très restrictif; 2. Les noms de mes variables envoyées deviendront un peu plus longs (mais nous parlons de 3-6 caractères, cela ne devrait pas être un problème)
Toute suggestion est vraiment appréciée!
EDIT:
Je ne suis pas triyn de réinventer la roue, mon post was't sur le sistem à l'entrée désinfectante, mais est sur la procédure pour le faire. J'utilise htmlpurifier pour gérer l'injection de xss dans les données html, et bien sûr j'utilise les requêtes paramétrées. Je me demande simplement s'il est préférable de prendre une entrée par entrée, ou de les désinfecter tous au début et considérer qu'ils nettoient dans le reste du script. La méthode i thougt n'est pas miraculeuse et rien de nouveau sous le soleil, mais je pense que tronquer l'entrée si n'est pas dans le format que l'aspect, peut être utile ...
Pourquoi vérifier l'injection sql dans le ' name 'field, qui doit contenir juste des lettres et le caractère apostrophe? Supprimez simplement tout ce qui n'est pas lettre ou apostophe, ajoutez des barres obliques pour le dernier et lancez une requête paramétrée. Ensuite, si vous présentez un e-mail, supprimez tout ce qui n'est pas un e-mail.
Je ne vois rien d'intrinsèquement mauvais dans votre approche, et je pense que c'est une bonne idée. – stefs
aussi, je pense que vous êtes bourré. mais je comprends, je suis aussi un programmeur. – stefs