PHP安全知识普及黑客常利用

PHP安全知识普及黑客常利用

PHP安全知识普及黑客常利用

PHP 的动态功能还使其成为潜在的安全风险,因为将从 Internet 上的任意位置主动获取、接收和处理数据。攻击者可能会尝试发送恶意数据和脚本,并诱使您的服务器获取恶意脚本并运行那些脚本。攻击者还可能尝试在您的服务器上读取和写入文件以控制网站并将其用于实现自己的其他目的。

您可以配置 PHP 设置以增强 PHP 安装的安全性并帮助保护网站免受恶意攻击。Php.ini 文件指定 PHP 在网站上运行时使用的配置设置。Php.ini 文件可确定允许 PHP 脚本执行哪些操作以及禁止这些脚本执行哪些操作。

本节介绍有助于保护您的 PHP 应用程序的配置设置。

allow_url_fopen = Off
allow_url_include = Off

此设置非常重要,因为它可以阻止在 include() 等语句中使用 URL。将 allow_url_fopen 设置为“Off”,意味着只能包含驻留在您的网站中的文件。您不能包含来自其他服务器的文件,而其他人也不能通过远程文件包含 (RFI) 攻击做到这一点。在 RFI 攻击中,某些人会在 HTTP 请求中嵌入 URL,旨在诱使您的脚本运行其 URL。例如,不允许执行诸如include("http://website.com/page.php") 这样的命令。

通过指定您网站中的文件的路径和文件名来包含该文件。例如,如果您有一个 URL include 行,则将其转换为:include($_SERVER['DOCUMENT_ROOT'] . '/page.php');

代码段 $_SERVER['DOCUMENT_ROOT'] 是针对您网站的根文件夹的超全局变量集。(请注意,没有尾随“/”;您必须在“/page.php”中提供前导“/”。)

如果您希望包含来自另一个网站的静态内容(如 include('http://myothersite.com/includes/footer.php')),请在当前网站中创建该内容的副本,然后本地包含它。

register_globals = Off

此设置使攻击者难以在您的脚本中插入代码。例如,在 URL http://site.com/index.php?variable=value 中,当 register_globals 为 On 时,该变量将传入您的脚本中,其值设置为value。但是,当 register_globals 为 Off 时,变量不会自动传入您的脚本的变量列表中。

open_basedir = "c:\inetpub\"

此设置限制 PHP 脚本访问指定基目录外部的文件。

safe_mode = Off
safe_mode_gid = Off

此设置限制运行 PHP 脚本所需的权限。当 safe_mode 设置为“On”时,许多第三方脚本无法正常运行。请注意,以 PHP 6 开头的 safe_mode 不存在。

max_execution_time = 30
max_input_time = 60

这些设置控制允许脚本运行和分析用户输入使用的时间(以秒为单位)。这些设置有助于阻止将编写很差的脚本输入服务器中。

memory_limit = 16M
upload_max_filesize = 2M
post_max_size = 8M
max_input_nesting_levels = 64

这些设置可帮助有效管理内存和输入/输出。此外,它们还可以阻止编写很差的脚本占用内存和处理大量文件。

display_errors = Off
display_startup_errors = Off log_errors = On
error_log = "C:\path\of\your\choice"

这些设置指定所有错误和警告已记录到您的错误日志文本文件中,并指定不会在从您的服务器中发送出的任何网页上显示这些错误或警告。不应公开显示错误,因为这会让一些人了解如何攻击您的服务器。在测试新代码时,始终查看您的错误日志。

fastcgi.impersonate = 1

此设置使 IIS 能够模拟调用客户端的安全令牌并定义用于运行请求的安全上下文。

fastcgi.logging = 0

当 PHP 使用 FastCGI 协议在 stderr 上发送任何数据时,FastCGI 模块将无法请求。禁用 FastCGI 日志记录将阻止 PHP 通过 stderr 发送错误信息,并为客户端生成 500 响应代码。

expose_php = Off

利用此设置,传出页附带的标头不会显示 PHP 正在运行,也不会显示 PHP 的版本。

 

提高您的 Web 应用程序的安全性的最有效方式之一是将其与您的 Web 服务器上的其他应用程序隔离开。应用程序池具有其自己的工作进程,该进程处理请求并运行应用程序代码。该工作进程具有安全标识符 (SID)。每个应用程序池均有一个唯一的应用程序池标识。默认情况下,当您创建 Web 应用程序时,还将创建一个新的名称与该应用程序相同的应用程序池。如果您将 Web 应用程序放置在单独的应用程序池中,则可将它们相互隔离开。

Web 应用程序隔离必须包括以下内容:

  • 网站隔离:将不同的应用程序分离到不同应用程序池中的不同网站中。
  • 最小特权:以每个网站唯一的低特权标识(虚拟应用程序池标识)运行您的工作进程。
  • 临时隔离:每个网站设置一个独立的 PHP 临时文件夹并且只提供对相应进程标识的访问权限。
  • 内容隔离:确保在每个网站根目录上设置 ACL(访问控制列表)以仅允许访问相应进程标识。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据