禁用不安全/危险的 PHP 函数

信息安全 应用安全 Web应用程序 php 源代码
2021-09-05 01:35:20

通常,我的工作描述限制我对 Web 应用程序进行代码审查。最近,我被要求协助一些服务器端 PHP 优化,虽然我很熟悉,但我缺乏经验。

我遇到了一个名为的配置设置:

disable_functions

使用此设置是否有任何我应该注意的含义(除了明显的函数 x() 将被禁用并且任何使用函数 x() 的应用程序将无法工作)?

如果这是我应该利用的东西,我可以列出许多可能很危险的功能,但无论如何有些功能可能是必要的。有没有人有一个列表,或者有一些建议可以添加到哪些功能应该被禁用,为什么我会错过/忽略一些?

任何见解都将不胜感激,因为尽管我知道很多不安全的功能,但我缺乏服务器配置经验。

编辑:为了澄清关于这是开题还是离题的任何问题,我被要求协助优化 PHP 环境以提高安全性,但我特别询问上述配置设置。:)

4个回答

这里有很多事情必须要理解:

  1. 危险的 PHP 函数列表位于此处: http: //php.net/manual说真的,只要有正确的上下文,几乎任何 PHP 函数都可能是危险的。strlen和 like 可能是安全的,但如果其余代码不安全,任何与外界对话的功能都会带来惊喜。
  2. 如果你想保护网站,安全应该贯穿整个代码,只是在这里禁用一些功能,那里是行不通的,只会让你失明并导致编码草率。
  3. PHP 中有一些功能可以帮助您编写更安全的代码,但是它们不会从不安全的代码中生成安全代码。open_basedirallow_url_fopen为例。
  4. 您可以使用disable_functions来禁止某些您认为危险的操作,但是只能通过这种方式禁止某些类别的操作。例如,您可以禁用exec,shell_exec,popen,passthru,proc_open,system,pcntl_exec,这可能会阻止从您的代码运行外部程序 - 但这些程序所做的大部分事情也可以通过 PHP 方式完成。并且试图避免诸如“写入文件”之类的事情可能行不通——你应该通过操作系统权限来做,而不是通过 PHP。所以,首先明确你想禁止什么,然后看看它是否可能——同时记住它可能是不可能的。
  5. 阅读PHP 手册中的安全章节阅读一些PHP 安全书籍不幸的是,仅通过设置来完成安全性security=Onphp.ini

您唯一需要担心的问题是禁用实际需要的功能。禁用功能绝对有助于防止滥用。确实有一些函数,如 exec、shell_exec 等,几乎不应该在共享主机环境中使用。

与其仅仅依赖这个函数,不如考虑在一般安全性上工作。例如,如果您使用 suPHP 或类似工具,您可以防止一大堆攻击,并使保护事情变得更容易一些。禁用功能应该是您最不担心的事情,在您担心之前,您的服务器应该是安全的。

如果您正在托管一个网站或 Web 服务器,那么 PHP 中有一些功能可用于使用 PHP 脚本利用该网站或 Web 服务器,并且使用此危险功能,黑客可以完全控制 Web 服务器,直至根级别。

PHP开发中的危险函数列表

“apache_child_terminate,apache_setenv,define_syslog_variables,escapeshellarg,escapeshellcmd,eval,exec,fp,fput,ftp_connect,ftp_exec,ftp_get,ftp_login,ftp_nb_fput,ftp_put,ftp_raw,ftp_rawlist,highlight_file,ini_alter,ini_get_all,ini_restore,pass_rucode,openpconnect,login ,php_uname,phpAds_remoteInfo,phpAds_XmlRpc,phpAds_xmlrpcDecode,phpAds_xmlrpcEncode,popen方法,posix_getpwuid,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,posix_setuid,posix_uname,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,了shell_exec,系统日志,系统,xmlrpc_entity_decode”

如何在 PHP 中禁用危险函数

  1. 找到您的"php.ini"文件。
  2. 然后找到 disable_functions=
  3. 然后将上述所有功能添加到 disable_functions 中,例如

    disable_functions="评估,系统"

^^ 在这里我只禁用了 2 个功能,您可以通过将功能列表提供给 disable_functions="要禁用的功能列表,以逗号分隔" 来禁用任意数量的功能

如果您想了解上述每个功能的确切含义,请在此处搜索上述功能

http://in2.php.net/manual/en/function.system.php

不要将 disable_functions 视为安全功能。

请参阅我之前对 stackoverflow 上一个不同问题的回答——即使 PHP 也不认为disable_functions和类似作为真正的安全功能。