Perl的污点模式有用吗?

时间:2010-02-09 10:56:31

标签: perl taint

perl -T
你使用它吗?它是否有助于您在Perl脚本中找到安全漏洞?

6 个答案:

答案 0 :(得分:27)

不仅仅是这样,会在您的安全问题成为一个之前停止。它当然不是安全银弹......我们曾经在外部暴露的任何脚本(即任何mod_perl应用程序)中使用它(几年前我参与Perl项目),我们发现它非常有用,把它作为我们的政策。它做了一些检查,它很方便..(任何事情使事情自动化)

Perl Security - perlsec也强烈建议:

  

强烈建议此标志[污点模式]用于服务器程序以及代表其他人运行的任何程序,例如CGI脚本。一旦启用了污点模式,它就会打开脚本的其余部分。

答案 1 :(得分:17)

绝对是最好的!

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

答案 2 :(得分:13)

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

许多人会告诉你它可以保护你,但他们巧妙地说谎。它是一个开发人员工具,可以帮助您在代码中找到一些(只有一些)需要注意的地方。它无法解决您的所有安全问题。

答案 3 :(得分:7)

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

如果你的其他人的代码编写得很糟糕,并且你在污点模式下运行它 - perl会死掉而不是执行污点规则是“不安全”的操作。

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

在遗留应用上使用它有一个权衡。当Perl发现对受污染数据的不安全操作时,它将会死亡 - 这意味着有人必须进入并决定取消数据的意义,需要什么正则表达式,然后应用程序再次可靠。

有些人宁愿不安全,可靠,低成本(目前) - 安全,破碎,需要找到开发人员。从长远来看并不是那么好......但这并不罕见。

答案 4 :(得分:2)

是的,污染模式对于上述所有原因都很有用。

在与数据库交互时,您可能不会考虑受污染数据的地方。幸运的是,DBI支持阻止污染数据进入您的数据库,它会将来自您数据库的数据视为受到污染,这样您就无法对其进行任何不安全的操作。你必须专门打开这个选项;它们默认是关闭的。有关详情,请参阅the DBI docs

答案 5 :(得分:0)

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