避免文件包含漏洞—Hack之路

避免文件包含漏洞

在PHP项目中文件包含漏洞常出现在include(),include_once(),require(),require_once(),spl_autoload()等函数的调用中,下面是各个函数的含义

include()函数
include()包含指定文件,被包含文件先按参数给出的路径寻找。如果没有给出目录(只有文件名),则按照include_path指定的目录寻找。如果在include_path下没找到该文件,则include最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件,则include结构会发出一条警告。当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。所有在包含文件中定义的函数和类都具有全局作用域。

include_ once()函数
include_ once()函数的作用与include相同,不过它会首先验证是否以及包含了该文件。如果已经包含,则不再执行include_once。否则,必须包含该文件

require()函数
require和include几乎完全一样,除了处理失败的方式不同之外。require在出错时产生E_COMPILE_ERROR级别的错误。换句话说,就是require将导致脚本中止,而include只产生警告(E_WARNING),脚本会继续运行

require_once()函数
语句和require语句几乎相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再包含

spl_autoload()函数
vuid spl_autoload (string $class_name [,string $file_extensions])
本函数提供了_autoload()的一个默认实现。如果不使用任何参数调用autoload_register()函数,则以后在进行_autoload()调用时会自动使用此函数。
在使用上述函数时要注意以下问题。
(1)保证接收的用户参数不可构造文件路径
(2)禁用远程访问,修改php配置
(3)指定默认文件名称和路径,不允许用户自行传递文件名称
(4)使用basename进行过滤

网站地址:https://www.hackzl.cn;发布者:hack之路,转转请注明出处:https://www.hackzl.cn/index.php/2020/09/27/%e9%81%bf%e5%85%8d%e6%96%87%e4%bb%b6%e5%8c%85%e5%90%ab%e6%bc%8f%e6%b4%9e-hack%e4%b9%8b%e8%b7%af/

发表评论

邮箱地址不会被公开。 必填项已用*标注