【问题标题】:How should I, or should I use php functions considered "dangerous"?我应该如何,或者我应该使用被认为是“危险”的 php 函数?
【发布时间】:2011-09-06 01:43:37
【问题描述】:

几天前我参加了一个研讨会,他们在谈论“危险”的 PHP 函数。然而,他们没有说我们应该使用它们。他们命名为eval()preg_match()exec() 等等。

虽然我不使用它们,或者不经常使用它们,但有时我不得不使用它们。使用这些功能是否被认为是不好的做法?即使我知道我使用它们的地方没有用户可以到达它?

编辑: 对于 preg_match() 问题,请查看: preg_match() security hole

【问题讨论】:

  • 他们有没有提到为什么preg_match() 会很危险?其他两个很明显,因为它们允许您在主机上调用任意程序,但我不清楚这个。
  • preg_replace 在您使用 e 修饰符时可能很危险,因为这意味着 eval() 替换(查看 modifiers section on PCRE。不过,此标志仅适用于 preg_replace。不确定如果@edem 的意思是preg_replace 而不是preg_match,或者如果preg_match 存在某种我不知道的危险。
  • 请参阅 http://stackoverflow.com/questions/951373/when-is-eval-evil-in-php/951868#951868 以获取 eval。总而言之,任何能够在系统级别执行 s/t 的函数(如exec)在使用未经处理的用户输入时都可能被视为邪恶。不过,我不知道他们为什么认为preg_match 是邪恶的(除了已经提到的 Carlos 之类的 e 标志)。
  • 不好的做法是使用它们而不知道它们的用途。没有“危险”的 PHP 函数,只有以错误的方式使用它们然后认为这可能是“危险的”的人。

标签: php


【解决方案1】:

所有这些方法基本上都允许注入的代码在你的系统上运行,如果你不保护它。如果您在不知道危险是什么的情况下使用它们,您可能会在自己的脚下开枪。如果您完全清楚自己在做什么,并且除了使用这种方法别无选择,那么无论如何您都无能为力。

这个问题有一个非常全面的 PHP 可利用函数列表

Exploitable PHP functions

【讨论】:

    【解决方案2】:

    这真的是品味问题。真的只是有足够的绳子来吊死自己。只要你 100% 确定没有用户可以直接输入 evalexec 语句,你可能没问题,但很难证明不应该有不同的、更安全的方法做你想做的事。

    【讨论】:

      【解决方案3】:

      如果您的服务器曾经受到威胁,可能是来自安全性较差的表单的代码注入攻击或 include() 调用,那么一些很少使用但非常强大的 php 函数会使攻击者通过 exec( ),因此您可以在您的 ini 文件中完全阻止这些功能。

      引用 php.ini

      ;该指令允许您禁用某些功能以确保安全 ;reasons.It 接收以逗号分隔的函数列表 ;名字。该指令受安全模式是否启用的影响 ;打开或关闭。 disable_functions =

      编辑 JohnP 的链接列出了您应该警惕的所有功能

      【讨论】:

        【解决方案4】:

        没有所谓的“危险”功能。有

        • 不正确处理用户输入的草率程序员
        • 马虎的系统管理员,他们不在系统级别保护他们的服务器

        如果您不采取足够的安全措施,每个 php 函数都可能是“危险的”。这包括“echo”(XSS)、“mail”(主要注入)、文件函数(例如 readfile(/etc/passwd) 等。

        【讨论】:

        • 每个 php函数都可能很危险,真的吗? is_int() 有危险吗?
        【解决方案5】:

        这是作者询问为什么 eval 很危险的帖子: http://blog.joshuaeichorn.com/archives/2005/08/01/using-eval-in-php/,请阅读 answears,这里是另一篇有趣且简短的文章: http://www.hardened-php.net/suhosin/a_feature_list:eval_black_and_whitelist.html

        恕我直言,问题在于,如果您使用 eval 或 exec 之类的函数,您需要 100% 了解传递给它们的变量。如果该 exec 可以在您的操作系统中“嵌入”它,那将是非常危险的。

        • exec-Personaly 我仅将 exec 用于不依赖于用户输入或不受信任数据的作业。
        • eval - 使代码难以理解,难以开发,并且通过使用它,一段时间后您可能会遇到真正的问题来发现潜在的问题。接缝也很难测试...
        • preg_match-only 我知道的问题在这里:http://blog.php-security.org/archives/76-Holes-in-most-preg_match-filters.html

        问候, 汤姆

        【讨论】:

          【解决方案6】:

          嗯...我不认为preg_match 是那么“危险”的东西。另一方面,evalexec 有点糟糕。尤其是exec,它甚至在托管服务器上大多被禁止,因为它增加了非常巨大的安全风险。

          【讨论】:

          • 我说“所以”,我没有说它根本不是 :) 在 preg_match 上使用 /e 很少用于不写成漏洞利用的代码...很多人试图找到任何可能的方式来损害某人的网站,但是比较preg_matchexec,我不认为preg_match 是最糟糕的。为了安全......好吧,很多php函数都存在安全漏洞:)
          猜你喜欢
          • 2011-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-09
          • 1970-01-01
          • 1970-01-01
          • 2019-12-14
          • 1970-01-01
          相关资源
          最近更新 更多