基于 url 使用正则表达式对用户进行身份验证
Authenticate users based on url with regular expressions
我正在构建一个 PHP 用户登录和管理系统。每个用户都有一个由管理员指定的角色。
假设角色 A 具有值 url=/users/*
。
这意味着具有角色 A 的用户应该访问位于目录 /users
中的每个网页。
例如,用户应该访问 mydomain.com/users/myprofile.php
、mydomain.com/users/friends/index.php
而不是 mydomain.com/foo/index.php
.
我认为一个好的解决方案是使用正则表达式来实现。
EG。我的规则是 url=/users/*
。我用正则表达式替换 *
符号,删除规则开头的 url=
,然后我得到用户访问过的页面的 URL 并执行 preg_match(rule,url), 如果returns 是用户通过身份验证,如果不是我重定向他。
问题:
1. *
符号应该用什么正则表达式替换?我在想 [a-zA-Z0-9\-\#]+
.
2.使用$_SERVER['REQUEST_URI']
获取用户当前访问的URL是否安全。为此目的使用它安全吗?
3.还有其他方法可以实现吗?
您可能会从不同的角度看待这个问题。通常,每个页面都会有一种检查用户凭据的方法——您所做的就是确认他拥有的权限允许他访问该页面。因此,例如,users/ 目录中的每个页面都会调用一个函数来检查用户的 cookie 并确认他在用户组中。
您不需要检查 $_SERVER['REQUEST_URI']
,因为页面知道它在哪里(如果不知道,请使用 __DIR__
等)
如果您需要它更复杂,您可以设置用户功能并检查这些以获取所有页面添加,例如
if ($visitor->hascapability(X) {
showlink(); //etc. etc.
}
我正在构建一个 PHP 用户登录和管理系统。每个用户都有一个由管理员指定的角色。
假设角色 A 具有值 url=/users/*
。
这意味着具有角色 A 的用户应该访问位于目录 /users
中的每个网页。
例如,用户应该访问 mydomain.com/users/myprofile.php
、mydomain.com/users/friends/index.php
而不是 mydomain.com/foo/index.php
.
我认为一个好的解决方案是使用正则表达式来实现。
EG。我的规则是 url=/users/*
。我用正则表达式替换 *
符号,删除规则开头的 url=
,然后我得到用户访问过的页面的 URL 并执行 preg_match(rule,url), 如果returns 是用户通过身份验证,如果不是我重定向他。
问题:
1. *
符号应该用什么正则表达式替换?我在想 [a-zA-Z0-9\-\#]+
.
2.使用$_SERVER['REQUEST_URI']
获取用户当前访问的URL是否安全。为此目的使用它安全吗?
3.还有其他方法可以实现吗?
您可能会从不同的角度看待这个问题。通常,每个页面都会有一种检查用户凭据的方法——您所做的就是确认他拥有的权限允许他访问该页面。因此,例如,users/ 目录中的每个页面都会调用一个函数来检查用户的 cookie 并确认他在用户组中。
您不需要检查 $_SERVER['REQUEST_URI']
,因为页面知道它在哪里(如果不知道,请使用 __DIR__
等)
如果您需要它更复杂,您可以设置用户功能并检查这些以获取所有页面添加,例如
if ($visitor->hascapability(X) {
showlink(); //etc. etc.
}