Очистка данных из форм в PHP

Для предотвращения 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>
HTML

Обработчик формы:

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']);
}
PHP

Далее описание функций с примерами:

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
PHP

Для очистки одномерных массивов есть функции:

Clean::boolArray($value, $default); – вернет очищенный массив.
Clean::boolList($value, $default, $separator); – вернет строку значений через разделитель (по умолчанию ,).

Clean::int($value, $default);

Для очистки численных значений.

echo Clean::int(' 123 '); // 123
echo Clean::int('123.5'); // 123
PHP

Функции для массива:

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
PHP

Функции для массива:

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
PHP

Для массива:

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
PHP

Для массива:

Clean::strArray($value, $default);
Clean::strList($value, $default, $separator);

Clean::text($value, $default);

Работает также как Clean::str(), но с сохранением переносов строк. Используется для <textarea>.

echo Clean::text("Строка 1\r\nСтрока 2");
PHP
Строка 1
Строка 2

Для массива:

Clean::textArray($value, $default);
Clean::textList($value, $default, $separator);

Clean::html($value, $default);

Не рекомендуется использовать на фронте сайта т.к. только экранируются кавычки.

echo Clean::html('<h1 class="title">Заголовок</h1>');
PHP
<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
PHP

Для массива:

Clean::sefArray($value, $default);
Clean::sefList($value, $default, $separator);

Clean::filename($value, $default);

Очищает название файла от запрещенных символов.

echo Clean::filename('файл<1>.jpg');  // файл .jpg
PHP

Для массива:

Clean::filenameArray($value, $default);
Clean::filenameList($value, $default, $separator);

Clean::time($value, $default);

Преобразует дату в Unix Timestamp.

echo Clean::time('14.08.2019');  // 1565730000
PHP

Для массива:

Clean::timeArray($value, $default);
Clean::timeList($value, $default, $separator);

16.08.2019, обновлено 26.09.2019
6393

Комментарии

, чтобы добавить комментарий.

Другие публикации

Мануал по созданию и форматированию excel файлов в PHPExcel
К сожалению разработчики прекратили поддержку и разработку проекта, но PHPExcel все равно остается популярной...
68390
+22
Работа с числами в PHP
Сборник математических функций PHP и примеры их использования.
9963
+3
Работа с JSON в PHP
JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и...
58847
+10
Примеры отправки AJAX JQuery
AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать контент и т.д. А функции JQuery значительно упрощают работу.
129338
+19
Генерация счета на оплату PDF PHP
С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf - это конвертер HTML в PDF который...
39832
+25
Шаблонизатор Smarty
Smarty это компилирующий обработчик шаблонов для PHP позволяющий отделить логику и HTML-верстку веб-приложения.
14680
+5