Для предотвращения XSS, SQL-инъекций и других атак, данные полученные из форм нужно чистить. Простое экранирования кавычек не достаточно, нужен комплексный подход по типу данных.
Для таких целей был написан статический класс clean.php
Использование класса
<form method="post" action="">
<label>Имя</label>
<input name="name" type="text">
<label>Телефон</label>
<input name="phone" type="text">
<label>Комментарий</label>
<textarea name="text"></textarea>
<label>Оценка</label>
<input name="rating" type="ragio" value="1"> 1
<input name="rating" type="ragio" value="2"> 2
<input name="rating" type="ragio" value="3"> 3
<input name="rating" type="ragio" value="4"> 4
<input name="rating" type="ragio" value="5"> 5
<label>
<input name="consent" type="checkbox">
Я даю согласие на обработку моих персональных данных
</label>
<input type="submit" name="send" value="Отправить">
</form>
Обработчик формы:
require_once '/classes/clean.php';
if (isset($_POST['submit'])) {
$name = Clean::str($_POST['name']);
$phone = Clean::str($_POST['phone']);
$text = Clean::text($_POST['text']);
$rating = Clean::int($_POST['rating']);
$consent = Clean::bool($_POST['consent']);
}
Далее описание функций с примерами:
Clean::bool($value, $default);
Подходит для сhekbox, возвращает 1 или 0. Если значение пусто, то возвращается значение $default
.
echo Clean::bool('on'); // 1
echo Clean::bool('off'); // 0
echo Clean::bool('true'); // 1
echo Clean::bool('false'); // 0
Для очистки одномерных массивов есть функции:
Clean::boolArray($value, $default);
– вернет очищенный массив.
Clean::boolList($value, $default, $separator);
– вернет строку значений через разделитель (по умолчанию ,
).
Clean::int($value, $default);
Для очистки численных значений.
Функции для массива:
Clean::intArray($value, $default);
Clean::intList($value, $default, $separator);
Clean::float($value, $default);
Может быть отрицательным, заменяет ,
на .
.
echo Clean::float(' 123 '); // 123
echo Clean::float('123.5'); // 123.5
echo Clean::float('-18.05'); // -18.05
Функции для массива:
Clean::floatArray($value, $default);
Clean::floatList($value, $default, $separator);
Цена
echo Clean::price('10 000 рублей'); // 10000.00
echo Clean::price('928,50 ₽'); // 928.50
echo Clean::price('165.36'); // 165.36
echo Clean::price('$115.99'); // 115.99
echo Clean::price('100,000.00'); // 100000.00
Для массива:
Clean::priceArray($value, $default);
Clean::priceList($value, $default, $separator);
Строка
Clean::str($value, $default);
Строка текста без переносов строк, подходит для <input type="text">
и др.
- Удаляются теги и комментарии;
- Двойные пробелы заменяются на один;
- Спецсимволы заменяются на мнемоники;
echo Clean::str('<h1>Заголовок</h1>'); // Заголовок
echo Clean::str('">alert 1'); // ">alert 1
echo Clean::str("Строка 1\r\nСтрока 2"); // Строка 1 Строка 2
Для массива:
Clean::strArray($value, $default);
Clean::strList($value, $default, $separator);
Текст
Clean::text($value, $default);
Работает также как Clean::str()
, но с сохранением переносов строк. Используется для <textarea>
.
Строка 1
Строка 2
Для массива:
Clean::textArray($value, $default);
Clean::textList($value, $default, $separator);
HTML
Clean::html($value, $default);
Не рекомендуется использовать на фронте сайта т.к. только экранируются кавычки.
<h1 class=\"title\">Заголовок</h1>
Для массива:
Clean::htmlArray($value, $default);
ЧПУ
Clean::sef($value, $default);
Делает транслит для URL.
echo Clean::sef('Опознание поломки'); // opoznanie-polomkiremont-hp
echo Clean::sef('Ремонт HP'); // remont-hp
Для массива:
Clean::sefArray($value, $default);
Clean::sefList($value, $default, $separator);
Clean::filename($value, $default);
Очищает название файла от запрещенных символов.
Для массива:
Clean::filenameArray($value, $default);
Clean::filenameList($value, $default, $separator);
Clean::time($value, $default);
Преобразует дату в Unix Timestamp.
Для массива:
Clean::timeArray($value, $default);
Clean::timeList($value, $default, $separator);