0

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

如何防止 PHP 中的跨域包含?一个就够了吗preg_match$_SERVER["HTTP_REFERER"]我的猜测是否定的。php.ini上有什么选项(如果有的话)可以防止这种情况发生?

谢谢你。

4

2 回答 2

3

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

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

事实上,即使您自己也无法include()使用您的 PHP 源文件,HTTP即使这两个文件都在同一台服务器上。任何通过 HTTP 和正常工作的启用 PHP 的网络服务器都不会将源代码发送到客户端。

例子:

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

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

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

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

即使您拥有这两个文件,这也不会包含任何源代码,它们位于同一服务器。这是因为当它通过 HTTP 提供服务时,代码已经被处理,并且正确配置的启用 php 的 web 服务器不会发送 php 源代码。sources.phpindex.php

于 2013-09-13T06:47:51.947 回答
0

您无法阻止人们下载您的 HTTP 资源并以他们喜欢的方式使用它们。(注意它们只能包含程序的输出,而不是 PHP 源代码)。

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

php.ini没有设置来防止这种情况。它允许您禁用在服务器上运行的脚本通过 HTTP 包含内容的能力但不能被包含在内。

于 2013-09-13T06:47:40.220 回答