Действительно ли режим инфекции Perl полезен?

perl -T

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

23
задан ziya 30 December 2010 в 14:11
поделиться

4 ответа

dim a as integer? = 1
dim b as integer = a.value

Не забудьте проверить, имеет ли значение a.hasvalue (возвращает логическое значение, true, если имеет значение).

-121--4213421-
myNonNullableVar = if(myNullableVar, 0)

установит 0, если целое число? имеет значение null или возвращает фактическое значение.

В C # это будет:

 myNonNullableVar = myNullableVar ?? 0;
-121--4213425-

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

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

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

27
ответ дан 29 November 2019 в 01:04
поделиться

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

$ echo '`rm -rf /`' | perl -Te 'eval while <>'
Insecure dependency in eval while running with -T switch at -e line 1, <> line 1.
16
ответ дан 29 November 2019 в 01:04
поделиться

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

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

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

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

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

7
ответ дан 29 November 2019 в 01:04
поделиться

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

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

13
ответ дан 29 November 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: