include()为什么不使用它?

ali*_*iov 5 php security function

我正在编写2003年编写的一本较旧的php mysql书.作者使用include()函数通过包含header.inc,footer.inc,main.inc文件等来构造html页面.现在我发现这不是在我从服务器收到很多警告后,允许在默认的ini设置中(allow_url_include设置为Off).

我还注意到你可以使用包含括号的include.我试过这个并且它可以工作,我没有收到任何错误消息或警告.两者有什么不同?也就是说,include()include不同?

Pek*_*ica 16

这是一种误解.您可以关闭包含远程文件(使用URL http://www.example.com/include.php而不是文件系统路径).您始终可以包含本地文件.

后者是因为include不是正常的功能,而是语言结构.比如die,它可以与括号一起使用或不与括号一起使用.资料来源:手册

因为include()是一种特殊的语言结构,所以在其参数周围不需要括号.比较返回值时要小心.


roo*_*ook 4

使用 include() 可能会引入本地文件包含 (LFI) 或远程文件包含 (RFI) 漏洞。您应该尝试避免使用 include,例如,如果您要包含 HTML,那么编写print(file_get_contents($file))include($file). 然而include(),在大多数 PHP 应用程序中,为了减少代码重复,需要对 PHP 文件进行处理。

即使远程文件包含被禁用,它仍然可以使用高级 LFI 攻击来利用系统。

如果您确实需要接受 中的用户输入include(),那么您应该确保它位于白名单中:

$good_includes=array("contact","home","view");
if(in_array($_GET[page],$good_includes)){
    include("inc/".$_GET[page].".php");
}
Run Code Online (Sandbox Code Playgroud)