使用正则表达式基于url对用户进行身份验证

时间:2016-02-06 10:37:41

标签: php regex url authentication expression

我正在构建一个PHP用户登录和管理系统。每个用户都有一个由管理员指定的角色。

让我们说角色A的价值为/users。 这意味着具有角色A的用户应该访问位于目录mydomain.com/users/myprofile.php中的每个网页。 例如,用户应该访问mydomain.com/users/friends/index.phpmydomain.com/foo/index.php,而不是url=/users/*

我认为一个好的解决方案是使用正则表达式实现这一目标。

EG。我有*的规则。我用正则表达式替换url=符号,删除规则开头的*,然后我获取用户访问过的页面的URL,然后执行preg_match(rule,url) ,如果返回yes,则用户通过身份验证,如果不是,则重定向他。

问题:

1。使用正则表达式应该替换[a-zA-Z0-9\-\#]+符号?我在考虑$_SERVER['REQUEST_URI']

2。使用{{1}}获取用户访问的当前网址是否安全。为此目的使用它是否安全?

3. 还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:0)

你可以从不同的角度看待这个问题。通常,每个页面都有一个检查用户凭据的方法 - 您所做的是确认他允许他访问该页面的权限。因此,例如,users /目录中的每个页面都将调用一个检查用户cookie并确认他在用户组中的函数。

您无需检查$_SERVER['REQUEST_URI'],因为该页面知道它在哪里(如果没有,请使用__DIR__等。)

如果您需要更复杂,可以设置用户功能并检查所有页面添加内容,例如:

if ($visitor->hascapability(X) {
    showlink(); //etc. etc.
}