JRequest - фильтрация данных $_GET и $_POST
При проектировании любого веб-приложения (и даже не только веб!) очень важно проверять все входные данные перед их использованием. Элементарная проверка данных позволяет увеличить безопасность вашего сайта в разы! Joomla предоставляет нам набор библиотек для проверки GET/POST запросов. Рассмотрим возможности класса JRequest на реальных примерах.
Пример №1. Допустим мы хотим получить Ф.И.О. человека из поля "fio" формы, и сохранить значение в переменную $name. При этом мы точно не можем сказать каким методом (GET или POST) будет отправлена форма. Делаем следующее:
При этом, если не установлены другие параметры, то с начала и конца строки удаляться пробелы, и текст будет очищен от HTML-форматирования.
Пример №2. Часто бывают случаи когда переменная может и не придти от пользователя, либо её тип не совпадет с ожидаемым. В качестве второго параметра можно указать "Значение по умолчанию":
Теперь, если человек, при заполнении формы не укажет свое имя, ему будет присвоено имя "Неизвестный пользователь".
Пример №3. Очень часто разработчики предпочитают явно указывать откуда они хотят получить переменную. Это слегка увеличивает безопасность компонента, а так же упрощает работу, например при использовании технологии AJAX.
Помните, что запрос POST также легко подделать как и GET, тем не менее мы рекомендуем вам явно указывать подобные моменты, это поможет содержать Ваше приложение в порядке.
Теперь переменная явно будет браться из массива $_GET. Если третьим параметром ничего не указать, то значения будут браться из массива $_REQUEST.
В качестве атрибута можно использовать одно из следующих ключевых слов:
- GET
- POST
- FILES
- COOKIE
- ENV
- SERVER
- REQUEST
Пример №4. Четвертым параметром явно указываем тип переменной. В нашем случае это "string".
Так же поддерживаются следующие типы:
- int - Целочисленые значения
- float - Число с плавающей точкой
- bool - Булево значение
- word - слово
- cmd - команда
- string - строка
Для удобства вы можете использовать методы класса "JRequest" следующего типа:
- getInt
- getFloat
- getBool
- getWord
- getCmd
- getString
- get
Методы выполняют ту же самую роль что и "getVar", аргументы те же, за исключением того что нет маски и типа переменной. Метод "get" использует два параметра - название переменной и маска.
Пример №5. Наконец-то пятым параметром мы можем наложить маску фильтрации. Фильтр устанавливает специальным числом - битом. Маски бывают 3 типов:
- 1 - JREQUEST_NOTRIM - если установлен, то пробелы по краям не обрежутся, по умолчанию пробелы отсекаются.
- 2 - JREQUEST_ALLOWRAW - если установлен, то будет отключена всякая фильтрация, при этом более высокие биты игнорируются.
- 4 - JREQUEST_ALLOWHTML - позволяет html-код. Но если установлен, то все равно будет включен фильтр безопасности по очистке html-кода.
Можно использовать несколько фильтров. Допустим нам нужно оставить пробелы по краям и не вырезать html-код. Для этого мы вписываем пятым параметром 5 (1+4), либо можно через константы - "JREQUEST_NOTRIM+JREQUEST_ALLOWHTML".
На практике это выглядит так:
Пример №6. Получим массив значений, который пришел в POST с помощью класса JRequest. Напомним что массив можно отправить следующим способом:
Получить эти значения можно так:
Объявление класса
Файл в котором описан статический класс JRequest находиться по адресу
Класс для любого расширения объявлен всегда, и не нуждается в явном подключении через jimport();