Проверка на наличие загрязнений
Проверка на наличие искажений — это функция некоторых программирования языков , таких как Perl , [1] Руби [2] или Балерина [3] разработан для повышения безопасности путем предотвращения выполнения команд злоумышленниками на главном компьютере. Проверки на наличие вредоносных данных выявляют конкретные риски безопасности, в первую очередь связанные с веб-сайтами, которые подвергаются атакам с использованием таких методов, как внедрение SQL или атака на переполнение буфера .
Обзор
[ редактировать ]Концепция проверки на наличие вредоносных данных заключается в том, что любая переменная, которая может быть изменена внешним пользователем (например, переменная, заданная полем в веб-форме ), представляет собой потенциальную угрозу безопасности. Если эта переменная используется в выражении, которое задает вторую переменную, эта вторая переменная теперь также является подозрительной. Затем инструмент проверки искажений может последовательно обрабатывать переменные, формируя список переменных, на которые потенциально влияют внешние входные данные. Если какая-либо из этих переменных используется для выполнения опасных команд (например, прямых команд для базы данных SQL или операционной системы главного компьютера ), средство проверки на наличие ошибок предупреждает, что программа использует потенциально опасную испорченную переменную. Затем программист может перепроектировать программу, чтобы возвести безопасную стену вокруг опасного ввода.
Проверку на наличие вредоносных данных можно рассматривать как консервативное приближение к полной проверке невмешательства или как более общую концепцию безопасного потока информации . [4] Поскольку поток информации в системе не может быть проверен путем изучения одной трассировки выполнения этой системы, [5] результаты анализа искажений обязательно будут отражать приблизительную информацию о характеристиках информационного потока системы, к которой он применяется. [6]
Пример
[ редактировать ]Следующий опасный код Perl открывает большую уязвимость SQL-инъекции , не проверяя значение $name
переменная:
#!/usr/bin/perl
my $name = $cgi->param("name"); # Get the name from the browser
...
$dbh->{TaintIn} = 1;
$dbh->execute("SELECT * FROM users WHERE name = '$name';"); # Execute an SQL query
Если включена проверка на наличие ошибок, Perl откажется выполнять команду и завершит работу с сообщением об ошибке, поскольку в запросе SQL используется испорченная переменная. Без проверки на наличие вредоносных данных пользователь может войти foo'; DROP TABLE users --
, тем самым запуская команду, которая удаляет всю таблицу базы данных. Гораздо безопаснее было бы закодировать испорченное значение $name в строковый литерал SQL и использовать результат в запросе SQL, гарантируя, что никакая опасная команда, встроенная в $name
будет оценено. Другой способ добиться этого — использовать подготовленный оператор для очистки всех входных переменных для запроса.
Следует отметить, что Perl DBI требует установки TaintIn
атрибут дескриптора базы данных , а также включение режима проверки для проверки строк SQL. [7]
История
[ редактировать ]Perl поддерживал искажение в сценариях setuid как минимум с версии 3.0 (выпущенной в 1989 году). [8] хотя это было только в версии 5.0 (выпущенной в 1994 году) [8] что -T
выключатель [1] была введена интеграция tainting в единую среду выполнения.
В 1996 году Netscape реализовала искажение данных для JavaScript в Netscape Navigator 3. [9] Однако, поскольку поддержка считалась экспериментальной, она поставлялась отключенной (требующей вмешательства пользователя для активации) и требовала от авторов страниц изменять сценарии, чтобы получить от нее выгоду. Другие поставщики браузеров никогда не реализовывали эту функциональность.
Ссылки
[ редактировать ]- ^ Jump up to: а б «perlsec — безопасность Perl» . Команда разработчиков Perl 5 . Проверено 20 мая 2012 г.
- ^ Программирование на Ruby --- Руководство прагматичного программиста . Эддисон Уэсли Лонгман. 2001. С. 253 (гл. 20).
- ^ Инк, WSO2. «Балерина – Проверка на порчу» . ballerina.io . Проверено 15 февраля 2022 г.
{{cite web}}
:|last=
имеет общее имя ( справка ) CS1 maint: числовые имена: список авторов ( ссылка ) - ^ А. Сабельфельд и А.С. Майерс, «Безопасность информационных потоков на основе языка», Журнал IEEE по выбранным областям коммуникаций , 2003.
- ^ Дж. Лигатти, Л. Бауэр, Д. Уокер. «Редактирование автоматов: механизмы реализации политик безопасности во время выполнения». Международный журнал информационной безопасности , 2005 г.
- ^ Т. Тераучи и А. Эйкен. «Безопасный поток информации как проблема безопасности». На 12-м Международном симпозиуме по статическому анализу , сентябрь 2005 г.
- ^ «DBI — независимый от базы данных интерфейс для Perl» . Проверено 29 августа 2020 г.
- ^ Jump up to: а б «perlhist — записи истории Perl» . Команда разработчиков Perl 5 . Проверено 29 августа 2020 г.
- ^ Фланаган, Дэвид (1997). JavaScript: Полное руководство (2-е изд.). О'Рейли и партнеры. п. 321. ИСБН 9781565922341 .
[...] модель безопасности с искажением данных является экспериментальной в Navigator 3.0 и не включена по умолчанию. Однако ожидается, что эта модель безопасности станет моделью безопасности по умолчанию в версии Navigator 4.0.
Внешние ссылки
[ редактировать ]- Рекомендации W3C по проверке CGI-скриптов на наличие ошибок
- perlsec — документация по безопасности Perl