perl -T
你使用过它吗?它有助于你在Perl脚本中找到安全漏洞吗?
不仅如此,它还可以在安全问题变得严重之前停止它们。当然,它并不是绝对的安全保障...... 我们曾经在任何被暴露在外的脚本中使用它(例如任何mod_perl应用程序),我们发现它非常有用,并将其作为政策。它执行了一些检查,非常方便...(任何自动化的东西都会起到帮助作用)
Perl安全性-perlsec也强烈推荐使用:
这个标记[Taint mode]强烈建议用于服务器程序和代表他人运行的任何程序,例如CGI脚本。一旦启用了Taint模式,就会一直保持该模式。
当然可以!
$ echo '`rm -rf /`' | perl -Te 'eval while <>' -e行1,<>行1运行时在使用-T开关的eval中存在不安全的依赖。
我认为在大家都熟悉的新代码开发时,污点模式会发挥最佳作用。
如果你有别人编写的代码质量较差,并且你在污点模式下运行它 - Perl将会因执行被污点规则视为“不安全”的操作而崩溃。
在Perl的污点模式中,一些漏洞得到了修补,但并非全部。system(“$unfiltered_user_input”)将会崩溃,但Perl仍然可以将$unfiltered_user_input数据写入一个固定名称的文件中(因为打印受污染数据被认为是“安全”的),然后使用system()执行该文件。但是,没有任何东西可以检查所有内容。
在遗留应用程序上使用它存在权衡。当Perl在污点数据上发现不安全操作时,它将崩溃 - 这意味着必须有人进去决定如何消除数据的污点,需要哪些正则表达式,才能使应用程序再次可靠。
有些人更喜欢不安全、可靠、低成本(目前)而不是安全、损坏、需要找到开发人员。虽然从长远来看这不是好事...但这并不罕见。
system()
在一个包含来自用户获取的数据的文件上的示例是很好的。 - j_random_hacker是的,污点模式出于上述所有原因都很有用。
当与数据库交互时,您可能不会考虑到污点数据。幸运的是,DBI支持阻止污点数据进入数据库,并将来自数据库的数据视为污点数据,以便您无法执行任何不安全的操作。您必须专门打开此选项;默认情况下它们是关闭的。有关更多信息,请参见DBI文档。
哦,天啊,不要使用污点模式。污点模式应该在15-20年前就从Perl中删除了。它无法防止任何东西,因为您不可能验证某些命令的响应。它让人们相信他们是安全的,但实际上只是/(.*)/
。它几乎破坏了Windows上的所有内容(甚至无法获取准确的临时目录)。请勿使用污点模式。
$safe = $1 if $unsafe =~ /(.*)/
代码行。 - Steve Schnepp