За последние 24 часа нас посетили 22386 программистов и 1281 робот. Сейчас ищут 808 программистов ...

Проверка перед вставкой в запрос с помощью Регулярный выражений

Тема в разделе "Регулярные выражения", создана пользователем miltorg, 8 сен 2019.

  1. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Для одной формы с 3 полями есть filter_var_array или filter_input_array с $pdo->prepare(...). И никакие кривые регулярки не нужны.
     
  2. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Не нужно слов - пишите код.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @miltorg, вам сразу же показали код с prepare. Чего повторяться?
     
  4. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    За 3 дня ничего не сломали. Продолжаем.
    Недавно столкнулся с тем что в базу неизвестной CMS нужно было прописать одно значение с поля - адрес интернета.
    Скорее все в этой CMS есть валидация и пр. Но времени на это может уйти очень много. Поэтому:

    if ($_POST and $idic=$_POST['idicalimport']) {
    $_=trim($_POST['icalimport']);
    if (preg_match('/[\'"<>; #]/', $_) == 0) Bookingcalendar::updateGoogleLink($_, $idic);
    }

    Всё. Задача решена в 4 строки.
     
    #79 miltorg, 12 сен 2019
    Последнее редактирование: 12 сен 2019
  5. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    пользователь не передал idicalimport.
    Всё, задача нифига не решена и падает с ошибкой.

    PS: чё там, фсбшники то уже приезжали?
     
  6. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    ??? Так и не надо каждый раз жать на кнопку обновления.
    Падает с ошибкой - прикол. Это рабочий код. Протестированный 500 раз.
    --- Добавлено ---
    Про ФСБ - вообще не понял
     
  7. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Ясно.
    Садитесь, два.
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    А я понял
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Т.е. если нету ни одного из этих символов, УРЛ нормальный?
    PHP:
    1. if (filter_var($_, FILTER_VALIDATE_URL) !== false) //...
    И, как и указал @acho, случай, если был пост запрос, но не пришло нужных данных (ведь пост-запрос может не только с формы прийти теоретически) не обработан.
     
  10. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Я читал что национальные домены не поддерживаются. А для России - это очень плохо
    --- Добавлено ---
    Да. Точнее безопасный. Мы ведь про безопасность
    --- Добавлено ---
    А зачем нам запрос не с формы? Я тут честно не понимаю вообще про что вы. Запрос $_POST['idicalimport'] придёт только с формы. Другое нам не надо.
    Задача. Поставить в незнакомую CMS кнопку с полем для обновления базы. Метод для обновления - Bookingcalendar::updateGoogleLink($_, $idic);
    Что не так?
     
    #85 miltorg, 12 сен 2019
    Последнее редактирование: 12 сен 2019
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Я могу с Postman прислать.
    Для безопасности вообще фильтровать не надо, только убедится, что CMS-ка нормальными людьми написана, которые не пихают переменные прямо в запросы. Я бы прощёлкал (CTRL+click) внутрь до запроса.

    Ну и лично моё мнение, потратить время и разобрать, как такие вещи сделаны в CMS - это правильнее. Мне вот сейчас достался проект, который до меня год пилил сотрудник, потом ушёл из компании. Толково пилил, но по мне слишком много архитектуры. Но, поскольку он уже напилил там, я всё делаю в том же духе, что у него написано, даже если сам бы в жизни так не сделал. Поскольку в чужом коде по чужим правилам. И естественно, на то, чтобы разобрать, что в какой класс засунуть уходит больше времени (особенно по началу).
    --- Добавлено ---
    Тут соглашусь. Надо посмотреть, как в Laravel валидатор урлов работает. Вроде никто пока не жаловался. А без фреймворка я очень редко пишу
     
  12. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Что прислать? Зачем прислать? Я правда не понимаю.
    Что не так?
    --- Добавлено ---
    И это я не понял.
    --- Добавлено ---
    Ситуация там очень не однозначная.
    С одной стороны есть сайт http://belegungskalender-ferienwohnung.de где я это всё уже расписал-написал под Друпал.
    Теперь другой заказчик хочет чтоб я это всё впихнул в самопис на yii.
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Ну там с валидацией вообще красота: https://www.yiiframework.com/doc/guide/2.0/ru/tutorial-core-validators
    Ctrl+Click по функции или классу в PHPStorm сразу переходит на определение этой функции или класса
    Мне не нужна форма, чтоб сделать запрос. Особенно актуально учитывать это для форм, которые доступны без регистрации.
     
  14. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Почему не пишите код? yii1
    --- Добавлено ---
    У вас какое образование?
    --- Добавлено ---
    И???
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Зачем? Доки не хватает? На первом я не работал, но там должно быть в том же роде. Хотя, yii1 в 2019 - странность какая-то. Второй-то уже подустарел морально, хоть я его и люблю. Жду не дождусь, когда третий выйдет.
    --- Добавлено ---
    Код не должен падать, если я такой не хороший раскопаю урл и начну на него хрень слать.
     
  16. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Без кода - это всё словеса.
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Ваш по меньшей мере предупреждение в лог кинет.
     
  18. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    А с чего там код упадёт? С чего?
    --- Добавлено ---
    А. То есть ничего не упадёт :)
    Это Поле у пользователя. Через вход
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Если не пришлю idicalimport, будет по меньшей мере предупреждение. ПОэтому надо хотя бы двойным вопросом отбивать
    PHP:
    1. $idic=($_POST['idicalimport'] ?? false)
    --- Добавлено ---
    @miltorg, ну во всех известных мне фреймворках кидается исключение, если код вызывает предупреждение, и всё падает. И правильно делают авторы фреймворков, кстати, нефиг код, который даёт предупреждения, писать.
    Ну и раздувание логов ошибок хренью - тоже так себе перспективка.
     
  20. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    И???
    Будет предупреждение и что дальше?
    --- Добавлено ---
    Прикол. Получается что мой код - ещё и стабильнее фреймворков всяких.
    А я то не пойму никак - про что вы. Теперь понял, но у меня этого нет.
    У меня более стабильный код.
    --- Добавлено ---
    Ребят. У меня ощущение что вы зависли на этих своих фреймворках и ничего кроме их не видите.
    Мир давно уже ушёл вперёд.
    Поюзайте, Друпал для примера.
    --- Добавлено ---
    Создание модуля Drupal
    В sites/all/modules создаётся папка myprint.
    В ней два файла:

    myprint.info:

    name = My print Module
    description = opisanie My print Module
    version = 7.x-1.0
    core = 7.x

    -----------------------------------------------------------------
    myprint.module:

    <?php
    print 'My print Module';

    -----------------------------------------------------------------

    Этот модуль будет выводить фразу: My print Module, на всех страницах сайта, в самом верху.

    Источник: http://chajnik.ru/sozdanie-modulja
    --- Добавлено ---
    И всё. Весь модуль под Друпалом.
    Есть такое в Yii?
    --- Добавлено ---
    Делайте что хотите - доступны все Друпаловские Плюшки.
    Хотите пишите без Друпала, а в любой момент хватаните $user->name, например
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Юзал я друпал. Не понравилось.
    Нет, получается, что фреймворки приучают писать код так, чтоб он не давал предупреждений. За плохой код наказывают.
     
  22. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Если это требование заказчика - тогда, Да.
    У меня требование заказчика - быстрее, а разукрасим потом.
    --- Добавлено ---
    По регулярке и безопасности есть что сказать?
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Одно с другим не связано. уже много раз сказано. Для безопасности используются плейсхолдеры в запросах, htmlspecialchars при выводе. Регулярки - для валидации, что входные данные соответствуют требованиям задачи и для разбора текстовых данных.
     
  24. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Всем из страны фреймворков:
    Остальные потуги для ваших местечковых фреймворков - мне не интересны - пишите их на форумах местячковых фреймворков.
    --- Добавлено ---
    По моей регулярке и безопасности есть что сказать?
    Если нет - то я устал тут бесплатным обучением заниматься
     
  25. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @miltorg, мы местячковые фреймворки тут не упоминали. Laravel, Symphony, Zend Framework - лидеры индустрии. Yii2 - самый популярный фреймворк в странах СНГ