繁体   English   中英

防止跨域包含在PHP中

[英]Prevent cross-domain include in PHP

我想这个问题已经被问到了,但是我找不到,所以对最后的重复很抱歉。 我只发现相反的情况。

如何防止跨域包含在PHP中? $_SERVER["HTTP_REFERER"]preg_match是否足够? 我的猜测不是。 为了防止这种情况, php.ini上的选项是什么?

谢谢。

这已经是不可能的,因此您不必担心。 PHP包含的源代码无法通过HTTP处理。 仅当它们在同一服务器上时,才可以包括它们。 没有人可以仅使用其URL将PHP源文件包含在其网站中。 这两个脚本必须在同一服务器上

如果通过HTTP包含PHP源文件,则包含方将仅看到PHP文件生成的输出,而不是其源代码。

实际上,即使您自己也无法使用HTTP include() PHP源文件,即使两个文件都在同一服务器上。 任何通过HTTP正常运行且已启用PHP的Web服务器的任何操作都不会将源代码发送到客户端。

例:

假设您有一个example.com网站,并且位于index.php并且必须包含位于同一目录中的sources.php 如果你试试

include("sources.php");  //or "/path/to/your/root/sources.php"

这将按预期工作,并将包含源代码。 但是如果你尝试

include("http://www.example.com/sources.php");

即使您同时拥有这两个文件,它们也不会包含来自sources.php任何源代码到您的index.php ,即使它们都在同一服务器上。 这是因为当通过HTTP提供服务时,代码已被处理,并且正确配置的启用php的网络服务器将不会发送php源代码。

您不能阻止人们下载您的HTTP资源并随意使用它们。 (请注意,它们只能包含程序的输出 ,而不能包含PHP源代码)。

您可以设置障碍(例如检查HTTP请求中的用户代理字符串),但是它们很容易被绕开。

php.ini没有设置可以防止这种情况。 它可以让你用来禁止包括通过HTTP内容服务器上运行脚本的能力,但没有被包括在内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM