如何防止直接访问PHP页面?

时间:2012-05-15 01:53:56

标签: php javascript ajax token

以下是我作为AJAX脚本的一部分使用的javascript片段。如何防止直接访问user_back_end_friends.php?我不希望人们能够访问domain.com/user_back_end_friends.php并查看朋友列表。

Javascript代码:

<script type="text/javascript">
    $(document).ready(function() {
        $("#user_friends").tokenInput("/user_back_end_friends.php", {
            theme: "sometheme", userid: "<?php echo $id; ?>"
        });
    });
</script>

这是我发现但不确定如何使用上面的javascript代码实现它:

我在我需要调用它的页面中使用它:

$included=1;include("user_back_end_friends.php");

当我必须阻止直接访问时,我使用:

if(!$included){ die("Error"); }

但是如何在我的javascript代码中添加这个$ include部分脚本?

3 个答案:

答案 0 :(得分:11)

保护javascript代码毫无意义,您只需要保护服务器端代码。

无论如何,我认为你的方法不正确;如果您已经有一个登录用户/用户ID,我只会使用会话中的用户ID而不是javascript提供的用户ID。这样,任何人都无法篡改它。

所以你可以用:

开始你的页面
session_start();
if (isset($_SESSION['user_id'))
{
  // do stuff with the user ID
}
else
{
  // display error message?
}

答案 1 :(得分:0)

根据网络的性质,您无法完全阻止对此脚本的访问。

您可以检查引荐来源信息,输入验证,您可以在子页面上检查的父页面上创建会话变量。

答案 2 :(得分:0)

我做了以下事情。请注意,这不是最安全的,正如其他答案所提到的,您无法完全阻止对此脚本的访问(提供了一个简单的旁路链接),但为了我的简单目的,这非常有用 -

define('_REFERURL',              'http://www.example.com');            // This is the full URL of your domain that will be calling your PHP script(s)

然后创建一个检查引用URL(应该来自您的域)的函数

function allow_user()
{
        if ($_SERVER['HTTP_REFERER'] == _REFERURL)
        {
                return true;
        }
        else
        {
                return false;
        }
}

使用:

if (allow_user())
{
     // Do things
}
else
{
     // Alert, direct access attempted
}

轻松通过:http://www.datatrendsoftware.com/spoof.html