繁体   English   中英

限制对特定页面的访问

[英]Restricting access to specific pages

我正在开发一个网站,用户必须登录后才能访问其个人资料。 但是我不知道如何通过在地址栏中键入sitename.com/profile.php来限制用户直接访问个人资料页面。 我在Stack Overflow上搜索时遇到了这段代码,这是我的login.php脚本

if(!empty($row['username']) AND !empty($row['password']))
{
    $_SESSION['login'] = true;
    $_SESSION['username'] = $row['username'];
    echo '<script>window.location = "profile.php"</script>';
}

现在,在profile.php的顶部,我已输入以下代码

<?php
session_start();
if (!$_SESSION['login']){ 
echo '<script>window.location = "index.html"</script>';
}
?>

用户仍然可以通过直接输入URL来访问profile.php。 我究竟做错了什么?

考虑到您正在使用一个,请在Apache配置中尝试此操作。 我用过“本地主机”。 用您的域替换。

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(php)$ - [F] 

您可以通过在RewriteRule中使用以下OR条件来扩展文件限制。 对于前。 限制JPG和PHP的访问。

RewriteRule \.(php|jpg)$ - [F] 

希望这可以帮助。

您将需要一个层次结构,然后需要确定允许查看页面所需的权限级别。 这是权限的示例列表...

10-管理员

9-网站管理员

8-助理网站管理员

7-主持人

6-高级会员

5-会员

4-受罚成员

3-已注册但未通过电子邮件验证的成员

2-人类访客

1-搜索引擎

0-禁止帐户

因此,在某人进行注册的示例中,您将其帐户设置为3级,一旦他们验证了电子邮件地址,便会将其帐户(数据库和会话)级别提高到5级。如果您正在编写软件,则此级别为10级扩展权限。

您想为会话变量(例如$_SESSION['user_permission']分配权限(并使用前缀user_来表示所需的其他变量)。 当您需要检查权限时, 必须使用isset() ,这是一个示例...

<?php
if (isset($_SESSION['user_permission']) && $_SESSION['user_permission']>=5)
{
 echo '<p>Member-only content visible here.</p>';
}
else if (isset($_SESSION['user_permission']))
{
 echo '<p>Stop causing trouble and you would be able to see this page.</p>';
}
else
{
 echo '<p>Please register a new account.</p>';
}
?>

使用isset()确保您具有正确的括号数,这是每个人都会犯的常见错误。 如果您不使用isset()则黑客可以查看错误消息以发现代码中的弱点,因此请始终检查某些事物,而不是假定它们存在。

同样,您也不需要重定向人员,只需让PHP从客户端开始的页面上拉内容即可,这是我的新手,而且我的想法很不错,我们将经历所有这些概念当您意识到自己使事情变得过于复杂时。 例如在我的博客/编辑链接才会出现,如果我或其他管理员/网站管理员的登录,无需重新创建整个页面只是权限时候,虽然也有一些情况是类似的控制面板非常明显在这种情况下,您想尽早检查权限并确保提供正确的HTTP错误代码。

最后,我从未发现PHP的empty()有用,它可能仅适用于某些类型的数据,相反,我将测试例如( $something=='')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM