я задаюсь вопросом, как настроить умный способ, чтобы все мои входные данные были «чистыми», процедура, запускаемая в начале каждого моего сценария.
Я подумал создать класс для этого, а затем добавить двухбуквенный префикс в начале каждого ввода, чтобы определить тип ввода, например:
in-mynumber
tx-name
ph-phone
em-email
Итак, в верхней части моих скриптов я просто запускаю функцию (например):
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-_.]+@[a-zA-Z0-9-_.]+.[a-zA-Z]{2,4}$/', $taintedValue)){
$cGet[$taintedKey] = $taintedValue;
}else{
$cGet[$taintedKey] = false;
}
break;
}
}
}
.. поэтому я создам 2 других массива, $ cGet и $ cPost с чистыми данными соответственно $ _GET и $ _POST, и в моем скрипте я посмотрю на использование этих массивов, полностью забуду $ _GET / $ _СООБЩЕНИЕ
Я даже думаю о добавлении второго префикса, чтобы определить максимальную длину ввода ... например:
-25 имя-ТХ
... но я не совсем уверен в этом ... и если я пойду по этому пути, возможно, ООП подход будет лучше.
Что вы думаете об этом?
Кажется, хороший способ использования?
Негативная точка, которую я действительно могу видеть (я до сих пор не использовал этот способ, просто чудо этого утра)
1. Префикс и другие процедуры должны быть многочисленными, если я хочу, чтобы мое заявление не было слишком ограничительным;
2. Имена отправленных переменных станут немного длиннее (но мы говорим о 3-6 символах, это не должно быть проблемой)
Любое предложение действительно ценится!
EDIT:
Я не трин, чтобы заново изобрести колесо, мой пост был не о системе дезинфекции ввода, а о процедуре, чтобы сделать это. Я использую htmlpurifier, чтобы очистить, возможно, внедрение xss в html-данные, и, конечно, я использую параметризованные запросы. Мне просто интересно, лучше ли брать входные данные или дезинфицировать их все в начале и считать, что они чисты в остальной части сценария.
Метод i thougt не чудодейственный и ничего нового под солнцем, но я думаю, что усечение ввода, если не в формате, который я аспект, может быть полезным ...
Зачем проверять SQL-инъекцию в поле 'name', которое должно содержать только буквы и символ апостроф?
Просто удалите все, что не является буквой или апостофом, добавьте косую черту для последнего и выполните параметризованный запрос.
Затем, если вы отправляете электронное письмо, просто удалите все, что не является электронным письмом.