一)事理
在通过做事器脚本的函数引入文件时,由于传入的文件名没有经由合理的校验,从而操作了预想之外的文件,导存问外的文件透露、恶意代码实行等。
本地文件包含(Local File Inclusion,LFl),通过PHP的包含函数即: require( )、require_once( ).include( )和include_once( )来利用。
二)、成因
一样平常情形下,用户通过包含函数将具有特定功能的函数或类包含到当前脚本中,是没有什么问题的。但是有时候,为了方便,须要动态地包含文件,这就会留下一些攻击漏洞。
三)、·防护方法
1、对严格判断包含的参数是否外部可控,由于文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部掌握;
2、路径限定:限定被包含的文件只能在某一文件夹内,一定要禁止目录跳转字符,如:"../”;
3、包含文件验证:验证被包含的文件是否是白名单中的一员;
4、只管即便不要利用动态包含,可以在须要包含的页面固定写好,如: include("head.php")。
二、远程文件包含
一)、远程文件包含(Remote File Inclusion,RFI)同样通过如下函数即:require(),require_once(),include()和include_once()来利用。
若PHP的配置选项allow_url_include设置为ON,则include/require函数即可加载远程文件,这种漏洞被称为远程文件包含漏洞。
二)、防护方法
1、非必须的情形下设置allow_url_include和allow_url_fopen为Off状态;
2、对可以包含的文件进行限定,可以利用白名单的办法,或者设置可以包含的目录,如open_basedir;
3、只管即便不该用动态包含;
4、严格检讨变量是否已经初始化。