Сегодня я напишу простой класс для «очистки» данных. Дело в том, что пользововать может ввеси некоректные данные как ненамеренно, так и злонамеренно. Например когда я возьмусь за написание класса Route. Этот класс будет брать данные из адресной строки браузера и по ней определять какой конкретно модуль должен запуститься в данный момент. Пользователь может ввести туда какой-нибудь вредоносный код и что-нибудь мне сломать. Этого я постораюсь избежать. Так же будут в формы для ввода информации. Регистрация пользователя, комметарии и т.д.
Где-то читал, что вообще любые данные приходящие от пользователя обязательно должны проверяться.
Полагаю каждый раз писать одинаковый код для проверки данных приходящих от пользователя не очень интересно, поэтому я и решил написать класс DataCleaner.
При написании своего класса я буду использовать стандартные функции PHP
trim — удаляет пробелы в начале и в конце строки. Это на тот случай если при вводе логина или пароля пользователь ввёл лишний пробел. Например при копировании из письма. Такое случается довольно часто.
strip_tags — удаляет все HTML и PHP теги. Злоумышленнику будет сложней ввести вредоносный код.
htmlspecialchars — преобразовывает специальные символы в HTML сущности.
Код самого класса получился совсем небольшой:
<?php
class DataCleaner
{
public static function dc($data)
{
$data = trim($data);
$data = strip_tags($data);
$data = htmlspecialchars($data);
return $data;
}
}
Таким образом вместо вызова трёх стандартных функций PHP каждый раз когда мне это необходимо буду писать только одну строку
$name = \DataCleaner::dc($_POST['name']);
Уже хотел было как обычно написать продолжение следует, но внезапно мозг поразила мысль о том, что я далеко не всё учёл.
Пусть администратор разрешил регистрироваться пользователям от 14 до 99 лет. Запрашиваем у пользователя сколько ему лет. Пользователь вводит число, допустим 1. Дальше мне необходимо проверить число на валидность. Во первых даже не смотря на то, что дети сейчас очень рано начинают пользоваться компьютерами, подобный возраст заставляет усомниться в правильности заполнения поля возраст пользователем. Здесь вероятно закралась какая-то ошибка. Может пользователь не нажал на клавиатуре ещё какую-то цифру? Необходимо как-то сравнить число которое ввёл пользователь с диапазоном разрешённых чисел.Пришла на ум простая ситуация.
И вот тут первая проблема.
$age = \DataCleaner::dc(1);
var_dump($age);
вернёт string '1' (length=1)
То есть результат будет строка а не число. Помню что PHP относится довольно лояльно к подобному и вполне может разрешать математические операции типа
$summ = 2 + '2';
var_dump($summ);
вернёт int 4
Но я чуствую некую неуверенность в том, что это верно запишется в базу данных и предполагаю наличие проблемм в будующем.
Этого мне не хочется и ближайший вечер или 2 буду работать над решением этом проблемы.
Продолжение следует…