27
perl -T

你用它吗?它是否可以帮助您发现 Perl 脚本中的安全漏洞?

4

6 回答 6

30

不仅如此:) 它可以在您的安全问题成为一个问题之前阻止它们。它当然不是安全的灵丹妙药……我们曾经在任何暴露在外部的脚本(即任何 mod_perl 应用程序)中使用它(几年前我参与 Perl 项目),我们发现它非常有用并且使它成为我们的政策。它做了一些检查并且很方便..(任何东西都可以使事情自动化)

Perl 安全 - perlsec也强烈推荐它:

强烈建议为服务器程序和代表其他人运行的任何程序(例如 CGI 脚本)使用此标志 [Taint mode]。一旦污点模式开启,它将在脚本的其余部分开启。

于 2010-02-09T11:10:03.627 回答
18

明确地!

$ echo '`rm -rf /`' | perl -Te 'eval while <>'
在 -e 第 1 行,<> 第 1 行使用 -T 开关运行时,eval 中的依赖关系不安全。
于 2010-02-09T14:31:51.603 回答
14

Mastering Perl的“安全编程技术”一章几乎完全致力于污点检查以及如何使用它。

许多人会告诉你它可以保护你,但他们巧妙地对此撒谎。它是一个开发工具,可以帮助您在代码中找到一些(仅一些)需要小心的地方。它不会解决您所有的安全问题。

于 2010-02-09T20:23:29.240 回答
8

我认为当开发每个人都熟悉的新代码时,污点模式效果最好。

如果你有其他人的代码写得不好,并且你在污点模式下运行它——perl 会死,而不是执行污点规则中的“不安全”操作。

在污点模式 perl 中,一些漏洞被修补但不是全部。system("$unfiltered_user_input") 会死,但 Perl 仍然可以将 $unfiltered_user_input 数据写入具有固定名称的文件(因为打印受污染的数据被认为是“安全的”),然后使用 system() 执行该文件。但没有什么可以检查一切。

在旧版应用程序上使用它需要权衡取舍。当 Perl 发现对受污染数据的不安全操作时,它会死掉——这意味着必须有人进入并决定对数据进行污染意味着什么,需要什么正则表达式,然后应用程序才能再次可靠。

有些人更喜欢不安全、可靠、低成本(目前),而不是安全、损坏、需要找到开发人员。从长远来看,这并不好……但这并不罕见。

于 2010-02-09T14:38:18.373 回答
3

是的,由于上述所有原因,污点模式很有用。

与数据库交互时,您可能不会考虑污染数据的一个地方。幸运的是,DBI 支持阻止受污染的数据进入您的数据库,并且它将来自您的数据库的数据视为受污染,因此您不能对它做任何不安全的事情。您必须为此专门打开选项;默认情况下它们是关闭的。有关更多信息,请参阅DBI 文档

于 2013-11-25T14:49:50.060 回答
-2

哦,上帝,没有。污染模式应该在 15 到 20 年前从 Perl 中删除。它不会阻止任何事情,因为您不可能验证某些命令的响应。它让人们相信他们是安全的,但他们所做的只是/(.*)/。它几乎破坏了 Windows 上的所有内容(甚至能够获得准确的临时目录)。不要使用污点

于 2020-08-17T14:35:20.437 回答