php:
文件包含引起的原因是:
include
requre
requre_once
include_once 函数
服务器包含文件时,不管文件后缀名是不是php都会当作php文件进行执行,如果确实是php文件就会执行php文件内容,否则打印文件内容出来。
本地文件包含 只需要知道路径和拥有读取其他路径的权限
远程文件包含 需要allow_url_include allow_url_fopen两个选项
PHP5.2开始:allow_url_include就默认为Off了,而allow_url_fopen一直是On
禁止了PHP的allow_url_fopen和allow_url_include功能,
其实也不能完全阻止远端调用及其所带来的安全隐忧,而且它们只是保护了标记为URL的句柄,
也就是说只能影响http(s)和ftp(s)的调用, 但对包含其他标记的远端调用,例如对PHP5.2.0
新版所提供的php和data则无能为力,而这些调用一样会导致注入风险
allow_url_fopen = On php 4.0.3以后才有的选项 可以读取http ftp等远程url文件,> 本选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件。默认的封装协议提供用 ftp 和 http 协议来访问> 远程文件> ,一些扩展库例如 > zlib> 可能会注册更多的封装协议。 Windows 版在 PHP 4.3.0 之前,以下函数不支持远程文件访问:include,include_once, require,require_once 和GD 和图像处理 函数中的 imagecreatefromXXX 函数。
allow_url_include
boolean
This option allows the use of URL-aware fopen wrappers with the following functions: include, include_once, require, require_once.
注意: This setting requires allow_url_fopen to be on.
fopen可以加载远程文件,include则是用include require函数的方法加载远程文件,使用前提是fopen必须打开