PHP安全核心配置

PHP安全核心配置

PHP配置文件指令多达数百项,为了节省篇幅,这里不对每个指令进行说明,只列出会影响PHP脚本安全的配置列表以及核心配置选项。

详细参阅官方文档,关于php.ini的配置选项列表。

allow_url_include

如果服务端开启了远程文件包含选项allow_url_include,我们甚至可以直接远程执行PHP代码。但是,这些PHP默认自带的wrapper和filter都可能通过php.ini配置禁用,所以在具体情况还要具体分析。尝试实例,修改php.ini文件,将其设置为on,然后重启apache服务器重新读取php配置。

allow_url_include=On

源网站test的index.php如下

<!-- index.php -->
<?php
if (isset($_GET['file'])) {
    $file = $_GET['file'];
} else {
    $file = "test.txt";
}
include $file;
?>

另一个网站test1的index.php如下

<!-- index.php -->
<?php
echo "ok";

在test站点传递file参数http://test/?file=http://test1/index.php,就能看到页面回显了ok,远程读取并执行了test1的index.php,这个配置选项对于PHP安全的影响不可小觑,在使用的时候必须慎之又慎。

open_basedir

open_basedir将 PHP 可以访问的文件限制在指定的目录树中,包括文件本身。当脚本尝试访问文件系统时,例如使用 include 或 fopen() 时,将检查文件的位置。当文件位于指定的目录树之外时,PHP 将拒绝访问它。在 Windows 中,用分号分隔目录。在所有其它系统上,用冒号分隔目录。现在 Apache 模块将自动继承来自父目录的open_basedir路径。需要注意的点是,open_basedir指定的限制是目录名称,而不是前缀。

例如,修改php.ini

open_basedir = D:\phpstudy_pro\WWW\test\a

a目录下的test.php如下

<!-- test.php -->
<?php
echo file_get_contents('../ac/test.txt');

重启web服务器,进入网页,发现访问被拒绝了。

f3f07fa554de

当使用open_basedir配置目录后,执行脚本访问其他文件都需要验证文件路径,因此在执行效率上面也会有⼀定的影响。   

disable_functions

本指令可用于禁止某些函数。接受逗号分隔的函数名列表作为参数。此指令只能限制内置函数,对用户定义的函数无效。

例如在其中禁用phpinfo函数

disable_functions = phpinfo

在index.php当中调用phpinfo函数,在网页当中报错

79fc5d56c890

display_errors与error_reporting

该选项设置是否将错误信息作为输出的一部分打印到屏幕,或者对用户隐藏。这是辅助开发的功能,不应在生产系统中使用 (例如连接到互联网的系统)。设置为Off时,将不会对用户显示错误信息。

error_reporting用于设置错误报告级别。该参数可以是表示二进制位字段的任意整数或者常量名称。error_reporting 级别和常量是在预定义常量和php.ini中进行了说明。在程序运行时可以通过error_reporting进行设置。在设置display_errors=On时,还可以配置error_reporting,用来配置错误显示的级别。

------本页内容已结束,喜欢请分享------

文章作者
能不能吃完饭再说
隐私政策
PrivacyPolicy
用户协议
UseGenerator
许可协议
NC-SA 4.0


© 版权声明
THE END
喜欢就支持一下吧
点赞21赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片