Поделиться через


Безопасность и входные данные пользователей

Пользовательские данные, которые являются любым типом входных данных (данные из веб-запроса или URL-адреса, входные данные для элементов управления приложения Microsoft Windows Forms и т. д.), могут негативно повлиять на код, так как часто эти данные используются непосредственно в качестве параметров для вызова другого кода. Эта ситуация аналогична вредоносному коду, вызывающму код с странными параметрами, и следует принять те же меры предосторожности. Пользовательский ввод на самом деле сложнее сделать безопасным, так как отсутствует кадр стека для отслеживания наличия потенциально ненадежных данных.

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

Ниже приведены некоторые важные аспекты, связанные с данными пользователей:

  • Все пользовательские данные в ответе сервера обрабатываются в контексте сайта сервера на клиенте. Если веб-сервер принимает пользовательские данные и вставляет его в возвращаемую <веб-страницу, это может, например, включить тег скрипта> и запустить его как будто с сервера.

  • Помните, что клиент может запросить любой URL-адрес.

  • Рассмотрите сложные или недопустимые пути:

    • .. \ , чрезвычайно длинные пути.

    • Использование подстановочных знаков (*).

    • Расширение маркера (%token%).

    • Странные формы путей с особым значением.

    • Альтернативные имена потоков файловой системы, filename::$DATAнапример.

    • Короткие версии имен файлов, longfi~1 например для longfilename.

  • Помните, что Eval(userdata) может сделать что-либо.

  • Будьте осторожны с поздним связыванием к имени, в которое включены некоторые пользовательские данные.

  • Если вы работаете с веб-данными, рассмотрите различные формы экранирования, которые допустимы, в том числе:

    • Шестнадцатеричные побеги (%nn).

    • Экранирование Юникода (%nnn).

    • Чрезмерно длинные UTF-8 escape-последовательности (%nn%nn).

    • Двойные последовательности (%nn становится %mmnn, где %mm — это последовательность для '%' ).

  • Будьте осторожны с именами пользователей, которые могут иметь более одного канонического формата. Например, часто можно использовать форму MYDOMAIN\username или форму имени пользователя@mydomain.example.com.

См. также