我想这个问题已经被问过了,但我找不到,所以我很抱歉最终重复。我只发现了相反的情况。
如何防止 PHP 中的跨域包含?一个就够了吗preg_match
?$_SERVER["HTTP_REFERER"]
我的猜测是否定的。php.ini上有什么选项(如果有的话)可以防止这种情况发生?
谢谢你。
我想这个问题已经被问过了,但我找不到,所以我很抱歉最终重复。我只发现了相反的情况。
如何防止 PHP 中的跨域包含?一个就够了吗preg_match
?$_SERVER["HTTP_REFERER"]
我的猜测是否定的。php.ini上有什么选项(如果有的话)可以防止这种情况发生?
谢谢你。
这已经是不可能的,因此您无需担心。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.php
index.php
您无法阻止人们下载您的 HTTP 资源并以他们喜欢的方式使用它们。(注意它们只能包含程序的输出,而不是 PHP 源代码)。
您可以设置障碍(例如检查 HTTP 请求中的用户代理字符串),但它们很容易绕过。
php.ini
没有设置来防止这种情况。它允许您禁用在服务器上运行的脚本通过 HTTP 包含内容的能力,但不能被包含在内。