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

时间:2013-12-12 04:00:32

标签: php

我正在尝试使用define函数和已定义的函数,以避免热链接/直接访问PHP脚本,但由于某种原因它不起作用。

我遇到的问题是它根本无法正常工作,即使我先访问index.php并按照链接和/或帖子表单,我也会收到“不允许热链接”的消息。

以下是我正在尝试做的一个例子:

的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定义?”我没有回答我的问题,也没有“定义和定义禁止直接访问”的帖子。

1 个答案:

答案 0 :(得分:2)

这是相当数量的计划所做的事情。只需创建一个检查定义的标头,如果未定义则重定向/退出。这样做是没有错的,但它只会增加每个页面所需的行数/代码量。这可能会让人感到困惑,因为DEFINE需要位于一个地方,然后必须包含所请求的页面,或者需要包含具有该定义的页面。这完全是关于结构。

您可以做以下事情:

.htaccess - 将每个请求重定向到index.php

index.php - 定义变量,充当路由器,根据请求数据获取/包含要显示的页面。

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

另一种选择是将敏感代码放在am htaccess protected目录中。

您也可以使用框架来完成大量工作。

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