防止使用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定义?”没有回答我的问题,也没有“定义和定义禁止直接访问”的帖子。
答
这是相当数量的程序。只要创建一个标题来检查定义,并在未定义的情况下重定向/退出。这样做没有任何问题,但它只是增加了每页所需的行数/代码量。这可能会令人困惑,因为DEFINE需要在一个地方,然后所请求的页面必须包含在内,或者需要包含具有该定义的页面。这完全是关于结构。
这里是你可以做的:
的.htaccess - 每到index.php
的index.php请求重定向 - 定义一个变量,充当获取/包括网页上显示路由器根据请求数据。
childpage.php - 检查变量是否存在(意思是包含它),然后做任何需要做的事情。
另一种选择是将敏感代码放在htaccess受保护的目录中。
你也可以使用一个框架来做很多事情。
或者,如果您的主机允许您编辑您的vhost配置,如果您只有权访问公共目录,他们可能不会这样做,您可以将文档根目录更改为更高的目录。
如果您有不想直接访问的内容,请勿将其放入文档根目录。保持在外面。您仍然可以将其包含在其他脚本中。 – Brad
不幸的是,我的主机不允许我访问任何东西,但public_html root =/ – Squeeze
你应该得到一个新的主机!即使我的3美元/月。共享主机让我可以做到这一点。 5美元/月,你可以得到一个坚实的VPS。 – Brad