我想知道我使用的是否安全:
Header(“Location:”);
我想像这样使用它: $ user将是用户的会话,1表示admin。 (只是一个例子。)
if($user != 1){
header("location: index.php"); }
那么这会阻止用户使用该页面,包括下载文件,查看该页面的来源吗? 因为我的管理员将有下载并插入主页..
如果使用不安全,或者我正在使用它的方式。我该怎么用?
感谢。
答案 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:..."));
杀死页面