RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

JRequest — фильтрация данных $_GET и $_POST

При проектировании любого веб-приложения (и даже не только веб!) очень важно проверять все входные данные перед их использованием. Элементарная проверка данных позволяет увеличить безопасность вашего сайта в разы! Joomla предоставляет нам набор библиотек для проверки GET/POST запросов. Рассмотрим возможности класса JRequest на реальных примерах.

Пример № 1. Допустим мы хотим получить Ф.И.О. человека из поля «fio» формы, и сохранить значение в переменную $name. При этом мы точно не можем сказать каким методом (GET или POST) будет отправлена форма. Делаем следующее:

 $name = JRequest::getVar('fio');

При этом, если не установлены другие параметры, то с начала и конца строки удаляться пробелы, и текст будет очищен от HTML-форматирования.

Пример № 2. Часто бывают случаи когда переменная может и не придти от пользователя, либо её тип не совпадет с ожидаемым. В качестве второго параметра можно указать «Значение по умолчанию»:

$name = JRequest::getVar('fio', 'Неизвестный пользователь');

Теперь, если человек, при заполнении формы не укажет свое имя, ему будет присвоено имя «Неизвестный пользователь».

Пример № 3. Очень часто разработчики предпочитают явно указывать откуда они хотят получить переменную. Это слегка увеличивает безопасность компонента, а так же упрощает работу, например при использовании технологии AJAX.

Помните, что запрос POST также легко подделать как и GET, тем не менее мы рекомендуем вам явно указывать подобные моменты, это поможет содержать Ваше приложение в порядке.

$name = JRequest::getVar('fio', 'Неизвестный пользователь', 'get');

Теперь переменная явно будет браться из массива $_GET. Если третьим параметром ничего не указать, то значения будут браться из массива $_REQUEST.

В качестве атрибута можно использовать одно из следующих ключевых слов:

  • GET
  • POST
  • FILES
  • COOKIE
  • ENV
  • SERVER
  • REQUEST

Пример № 4. Четвертым параметром явно указываем тип переменной. В нашем случае это «string».

$name = JRequest::getVar('fio', 'Неизвестный пользователь', 'get', '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».

На практике это выглядит так:

// через бит

$name = JRequest::getVar('fio', 'Неизвестный пользователь', 'get', 'string', 5);

// либо через константы

$name = JRequest::getVar('fio', 'Неизвестный пользователь', 'get', 'string', JREQUEST_NOTRIM + JREQUEST_ALLOWHTML);


Пример № 6. Получим массив значений, который пришел в POST с помощью класса JRequest. Напомним что массив можно отправить следующим способом:

<form action="index.php" method="post">

    <input type="checkbox" name="elements[]" />

    <input type="checkbox" name="elements[]" />

    <input type="checkbox" name="elements[]" />

</form>

Получить эти значения можно так:

$elements = JRequest::getVar('elements', array(), 'post');

if(count($elements)) {

    foreach($elements as $key=>$val){

        /* работа с массивом */

    }

}

Объявление класса

Файл в котором описан статический класс JRequest находится по адресу

[корень сайта]/libraries/joomla/environment/request.php

Класс для любого расширения объявлен всегда, и не нуждается в явном подключении через jimport();

Смотрите также:
Комментарии (13) Добавить комментарий
  • Михаил
    Михаил
    14 Февраля 2012, 18:58
     ↑  +6  ↓     ответ

    Отличная статья, полезно порой разjбраться как работают разные CMS

  • Vitaut
    Vitaut
    30 Июля 2012, 11:24
     ↑  0  ↓     ответ

    Спасибо большое за статью. Благодаря Вашему сайту я начал разбираться в Joomla API.

  • Дмитрий
    Дмитрий
    15 Апреля 2013, 05:47
     ↑  0  ↓     ответ

    Спасибо за статью! Я начинающий, поэтому подскажите пожалуйста, как правильно настроить передачу файла через этот класс? Речь идет от функции addAttachment..

  • vit
    vit
    16 Апреля 2013, 16:28
     ↑  0  ↓     ответ

    Не думал даже, что getVar столько параметров имеет. Круто!

  • Vera
    Vera
    31 Мая 2013, 18:12
     ↑  0  ↓     ответ

    C joomla 1.5 ничего не изменилось? dimation.ru/articles/joomla/103-jrequest-data-filtering--get-and--post

  • Как из видео ютуб сделать аудио mp3
    Как из видео ютуб сделать аудио mp3
    07 Мая 2017, 23:05
     ↑  0  ↓     ответ

    Пошаговая инстркуция с картинками, как из видео сделать

    аудио mp3 трек на домашнем компьютере и обзор бесплатных онлайн программ конвертирующих видеофайлы в музыкальные

    треки.

    Дальше

  • halmarlowehcyx.pen.io
    halmarlowehcyx.pen.io
    01 Июня 2017, 16:19
     ↑  +1  ↓     ответ

    Im speechless. This is a excellent weblog and very engaging too.

    Nice paintings! Thats not in point of fact much coming from an novice publisher like me, but it surelys all I may ssay after dving into your posts.

    Nice grammar and vocabulary. No longer like other websites.

    You actually understand what you?re talking aout too.

    Such a lot that you made me wish to discover more. Your weblog has change into

    a stepping stone for me, my friend.

  • ????????? ??? ???????
    ????????? ??? ???????
    22 Июля 2017, 01:52
     ↑  0  ↓     ответ

    I take pleasure in, lead to I found exactly whaat

    I used to be taking a look for. You've ended my 4 day long hunt!

    God Bless you man. Have a great day. Bye

  • facebook proxies
    facebook proxies
    10 Февраля 2018, 07:53
     ↑  0  ↓     ответ

    Thanks very nice blog!

  • qq domino versi android
    qq domino versi android
    13 Февраля 2018, 16:57
     ↑  0  ↓     ответ

    An outstanding share! I've just forwarded this onto a co-worker who

    has been doing a little homework on this. And he actually bought me breakfast simply because I found it for him...

    lol. So let me reword this.... Thank YOU for the meal!!

    But yeah, thanks for spending the time to talk about this subject here

    on your internet site.

  • hasil togel sidney
    hasil togel sidney
    15 Февраля 2018, 11:42
     ↑  0  ↓     ответ

    I think this is among the most vital info for me. And i am glad reading

    your article. But should remark on some general things, The website style is great, the articles is

    really nice : D. Good job, cheers

  • domino double 9
    domino double 9
    15 Февраля 2018, 15:10
     ↑  0  ↓     ответ

    If you wish for to obtain much from this piece of writing then you have to apply such methods to your won blog.

  • Agen Baccarat SBOBET 10rb
    Agen Baccarat SBOBET 10rb
    16 Февраля 2018, 15:34
     ↑  0  ↓     ответ

    I want to to thank you for this good read!! I certainly loved every little bit of it.

    I've got you book-marked to look at new things you post…

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.