Режим Perl taint полезен?

perl -T

Вы используете его? Помогает ли вам найти дыры в безопасности в ваших сценариях Perl?

5 ответов

Более того: он останавливает ваши проблемы с безопасностью, прежде чем они станут такими. Конечно, это не серебряная пуля безопасности... мы использовали ее (несколько лет назад, когда я участвовал в проектах Perl) в любом script, который был выставлен извне (то есть любое приложение mod_perl), и мы нашли его очень полезны и сделали это нашей политикой. Он делает несколько проверок, и это удобно.. (все делает вещи автоматическими)

Perl Security - perlsec также настоятельно рекомендует:

Этот флаг [Taint mode] настоятельно рекомендуется для серверных программ и любой программы, выполняемой от имени другого пользователя, например CGI script. Как только режим taint включен, он будет включен для оставшейся части вашего script.


Определенно определенно!

$ echo '`rm -rf /`' | perl -Te 'eval while <>'
Insecure dependency in eval while running with -T switch at -e line 1, <> line 1.


Раздел "Безопасные методы программирования" Освоение Perl почти полностью посвящен проверке ошибок и тому, как вы должны его использовать.

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


Я думаю, что режим taint будет работать лучше всего, когда разрабатывается новый код, с которым все знакомы.

Если у вас есть код другого пользователя, который плохо написан, и вы запускаете его в режиме Taint - perl умрет, а не выполняет то, что по правилам tainting являются "небезопасными" операциями.

В режиме taint perl некоторые отверстия патчат, но не все. system ( "$ unfiltered_user_input" ) умрет, но Perl все равно мог бы записывать $unfiltered_user_input данные в файл с фиксированным именем (потому что печать испорченных данных считается "безопасным" ), а затем выполнить этот файл с помощью system(). Но ничто не может проверить все.

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

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


Да, режим taint полезен по всем причинам, упомянутым выше.

Одно место, которое вы не можете рассматривать испорченные данные, - это взаимодействие с базой данных. К счастью, у DBI есть поддержка для того, чтобы остановить испорченные данные от попадания в вашу базу данных, и обрабатывает данные, поступающие из вашей базы данных, как загрязненные, так что вы не можете делать с ними что-то небезопасное. Вы должны специально включить опции для этого; по умолчанию они отключены. Подробнее см. документы DBI.

licensed under cc by-sa 3.0 with attribution.