Поделиться в соцсетях:

В разработке любого программного обеспечения программисту нужно не только писать понятный код с ясной продуманной архитектурой, но и не забывать о всяческих проверках и продумывать неверные действия пользователей, например, проверять входящие данные от пользователей, ведь Вашим продуктом будут пользоваться как обычные люди, которые могут совершить ошибку при отправке каких-либо данных, так и злоумышленники (простыми словами — «хакеры»), которые будут искать уязвимости. И в том, и в другом случае, если в коде допущены уязвимости — это может привести к серьезным проблемам, вплоть до финансовых убытков, что, естественно, крайне нежелательно.

Обычно начинающие программисты из-за своей неопытности могут упустить (не предугадать) важные моменты безопасности, но все мы люди, поэтому даже крупные корпорации с внушительным штатом профессиональных опытных программистов могут не увидеть «дырки» в программном обеспечении, ведь даже в корпорации Google или Apple были громкие истории, связанные с утечкой данных пользователей путем взлома разных сервисов этих компаний.

Безопасность кода в Moodle

Как и любая open-source система она постоянно обновляется и, при обнаружении уязвимостей — оперативно устраняется, поэтому, на данный момент, при поддержке многотысячного сообщества Moodle такого вида «баги» практически исключены. Другое дело плагины Moodle: они пишутся энтузиастами, которым, конечно, отдельное спасибо, но все же их уровень никому неизвестен, поэтому перед публикацией каждый плагин проходит определенную проверку core-программистами Moodle, они по опыту знают что проверять, например, один из главных программистов Moodle после проверки очередного плагина написал в своем твиттере:

Проверка, фильтрация и обработка входных данных Moodle

Описание встроенных функций Moodle для обеспечения безопасности кода

    • fix_utf8($value)

    • ОписаниеПриводит входящие данные к кодировке utf8, недопустимые символы отбрасываются
    • $value — переменная, которую надо привести к utf8
    • clean_param($param, $type)

    • Описаниеочищает переменные и приводит к соответствующим типам. Используются встроенные Moodle-функции optional_param и required_param
    • Расположение файлаlib/moodlelib.php
    • $param — параметр (переменная), который нужно обработать
      • $type — ожидаемый тип параметра. Возможные значения:

      • PARAM_RAW — ничего не «чистит», использует функцию fix_utf8
      • PARAM_RAW_TRIMMED — ничего не «чистит», но обрезает лишние пробелы в начале и конце значения. Использует базовую функцию из php trim после функции fix_utf8
      • PARAM_CLEANHTML — «Очищает» HTML-строку
      • PARAM_INT — приводит значение к целому числу
      • PARAM_FLOAT — приводит значение к числу с плавающей точкой
      • PARAM_ALPHA — убирает все символы кроме строчных букв, убирает заглавные буквы в том числе
      • PARAM_ALPHAEXT — убирает все символы кроме букв, оставляет строчные и заглавные буквы
      • PARAM_ALPHANUM — убирает все символы кроме любых букв и цифр
      • PARAM_ALPHANUMEXT — убирает все символы кроме любых букв, цифр и тире
      • PARAM_SEQUENCE — убирает все символы цифр
      • PARAM_BOOL — приводит к 1 (истина) или 0 (ложь)
      • PARAM_NOTAGS — удаляет все HTML-теги, использует php-функцию strip_tags и fix_utf8
      • PARAM_TEXT — оставляет текст, удаляет все HTML-теги, но оставляет теги lang
      • PARAM_COMPONENT — возвращает название компонента без его префикса, например из строки mod_somecomponent вернется somecomponent
      • PARAM_SAFEDIR — если Вы хотите вернуть имя папки в Moodle, то используйте этот параметр, он приводи строку в соответствие с правилами названия папок в Moodle
      • PARAM_SAFEPATH — то же самое что и PARAM_SAFEDIR, но допускаются также слэши вида /
      • PARAM_FILE — убирает все подозрительные символы от названия файла
      • PARAM_PATH — «чистит» представленную строку и преобразует ее в валидный путь
      • PARAM_HOST — если Вам необходимо вернуть валидный хост (в том числе IPv4-адрес)
      • PARAM_URL — валидирует URL-строку
      • PARAM_PEM — валидирует сертификат
      • PARAM_BASE64 — декодит в base64-формат
      • PARAM_TAG — возвращает имя тега из строки
      • PARAM_CAPABILITY — проверяет на наличие capability, совпадающее с параметром
      • PARAM_AUTH — проверяет на наличие метода авторизации
      • PARAM_LANG — проверяет на наличие соответствующей локали
      • PARAM_THEME — проверяет на наличие соответствующей темы/шаблона
      • PARAM_USERNAME — проверяет на наличие соответствующего логина
      • PARAM_EMAIL — проверяет на соответствие предлагаемый адрес e-mail
    • optional_param($parname, $default, $type)

    • Описаниеэта функция обрабатывает значение суперглобальных php-массивов $_GET, $_POST, $_REQUEST, ссылаясь на их ключи в параметре $parname. Главная особенность этой функции заключается в том, что если суперглобальный php-массив не содержит данного ключа, то возвращается значение по-умолчанию $default
    • Расположение файлаlib/moodlelib.php
    • $parname — имя параметра суперглобального массива
    • $default — значение по-умолчанию если значение по ключу пустое или его не существует
    • $typeожидаемый тип параметра.
    • required_param($parname, $type)

    • Описаниеэта функция аналогична функции optional_param, главное отличие, что нет значения по-умолчанию и если нужного ключа нет в суперглобальном массиве, то выводится ошибка об этом
    • Расположение файлаlib/moodlelib.php
    • $parname — имя параметра суперглобального массива
    • $typeожидаемый тип параметра.
    • optional_param_array($parname, $default, $type)

    • Описаниеэта функция аналогична функции optional_param с тем лишь отличием, что переменная $parname — это ключ у суперглобального массива и значение по этому ключу является массивом, например $_POST[$parname] — массив.
    • Расположение файлаlib/moodlelib.php
    • $parname — имя параметра суперглобального массива
    • $default — значение по-умолчанию если значение по ключу пустое или его не существует
    • $typeожидаемый тип параметра.
    • required_param_array($parname, $type)

    • Описаниеэта функция аналогична функции optional_param_array, отличие в отсутствии, как и у required_param, параметра $default. При отсутствии ключа выдается ошибка.
    • Расположение файлаlib/moodlelib.php
    • $parname — имя параметра суперглобального массива
    • $typeожидаемый тип параметра.
    • clean_param_array(array $param = null, $type, $recursive = false)

    • Описаниеэта функция аналогична функциям optional_param_array и required_param_array, но она принимает как параметр $param уже готовую переменную (массив)
    • Расположение файлаlib/moodlelib.php
    • $param — переменная, которая будет обрабатываться
    • $typeожидаемый тип параметра.
    • $recursive — если значения массива $param также являются массивом, то при значении true они также будут обрабатываться данной функцией рекурсивно
    • is_number($value)

    • Описаниепроверяет является ли параметр $value целым числом
    • Расположение файлаlib/moodlelib.php
    • $value — переменная, которая будет обрабатываться
    • strip_links($string)

    • Описаниефункция возвращает текстовые анкоры ссылок из HTML-кода
    • Расположение файлаlib/moodlelib.php
    • $string — переменная, HTML-код, в котором содержится тег a

Пример

//например, Вам необходимо получить и обработать параметр somevar из URL страницы: http://mymoodlesite.ru/somepage.php?somevar=lenauth, записать это значение в переменную и сделать запрос к базе данных
//$somevar = $_GET['somevar']; //как делать нельзя!!!
$somevar = optional_param('somevar', '', PARAM_ALPHA); //отлично! вернет lenauth
//или
$somevar = optional_param('somevar', '', PARAM_AUTH); //не только вернет lenauth, но и проверит если ли такой метод авторизации

Замечание

Не стоит делать частые ненужные проверки данной функцией абсолютно всех данных, только если эти данные действительно необходимо проверять, потому что при проверке часто вызываются функции регулярных выражений php, иногда делаются лишние запросы к базе данных, что создает дополнительную нагрузку на сервер.

Комментарии 2
  • tezekse
      

    Это обработка персональных данных? И что, нужно обязательно визуальное подтверждение согласия? У нас абитуриенты бумажку подписывают при сдаче доков на поступление в ВУЗ. Я проверяльщиков пошлю в приемную комиссию эти бумажки проверяь, если их не устроит объяснение про механизм создания учетки с подтверждением пользовательского соглашения

  • Droidmod.ru
      

    Это обработка персональных данных? И что, нужно обязательно визуальное подтверждение согласия? У нас абитуриенты бумажку подписывают при сдаче доков на поступление в ВУЗ. Я проверяльщиков пошлю в приемную комиссию эти бумажки проверять, если их не устроит объяснение про механизм создания учетки с подтверждением пользовательского соглашения

Напишите комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Ждем обратной связи для взаимовыгодного сотрудничества

Наша работа ориентирована на b2b сегмент. Мы стремимся качественно предоставлять весь спектр услуг, связанный с LMS Moodle, чтобы доходы клиентов и их удовлетворенность нашей работой были максимальными. Если у Вас возникли вопросы или предложения — пишите.

Откроется всплывающее окно

Напишите нам
Технологии программирования Moodle: CSS3, AngularJS, Bootstrap

© 2014–2016, ООО «Вебкор». Все права защищены.