Очистка данных из форм в 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
Далее описание функций с примерами:
1

Логический тип (0 или 1)

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); – вернет строку значений через разделитель (по умолчанию ,).

2

Целое положительное число

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);

3

Десятичные дроби

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);

4

Цена

Преобразует цены в число с плавающей точкой, только положительные значения.
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);

5

Строка

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);

6

Текст

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);

7

HTML

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

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

echo Clean::html('<h1 class="title">Заголовок</h1>');
PHP
<h1 class=\"title\">Заголовок</h1>

Для массива:

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

8

ЧПУ

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);

9

Имя файла

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

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

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

Для массива:

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

10

Unix Timestamp

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 63

Поделится

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

Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt
Оригинальный размер капчи составляет 304x78px и чаще всего она не помещается в габариты форм сайта. Исправить это можно...
parse_url($url, $component) – стандартная функция, разбирает URL-адрес на компоненты в виде массива.
Сборник регулярных выражений с примерами на PHP для проверки данных из полей форм.
Представленные способы помогут сделать алфавитный список (указатель) разбитый на колонки, для вывода например станций...