防止PHP中的跨域包含

时间:2013-09-13 06:45:06

标签: php include cross-domain

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

如何防止PHP中的跨域包含? preg_match的{​​{1}}是否足够?我的猜测是否定的。 php.ini 上有什么选项可以阻止这个?

谢谢。

2 个答案:

答案 0 :(得分:3)

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

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

事实上,即使你自己也不能include()使用HTTP你的PHP源文件,即使这两个文件都在同一台服务器上。使用正常运行的PHP启用的Web服务器通过HTTP的任何内容都不会将源代码发送给客户端。

示例:

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

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

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

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

这将 NOT 包含sources.phpindex.php的所有源代码,即使您拥有这两个文件,它们也在同一台服务器上。这是因为当它通过HTTP服务时,代码已经被处理,并且正确配置的启用php的Web服务器将不会发送php源代码。

答案 1 :(得分:0)

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

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

php.ini无法阻止此操作。它允许您禁用在您的服务器上运行的脚本通过HTTP包含内容但不包含内容的功能。