Header(“Location:”)安全使用?

时间:2013-04-25 17:38:11

标签: php

我想知道我使用的是否安全:

    Header(“Location:”);

我想像这样使用它: $ user将是用户的会话,1表示admin。 (只是一个例子。)

     if($user != 1){ 
     header("location: index.php"); } 

那么这会阻止用户使用该页面,包括下载文件,查看该页面的来源吗? 因为我的管理员将有下载并插入主页..

如果使用不安全,或者我正在使用它的方式。我该怎么用?

感谢。

6 个答案:

答案 0 :(得分:2)

设置位置标题后,请不要忘记die()。这就是真正阻止人们使用他们不应该使用的页面的原因。

答案 1 :(得分:2)

header()可以安全使用,但这意味着您必须在每个页面中包含您不希望非管理员查看的内容。

更好的方法是拥有一个经过身份验证的用户类来处理这个问题。好处是,它会干掉你的代码。

<?php
class User
{
    public function __construct()
    {
        // create your user however, i.e. fetch a record from your database
    }    

    public function isAdmin()
    {
        return ($this->user->role == 'admin');
    }

    public function redirect()
    {
        header('Location: index.php');
        exit;
    }
}

然后在您的代码中使用它:

<?php

$user = new User();

if (!$user->isAdmin()) {
    $user->redirect();
}

// continue with your page as normal; user here is an admin

答案 2 :(得分:1)

您需要在标题

之后添加exit;

答案 3 :(得分:1)

我觉得更好的方法是退出页面并阻止任何其他代码执行。我不确定,但是如果用户想要的话,用户可能会忽略标题重定向请求。

我总是添加一个小片段,例如“抱歉,这只适用于管理员”然后返回;或退出;

编辑:很棒的googly moogly你们很快就抽签了。

答案 4 :(得分:1)

这里发生的事情是,通过设置Location标记,您实际上是在回复HTTP 30x请求,将用户浏览器指向新页面。但它是在浏览器的手中尊重它。如果浏览器/用户是恶意的,他可能会忽略它。

因此,您需要在使用die()发送位置标头后立即停止输出。比它安全 - 浏览器不会得到任何不应该得到的数据

答案 5 :(得分:0)

使用die(header("Location:..."));杀死页面