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

Смотрите также:
Комментарии (36) Добавить комментарий
  • Михаил
    Михаил
    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…

  • Help With Personal Statement Writing
    Help With Personal Statement Writing
    19 Февраля 2018, 06:18
     ↑  0  ↓     ответ

    Hi, i read your blog from time to time and i own a similar one and i was just wondering if you get a lot of spam responses?

    If so how do you prevent it, any plugin or anything

    you can advise? I get so much lately it's driving me insane so any

    help is very much appreciated.

  • domino z samochodem
    domino z samochodem
    21 Февраля 2018, 04:13
     ↑  0  ↓     ответ

    Great blog! Is your theme custom made or did you download

    it from somewhere? A design like yours with a few simple adjustements would really

    make my blog stand out. Please let me know where you

    got your design. Thank you

  • The Easiest Way to Write an Essay
    The Easiest Way to Write an Essay
    10 Марта 2018, 13:04
     ↑  0  ↓     ответ

    Woah! I'm really loving the template/theme of this blog.

    It's simple, yet effective. A lot of times it's difficult to get that "perfect balance" between superb usability and appearance.

    I must say you've done a very good job with this. Additionally, the blog loads extremely fast for me

    on Opera. Excellent Blog!

  • app per dieta dyukan per iphone
    app per dieta dyukan per iphone
    13 Марта 2018, 09:59
     ↑  0  ↓     ответ

    Today, I went to the beachfront with my children. I found a sea shell and gave it to

    my 4 year old daughter and said "You can hear the ocean if you put this to your ear." She placed the shell to

    her ear and screamed. There was a hermit crab inside and it pinched her ear.

    She never wants to go back! LoL I know this is completely

    off topic but I had to tell someone!

  • igrovyeavtomatyonlajn.com
    igrovyeavtomatyonlajn.com
    13 Марта 2018, 20:55
     ↑  0  ↓     ответ

    Завтра Я сорвал большой куш в этом азартном заведении

  • dog accessories online
    dog accessories online
    14 Марта 2018, 03:14
     ↑  0  ↓     ответ

    Ridiculous quest there. What happened after? Take care!

  • http://Vegas-Style-Slots.com
    http://Vegas-Style-Slots.com
    21 Марта 2018, 14:55
     ↑  0  ↓     ответ

    В свой выходной Я буду играть в этом уважаемом online-клубе

  • Essayist British Airlines
    Essayist British Airlines
    24 Марта 2018, 09:35
     ↑  0  ↓     ответ

    I visited various web sites but the audio quality

    for audio songs existing at this web page is in fact excellent.

  • go to raja ampat.
    go to raja ampat.
    03 Апреля 2018, 16:28
     ↑  0  ↓     ответ

    I was extremely pleased to find this website. I wanted to

    thank you for your time just for this wonderful read!! I definitely really liked

    every bit of it and i also have you saved to fav to look at new information in your site.

  • Agen Casino Sbobet Terpercaya 50rb
    Agen Casino Sbobet Terpercaya 50rb
    03 Апреля 2018, 21:22
     ↑  0  ↓     ответ

    It's an amazing article designed for all the web visitors; they will

    get advantage from it I am sure.

  • https://www.linkedin.com/in/alexey-ostrovskiy-25aa97151
    https://www.linkedin.com/in/alexey-ostrovskiy-25aa97151
    23 Апреля 2018, 17:28
     ↑  0  ↓     ответ

    Hell? there, I fo?nd yur blog bby t?e uѕe оf Google ?t thе same time aѕ looking foг a similawr matter, your web

    site ccame u?, it seems to ?е greаt. I hhave bookmarked it in my google bookmarks.

    Hello there, simply waas awaqre ?f your weblog thru Google,

    and found that іt is truly informative. ? ?m

    gona be careful f?r brussels. I'll Ьe grateful ?hen y?u continue thіs

    iin future. Numerous people wkll ?ikely bе benefited out ?f your writing.

    Cheers!

  • автоматы играть бесплатно
    автоматы играть бесплатно
    27 Апреля 2018, 18:04
     ↑  0  ↓     ответ

    Вчера Я вывел деньги в этом лучшем онлайн-клубе

  • docs.iolinux.org
    docs.iolinux.org
    08 Мая 2018, 17:56
     ↑  0  ↓     ответ

    What i do not realize is in reality how you're no longer

    really a lot more neatly-appreciated than you might be now.

    You're so intelligent. You know tgus considerably in the cae off this matter, produced me for my

    part believe it from a lot of varied angles.

    Its like men aand women don't seem to be interested except it's one

    thing to accomplish with Woman gaga! Your own stuffs outstanding.

    All the time maintain it up!

  • Agen Sbobet Terpercaya Online
    Agen Sbobet Terpercaya Online
    13 Мая 2018, 15:28
     ↑  0  ↓     ответ

    Attractive component to content. I simply stumbled upon your web site and in accession capital to assert

    that I acquire actually loved account your weblog posts.

    Any way I will be subscribing on your feeds and even I fulfillment you access persistently rapidly.

  • Daftar Sbobet Online Terpercaya
    Daftar Sbobet Online Terpercaya
    05 Июня 2018, 01:41
     ↑  0  ↓     ответ

    I am really impressed with your writing skills as well as with the layout on your weblog.

    Is this a paid theme or did you customize it yourself?

    Either way keep up the excellent quality writing, it's rare to see a great blog like this one these days.

  • бесплатно и без регистрации
    бесплатно и без регистрации
    07 Июня 2018, 12:14
     ↑  0  ↓     ответ

    Несколько месяцев назад Я выиграл бабки в этом крутом клубе

  • классические игровые аппараты
    классические игровые аппараты
    13 Июня 2018, 14:27
     ↑  0  ↓     ответ

    Несколько лет назад Я поймал удачу в этом современном онлайн-казино

  • oohbiscotti.blogspot.com
    oohbiscotti.blogspot.com
    19 Июня 2018, 19:36
     ↑  0  ↓     ответ

    Everyone loves what you guys are up too. This kind of clever work

    and exposure! Keep up the terrific works guys I've added you guys to my personal blogroll.

  • judi online domino qq
    judi online domino qq
    20 Июня 2018, 18:09
     ↑  0  ↓     ответ

    The other day, while I was at work, my cousin stole my apple ipad and tested tto see if

    iit can survive a thirty foot drop, just so she can be a youtube sensation. My apple

    ipad is now destroyed and she haas 83 views. I know this is totally off topic but I had to share

    it with someone!

  • agen judi terpercaya
    agen judi terpercaya
    04 Июля 2018, 16:32
     ↑  0  ↓     ответ

    Right away I am going to do my breakfast, once having my breakfast coming again to read further news.

  • Ronen
    Ronen
    30 Июля 2018, 04:13
     ↑  0  ↓     ответ

    Hi! Would you mind if I share your blog with

    my zynga group? There's a lot of folks that I think would really appreciate your content.

    Please let me know. Many thanks

  • Интернет казино wmr
    Интернет казино wmr
    13 Сентября 2018, 13:38
     ↑  0  ↓     ответ

    Данный веб-ресурс действительно то, что мне нужно.

    Наконец-то я нашел полезную информацию) Большое

    спасибо)

  • minecraft
    minecraft
    22 Сентября 2018, 19:53
     ↑  0  ↓     ответ

    I used to be recommended this web site by means of my cousin. I'm

    now not sure whether or not this publish is written through him as no

    one else understand such particular about my

    problem. You are amazing! Thank you!

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




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

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