【问题标题】:Is Perl's taint mode useful?Perl 的污点模式有用吗?
【发布时间】:2010-02-09 10:56:31
【问题描述】:
perl -T

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

【问题讨论】:

    标签: perl taint


    【解决方案1】:

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

    Perl Security - perlsec也强烈推荐:

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

    【讨论】:

    • Taint mode 是一个开发者工具。它不会停止或防止安全问题。它会向您显示问题所在,但需要您正确处理。
    • 这根本没有误导性。污点检查不会增加你的安全性。我并不是说不要使用它。只是不要认为它会保护你。它只是向您展示您应该在哪里考虑保护。我见过很多“污点安全”程序,它们仍然存在未经验证的输入的旧安全问题。
    • @briandfoy ... 通过臭名昭著的$safe = $1 if $unsafe =~ /(.*)/
    【解决方案2】:

    绝对是!

    $ echo '`rm -rf /`' | perl -Te 'eval while '
    在 -e 第 1 行, 第 1 行使用 -T 开关运行时,eval 中的依赖关系不安全。

    【讨论】:

    • 哈。如果你真的跑了,你就很勇敢。我可能花了 3 个小时才按回车键来确保 -T 在我的 perl 命令中。
    • 也许他是作为用户nobody运行的
    • 无论如何也不会做任何事情,man rm : --no-preserve-root : do not treat '/' specially
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

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

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

      【讨论】:

      • 在包含从用户处获得的数据的文件上运行system() 的例子很好。
      • 还有污点警告(-t)。他们警告同样的事情,但他们不会停止你的程序。从旧程序的那些开始。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多