我为我的主页做了一个搜索简介。当普通用户登录并更改web地址中的目录时,他们可以访问应该仅限于用户帐户的所有信息。例如,普通用户可以访问以下站点:
http://deped.gov.ph/login/Schools/BacoorES/SearchOutput.php?id=393
但是当他将"BacoorES"更改为"Admin"时,它将重定向为Admin用户。当用户更改目录时,我需要帮助如何结束会话。
<?php
session_start();
if($_SESSION['name']){
}else
$home_url='http://www.deped.gov.ph/login';
header('Location: ' . $home_url);
?>
<?php include '../../template-header/header.php' ?>
我不认为结束会话是解决这个问题的方法。一种方法是使用用户访问级别的会话变量。例如,一开始它是0
,当你登录时它会变成1
,如果你是管理员它会变成2
。
然后在每个页面的开头,您可以检查用户是否有足够的凭据来查看它们。例如,对于管理页面:
session_start();
if($_SESSION['user_level'] < 2) {
//Redirect to an access denied page.
header('Location: access_denied.php');
}
else {
//Here you can put the code for the admin only page.
}
当然,有很多很多方法来解决这个问题。在实践中,这可能不是最好的方法,但它说明了基本方法。依靠"通过模糊实现安全",即假设人们不会发现url,是不安全的,即使你不做搜索配置文件。
你可以这样做…
$dirpath = '/login/Schools/';
$closing = '/';
if(strpos($dirpath . $_SESSION['name'] . $closing, $_SERVER['REQUEST_URI']) !== FALSE) {
//user is in correct path
} else {
//user is guessing throw them out...
}
将检查当前请求的用户名路径。你想采取的行动取决于你自己。
注意,我没有测试上面的代码,因为它目前是写的,因为我没有目录结构。我测试了。
$dirpath = '/testingabc123/';
$closing = ''; //'/';
if(strpos($dirpath . '1246.php' . $closing, $_SERVER['REQUEST_URI']) !== ) {
echo 'in';
} else {
echo 'out';
}
我的页面是/testingabc123/1246.php
。$closing
很重要,因为没有它,用户名jon
可以匹配jonathon
。另外,我假定您不允许在用户名中使用/
。如果你这样做,用户可以将他们的用户名设置为/login/Schools/admin/
,这将授予他们访问。