我想知道我的代码是否安全以及是否有其他更安全的替代方法来包含外部文件..
所以这是我的代码示例,它安全吗?我怎样才能让它更安全?谢谢!
<?php switch($_GET['p']){
case 'test1':
include 'test1.php';
break;
case 'test2':
include 'test2.php';
break;
case 'test':
echo 'something';
include 'pages/test.php';
echo 'something';
break;
default:
include 'main.php';
break;
} ?>
最佳答案
你的代码没问题。由于文件名是硬编码的,因此有条件地包含文件没有问题,就像您正在做的那样。当包含的文件基于用户未净化的值时,会出现此问题。例如
include $_GET['p'];
可以包含用户想要的任何内容(根据 PHP 设置,它还可以包含其他域中的文件)
其他选项是你正在做的事情的变体
如果文件不存在,require
和 require_once
将失败。 inlucde_once
和 require_once
确保文件只包含一次,因此如果该文件已包含在程序的其他地方,则不会包含。
include_once 'myfile.php';
include_once 'myfile.php'; //does nothing as the file is already included
如果你有使用类,还有autoloader的选项.从您的应用程序的外观来看,您必须重新构建它才能使用它。
关于PHP include() 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617556/