Главная страница
Навигация по странице:

  • Функция Действие

  • " . $filter . "

  • Развитие языков программирования растёт с большой скоростью


    Скачать 2.79 Mb.
    НазваниеРазвитие языков программирования растёт с большой скоростью
    АнкорKostern
    Дата28.04.2022
    Размер2.79 Mb.
    Формат файлаpdf
    Имя файлаKostelny_PHP-Junior-Kit.644079.pdf
    ТипДокументы
    #503693
    страница8 из 14
    1   ...   4   5   6   7   8   9   10   11   ...   14




    }
    ?>
    Мы сделали типичный поиск данных с помощью супер- переменной $_GET. У вас уже достаточно знаний чтобы понять выше написанный код и это хорошо. Поэтому я не буду объяснять как все работает. Завершу этот раздел тем, что покажу вам внизу код который можно использовать для того чтобы выйти из своего аккаунта, т.е. завершить сессию:
    ?>
    Как и в конце каждого раздела, я попрошу уважаемого читателя ответить на вопросы и выполнить упражнения которые показаны ниже.

    PHP: Junior Kit
    181
    Вопросы и упражнения для самоконтроля
    1. Что такое сессия и как она работает?
    2. Как можно задать значение переменной сессии?
    3. Для чего нужно запускать работу сессий?
    4. Как бы вы создали систему регистрации в своем приложении?
    5. Как завершать работу сессий?
    13 Безопасность
    На безопасности никогда нельзя экономить. Безопасность пользователя или потребителя всегда должна быть на высоком уровне.
    Перед тем как мы перейдем к самой теме безопасности в РНР я для начала расскажу об том какие существует методы взлома приложений.
    Одним из самых распространенных способов является использование так званных инъекций. Инъекции как раз и назвали инъекциями через то что злоумышленник как будто делает инъекцию нашему приложению чтобы "заразить" его вредным кодом, который нарушит работу приложения.

    PHP: Junior Kit
    182
    Очень часто используются SQL-инъекции, которые содержат в себе вредный SQL код, инъекции часто внедряют в формы для введения каких-то данных. Чтобы избежать инъекций используется фильтрация данных которая запрещает использование вредных SQL-инъекций.
    Сейчас было создано очень много способов для того чтобы избежать всего этого. От использования самого простого кода до использования многих паттернов и библиотек которые предназначены для того чтобы фильтровать вредные данные. Кроме SQL-инъекций, вредный код злоумышленник может также внедрить с помощью сессий.
    Или ещё злоумышленник может использовать сессию чтобы украсть данные другого пользователя. Существует много способов взлома приложения и пользователей. Иногда пользователя сами идут на шаг к злоумышленник веря что они получили сообщение от разработчиков и т.п. и т.д.
    Конечно же сейчас с использованием многих фреймворков и библиотек разработка выглядит по-другому. И разработчику не приходиться очень долго мучатся над созданием фильтрованием данных, когда за него это уже сделал фреймворк. Если кто то не знает, то фреймворк это набор инструментов и библиотек для облегчения процесса разработки приложения для программиста. И начнём мы с вами с фильтрации данных строк, которые были введены в формулу пользователем.
    13.1
    Фильтрация данных
    Представим себе ситуацию, что пользователь вводит данные которые содержат в себе вредные символы с помощью которых можно сделать команду SQL. Чтобы избежать вредных символов, а точнее символов с помощью которых можно построить инъкции, нужно воспользоваться функцией str_replace():

    PHP: Junior Kit
    183
    $bad_symbols = array("!", "#", ".", ";", ":",
    "/", "$", "%", "@");
    $plaintText = "Hello w@rld!"; // Это будут данные которые мы с вами обработаем
    $clear_data = str_replace($bad_symbols, "",
    $plaintText); // Результат: Hello wrld
    ?>
    Как вы видите, то эта функция имеет целых три параметра.
    Первый параметр это символ(ы), которые мы хотим заменить в определенной строке, второй параметр это то на что мы хотим заменить эти символы и третий это уже строка в которой мы хотим сделать данную операцию. Я использовал массив символов которые надо заменить.
    Конечно же, можно было сделать и так:
    $bad_symbol = "$";
    $plainText = "$var";
    $plainText = str_replace($bad_symbol, "",
    $plainText); // Результат: var
    ?>
    Вообще для фильтрации данных в РНР были созданы отдельные функции. Например, есть функция filter_has_var() которая проверяет существование переменной с помощью заданного типа. Ниже показан таблица функций назначенных для фильтрации данных:
    Функция
    Действие
    filter_has_var()
    Проверяет существование переменной с указанным типом. filter_id()
    Возвращает

    PHP: Junior Kit
    184
    идентификатор принадлежащий фильтру. filter_input_array()
    Получает массив переменных и при необходимости фильтрует их. filter_input()
    Получает переменную и при необходимости фильтрует её. filter_list()
    Возвращает список всех поддерживающих фильтров. filter_var_array()
    Принимает массив переменных и при необходимости фильтрует её. filter_var()
    Фильтрует переменную с помощью заданного фильтра.
    -
    Табл. 24 - Функции для фильтрации данных в РНР
    Функция filter_has_var()
    Как уже было сказано функция предназначена для того чтобы проверить существование определенной переменной с заданным типом данных. Функция имеет два параметра, первый это один из этих типов:
    INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER,
    INPUT_ENV.

    PHP: Junior Kit
    185
    Вам уже немного становиться понятно из названий этих типов что это такое. Второй параметр функции это название переменной, которую мы хотим проверить. Функция возвращает ответ только в двух логических значениях, TRUE и FALSE. Если операция прошло успешно то значение будет равно истине (TRUE), если наоборот то тогда ложи(FALSE). Пример:
    $_GET["value"] = "test"; print_r(filter_has_var(INPUT_GET, "value")); //
    Значение будет равно истине то есть TRUE
    // Здесь мы делаем проверку значения переменной в массив $_GET, на тип INPUT_GET похожую вещь можно также сделать с типом INPUT_POST
    $_POST["test"] = "PHP Book"; print_r(filter_has_var(INPUT_POST, "test")); //
    Здесь также ответ получим значении истины
    ?>
    Проверка здесь осуществляется на такие простые типы как GET и
    POST.
    Функция filter_id()
    Функция возвращает ответ в числом виде идентификатора определенного фильтра, например:
    ?>
    В этом примере мы достаем значение идентификатора фильтра validate_email.

    PHP: Junior Kit
    186
    Функция filter_input_array()
    Функция имеет три параметра первый это один из типов
    INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER,
    INPUT ENV. Второй параметр это массив в котором определяются атрибуты для фильтра, и третий параметр добавляет в результат ключи со значением NULL. Пример фильтрации:
    $filters = array(
    "title" => array(
    "filter" => FILTER_CALLBACK,
    "flags" => FILTER_FORCE_ARRAY,
    "options" => "ucwords"
    ),
    "email" => FILTER_VALIDATE_EMAIL,
    ); print_r(filter_input_array(INPUT_POST,
    $filters));
    ?>
    Пример выглядит немного сложно, если посмотреть внимательно то у нас здесь есть 2 переменные это title и email которым мы задаем параметры на фильтрацию данных. Можно заметить, что где первая переменная мы задаем параметры с помощью флагов, то есть с помощью индекса flags.
    Функция filter_input()
    Работает почти также само, как и filter_input_array только здесь уже у нас не массив а одна переменная. Функция имеет четыре параметра, первый это типы для переменной которые вам уже были показаны несколько раз, т.е.
    INPUT_GET,
    INPUT_POST,
    INPUT_COOKIE, INPUT_SERVER и INPUT_ENV.

    PHP: Junior Kit
    187
    Второй параметр это уже имя переменной, которой мы хотим сделать фильтрацию. Третий это идентификатор фильтра, который мы хотим применить к данной переменной, и четвертый это массив в котором мы задаем дополнительные параметры для фильтрации.
    Сделаем такой пример:
    $GET["id"] = 1; print_r(filter_input(INPUT_GET, "id",
    FILTER_VALIDATE_INT)); // Как вы видите, то здесь мы применили фильтр FILTER_VALIDATE_INT. Фильтры вызываются как константы
    ?>
    Полный список фильтров я пока что показывать не буду. Разве что в конце этого раздела покажу таблицу, где есть их описание. Переходим к следующей функции.
    Функция filter_list()
    Функция не имеет параметров, её надо вызывать в цикле foreach() чтобы посмотреть список всех поддерживаемых фильтров.
    Вот как это выглядит:
    $filter) { echo "" . $filter . "" . filter_id($filter);
    }
    ?>
    Если функцию не вызвать в этом цикле то мы не получим никаких результатов.
    Дальше у нас идет ещё две функции filter_var_array() и filter_var(), они работают так же само как и filter_input_array() и filter_input() только имеют разные названия.

    PHP: Junior Kit
    188
    Давайте сделаем несколько реальных примеров с фильтрацией данных. Конечно же, для реализации фильтрации данных в РНР можно использовать не только функции показаны выше но и любые функции в общем. Например, вот пример фильтрации входных данных на пробелы и запретные символы:
    $symbols = array("!", "

    ", ",", ".", "<", ">",
    "/", "\", "?", "{", "}", "[", "]", "=", "+", "-",
    "_", "*", "&", "^", ":");
    $plaint_text = "[Hello!]";
    $plaint_text = str_replace($symbols, "",
    $plaint_text); // Удаляем символы которые были указаны в массиве symbols
    $plaint_text = str_replace(" ", "",
    $plain_text); // Удаляем пробелы
    ?>
    Здесь уже намного больший массив из символами. Если мы хотим сделать фильтрование HTML-тегов то надо воспользоваться функцией strip_tags()
    , функция имеет два параметра, в первом мы указываем строку для фильтрации, а во втором указываем теги которые не надо удалять, пример:
    $text = "
    1   ...   4   5   6   7   8   9   10   11   ...   14


    написать администратору сайта