【北京网站制作】PHP安全配置详解
  • 更新时间:2024-04-29 07:39:27
  • 网站建设
  • 发布时间:1年前
  • 374

PHP安全配置详解

毫无疑问,PHP是一种非常强大的服务器端脚本语言,但是强大的功能总是伴随着重大的危险。在本章中,您将学习使用PHP 的安全模式来预防PHP 的一些潜在危险。  【 安全模式 】

PHP 的安全模式在存在多个用户帐户的PHP 开放Web 服务器上提供了一个基本安全的共享环境。当Web 服务器以安全模式运行PHP 时,某些功能会被完全禁用,某些功能会受到限制。  [ 使用安全模式来强制限制 ]

在安全模式下,一些试图访问文件系统的功能将被限制。运行web服务器用户ID,如果要对某个文件进行操作,必须有读写该文件的访问权限。 PHP实现这个限制功能是没有问题的。

开启安全模式后,当试图读写本地文件时,PHP会检查当前访问用户是否为目标文件的所有者。如果不是所有者,则禁止操作。 (写权限:在较低级别的文件访问权限下,可能允许读取或写入系统操作系统的文件,通过PHP的安全模式实现防止你操作其他用户文件的操作。当然,a Web 服务器可能可以访问具有全局写权限的任意文件。)  当安全模式打开的时候,以下函数列表的功能将会受到限制:

chdir, move_uploaded_file, chgrp, parse_ini_file, chown, rmdir, copy, rename, fopen, require, highlight_file, show_source, include, symlink, link, touch, mkdir, 取消链接

同样,某些PHP 扩展中的函数也会受到影响。 (加载模块:dl功能在安全模式下会被禁止,如果要加载扩展,只能修改php.ini中的扩展选项,PHP启动时加载)

开启PHP安全模式后,需要执行操作系统程序时,必须是safe_mode_exec_dir选项指定目录下的程序,否则会执行失败。即使允许执行,也会自动传递给escapeshellcmd函数进行过滤。

以下执行命令的函数列表将受到影响:

exec, shell_exec, passthru, 系统, popen

此外,后退标记运算符(`) 也将被关闭。

在安全模式下运行时,putenv 函数将不起作用,但不会导致错误。同样,其他一些试图改变PHP环境变量的函数set_time_limit、set_include_path也会被忽略。  [ 打开安全模式 ]

开启或关闭PHP的安全模式是使用php.ini中的safe_mode选项。如果要为所有当前共享Web 服务器用户激活安全模式,只需将配置选项设置为: safe_mode=On 当函数访问文件系统时,将执行文件所有者检查。默认情况下,当您可以更改由safe_mode_gid 选项指定的文件所有者的组ID (GID) 时,会检查文件所有者的用户ID。如果你的系统上有共享库文件,当你遇到需要include或者require的时候,那么你可以使用safe_mode_include_dir选项来设置你的路径,以保证你的代码正常工作。 (包含路径:如果想使用safe_mode_include_dir选项来包含更多的包含路径,那么可以使用和include_path选项相同的选项,在Unix/Linux系统下用冒号隔开,在Windows下用分号隔开)例如,如果你想在安全模式下包含/usr/local/include/php 下的文件,那么你可以设置选项:选项。比如你需要/usr/local/php-bin路径下的文件可执行,那么你可以设置选项为:safe_mode_exec_dir=/usr/local/php-bin(可执行:如果你执行的程序是在/usr/bin 目录下,然后你可以将这些二进制文件连接到你指定的选项下可以执行的路径)如果你想设置一些环境变量,你可以使用safe_mode_allowed_env_vars 选项。该选项的值是环境变量的前缀。默认是允许以PHP_ 开头的环境变量。如果你想改变它,你可以设置这个选项的值。使用逗号分隔多个环境变量前缀。比如下面允许时区的环境变量TZ,那么修改这个选项的值:safe_mode

_allowed_env_vars = PHP_,TZ【 其他的安全特征 】除了安全模式以外,PHP还提供了许多其他许多特征来保证PHP的安全。

  [ 隐藏PHP ]

  你能够在php.ini里使用 expose_php 选项来防止Web服务器泄露PHP的报告信息。如下:expose_php = On利用整个设置,你能够阻碍一些来自自动脚本针对Web服务器的攻击。通常情况下,HTTP的头信息里面包含了如下信息:Server: Apache/1.3.33 (Unix) PHP/5.0.3 mod_ssl/2.8.16

  OpenSSL/0.9.7c在 expose_php 选项打开以后,PHP的版本信息将不包含在上面的头信息里。当然,用户访问网站的时候同样能够看到 .php 的文件扩展名。如果你想整个的使用不同的文件扩展名,你需要在 httpd.conf 中找到如下这行:AddType application/x-httpd .php你就可以修改 .php 为任何你喜欢的文件扩展名。你能够指定任意多个的文件扩展名,中间使用空格进行分割。如果你想在服务器端使用PHP来解析 .html 和 .htm 文件的时候,那么你设置选项如下:AddType application/x-httpd .html .htm(解析HTML:配置你的Web服务器使用PHP去解析所有的HTML文件,但是如果非服务器端代码也需要PHP去解析,会影响服务器的性能。静态页面你可以使用不同的扩展名,这样能够消除对PHP脚本引擎的依赖,增强性能。)

  [ 文件系统安全 ]

  安全模式限制了脚本所有者只能访问属于自己的文件,但是你可以使用 open_basedir 选现来指定一个你必须访问的目录。如果你指定了一个目录,PHP将拒绝访问除了该目录和该目录子目录的其他目录。open_basedir 选项能够工作在安全模式之外。限制文件系统只能访问 /tmp 目录,那么设置选项为:open_basedir = /tmp[ 函数访问控制 ]你能够在 disable_functions 选项中使用逗号分割来设定函数名,那么这些函数将在PHP脚本中被关闭。这个设置能够工作在安全模式之外。disable_functions = dl当然,同样的你能够使用 disable_classes 选项来关闭对一些类的访问。

标签:北京网站制作 高端网站建设

我们专注高端建站,小程序开发、软件系统定制开发、BUG修复、物联网开发、各类API接口对接开发等。十余年开发经验,每一个项目承诺做到满意为止,多一次对比,一定让您多一份收获!

本文章出于推来客官网,转载请表明原文地址:https://www.tlkjt.com/web/13833.html

在线客服

扫码联系客服

3985758

回到顶部