文件包含漏洞(File Inclusion)
定义
文件包含漏洞,是指当服务器开启php配置(php.ini)中的allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
分类
本地文件包含
在网站服务器的本身存在恶意文件,然后在本地包含使用。
远程文件包含
在服务器的php配置中开启了allow_url_open选项,服务器会允许包含远程服务器上的文件。
函数介绍
- include():执行到include()时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行
- require():只要程序一运行就包含文件,找不到被包含文件时会产生致命错误,停止脚本执行
- include_once() / require_once():若文件中代码已被包含则不会再次包含
防御原理
- 严格判断包含的参数是否外部可控
- 路径限制:限制被包含文件只能在某一文件夹内,禁止目录跳转字符(如:…/)
- 包含文件验证:验证被包含文件是否在白名单内