防止使用PHP中的define和defined函数直接访问

问题描述:

我试图使用define函数和定义的函数来避免盗链/直接访问PHP脚本,但由于某种原因它不起作用。防止使用PHP中的define和defined函数直接访问

我遇到的问题是,它根本无法正常工作,即使我先访问index.php并按照链接和/或发布表单,我也会收到“Hotlinking is not allowed”消息。

这里是我想要做的一个例子:

的index.php

<?php 
define("ACCEPT",TRUE); 
?> 
<html> 
... 

core.php中

<?php 
if (defined('ACCEPT')) 
{ 
// ACCEPT is defined which means the user came here via index.php 
} 
else 
{ 
// The user is most likely direct accessing core.php, abort. 
echo "Hotlinking is not allowed"; 
exit; 
} 

请注意,后“防止直接访问,是否有可能欺骗一个PHP定义?”没有回答我的问题,也没有“定义和定义禁止直接访问”的帖子。

+0

如果您有不想直接访问的内容,请勿将其放入文档根目录。保持在外面。您仍然可以将其包含在其他脚本中。 – Brad

+0

不幸的是,我的主机不允许我访问任何东西,但public_html root =/ – Squeeze

+1

你应该得到一个新的主机!即使我的3美元/月。共享主机让我可以做到这一点。 5美元/月,你可以得到一个坚实的VPS。 – Brad

这是相当数量的程序。只要创建一个标题来检查定义,并在未定义的情况下重定向/退出。这样做没有任何问题,但它只是增加了每页所需的行数/代码量。这可能会令人困惑,因为DEFINE需要在一个地方,然后所请求的页面必须包含在内,或者需要包含具有该定义的页面。这完全是关于结构。

这里是你可以做的:

的.htaccess - 每到index.php

的index.php请求重定向 - 定义一个变量,充当获取/包括网页上显示路由器根据请求数据。

childpage.php - 检查变量是否存在(意思是包含它),然后做任何需要做的事情。

另一种选择是将敏感代码放在htaccess受保护的目录中。

你也可以使用一个框架来做很多事情。

或者,如果您的主机允许您编辑您的vhost配置,如果您只有权访问公共目录,他们可能不会这样做,您可以将文档根目录更改为更高的目录。

+0

你能否通过检查头文件来解释更多你的意思?我的意思是,你如何检查标题并使用define/defined – Squeeze

+0

忽略我的第一条评论,我明白你想说什么。 有没有其他方法可以使用定义函数?在我的情况下,使用include来建立index.php或core.php之间的连接将是愚蠢的。 – Squeeze