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