Проверка на заражение - это функция некоторых языков программирования , таких как Perl [1] и Ruby , [2], предназначенная для повышения безопасности путем предотвращения выполнения злоумышленниками команд на главном компьютере. Проверки на заражение позволяют выявить определенные риски безопасности, в первую очередь связанные с веб-сайтами, которые подвергаются атакам с использованием таких методов, как внедрение SQL или атаки с переполнением буфера .
Обзор
Концепция проверки на заражение заключается в том, что любая переменная, которая может быть изменена внешним пользователем (например, переменная, установленная полем в веб-форме ), представляет собой потенциальную угрозу безопасности. Если эта переменная используется в выражении, которое устанавливает вторую переменную, эта вторая переменная теперь также подозрительна. Затем инструмент проверки на наличие заражения может переходить от переменной к переменной, формируя список переменных, на которые потенциально может влиять внешний ввод. Если какая-либо из этих переменных используется для выполнения опасных команд (таких как прямые команды для базы данных SQL или операционной системы хост-компьютера ), средство проверки заражения предупреждает, что программа использует потенциально опасную испорченную переменную. Затем компьютерный программист может перепроектировать программу, чтобы возвести безопасную стену вокруг опасного входа.
Проверка на заражение может рассматриваться как консервативное приближение к полной проверке невмешательства или более общая концепция безопасного информационного потока . [3] Поскольку информационный поток в системе не может быть проверен путем изучения единственной трассы выполнения этой системы, [4] результаты анализа помеченных данных обязательно будут отражать приблизительную информацию о характеристиках информационного потока системы, к которой он применяется. [5]
Пример
Следующий опасный код Perl открывает большую уязвимость SQL-инъекции , не проверяя значение $name
переменной:
#! / usr / bin / perl my $ name = $ cgi -> param ( "name" ); # Получить имя из браузера ... $ dbh -> { TaintIn } = 1 ; $ dbh -> execute ( "ВЫБРАТЬ * ОТ пользователей WHERE name = '$ name';" ); # Выполнить SQL-запрос
Если проверка на зараженность включена, Perl откажется выполнить команду и выйдет с сообщением об ошибке, потому что в запросе SQL используется испорченная переменная. Без проверки на заражение пользователь мог войти foo'; DROP TABLE users --
, запустив тем самым команду, удаляющую всю таблицу базы данных. Гораздо безопаснее было бы закодировать испорченное значение $ name в строковый литерал SQL и использовать результат в запросе SQL, гарантируя, что никакая встроенная опасная команда $name
не будет оцениваться. Другой способ добиться этого - использовать подготовленный оператор для очистки всех вводимых переменных для запроса.
Следует отметить, что Perl DBI требует установки TaintIn
атрибута дескриптора базы данных, а также включения режима taint для проверки строк SQL. [6]
История
Perl поддерживается загрязненность в Setuid сценариев , по меньшей мере , версии 3.0 (выпущенных в 1989 году), [7] , хотя это не было до версии 5.0 (выпущенной в 1994 году) [7] , что -T
переключатель [1] был введен интеграцией загрязненности в единое время выполнения.
В 1996 году Netscape реализованы данные загрязненность в стороне сервера JavaScript в Netscape Communications Server , [ править ] , а также на стороне клиента для Netscape Navigator 3. [8] Тем не менее, так как на стороне клиента , поддержка считается экспериментальной его грузили отключены (требование вмешательство пользователя для активации), и требовал, чтобы авторы страниц изменяли сценарии, чтобы извлечь из этого пользу. Другие производители браузеров никогда не реализовывали эту функциональность; То же самое и с основным конкурентом Communications Server, новым (на тот момент) Internet Information Server от Microsoft .
Рекомендации
- ^ a b "perlsec - безопасность Perl" . Команда разработчиков Perl 5 . Проверено 20 мая 2012 .
- ^ Программирование на Ruby --- Руководство программиста-прагматика . Эддисон Уэсли Лонгман. 2001. С. 253 (гл. 20).
- ^ A. Сабельфельд и AC Myers, «Языкоснове информационной безопасности потока», IEEE Journal в отдельных областях , в связи , 2003.
- ^ Дж. Лигатти, Л. Бауэр, Д. Уокер. «Редактировать автоматы: механизмы обеспечения соблюдения политик безопасности во время выполнения». Международный журнал информационной безопасности , 2005 г.
- ^ Т. Тераучи и А. Айкен. «Безопасный информационный поток как проблема безопасности». На 12-м Международном симпозиуме по статическому анализу , сентябрь 2005 г.
- ^ «DBI - интерфейс для Perl, не зависящий от базы данных» . Проверено 29 августа 2020 .
- ^ а б "perlhist - записи истории Perl" . Команда разработчиков Perl 5 . Проверено 29 августа 2020 .
- ^ Фланаган, Дэвид (1997). JavaScript: Полное руководство (2-е изд.). O'Reilly & Associates. п. 321. ISBN. 9781565922341.
[...] модель безопасности, порчающая данные, является экспериментальной в Navigator 3.0 и по умолчанию не включена. Однако ожидается, что это будет модель безопасности по умолчанию в версии 4.0 Navigator.
Внешние ссылки
- Рекомендации W3C по проверке заражения скриптами CGI
- perlsec - документация по безопасности Perl