Полезен ли Perl's taint mode? - PullRequest
       13

Полезен ли Perl's taint mode?

23 голосов
/ 09 февраля 2010
perl -T

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

Ответы [ 5 ]

27 голосов
/ 09 февраля 2010

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

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

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

17 голосов
/ 09 февраля 2010

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

$ echo '`rm -rf /`' | perl -Te 'eval while <>'
Insecure dependency in eval while running with -T switch at -e line 1, <> line 1.
13 голосов
/ 09 февраля 2010

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

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

7 голосов
/ 09 февраля 2010

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

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

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

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

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

2 голосов
/ 25 ноября 2013

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

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

...