SERVER ['REQUEST

在我的一个网站中,我使用$_SERVER['REQUEST_URI']来确定一个非注册用户是否可以看到页面的内容。

在手册中写了大约$_SERVER['REQUEST_URI']

为访问此页面而提供的URI; 比如'/index.html'。

我的问题是,客户端是否可以访问例如。 index.php即使$_SERVER['REQUEST_URI']包含不同的值?

我知道$_SERVER['REQUEST_URI']包含客户请求的页面和服务器返回的页面,但如果我偶尔不问自己这类问题,我就不开心了

以这种方式使用$_SERVER['REQUEST_URI']也被认为是很好的做法吗?

编辑:我包括我使用的脚本,因为它太泛型了

list($c_page) = explode('.',substr($_SERVER['REQUEST_URI'],1));
define('C_PAGE',$c_page ?: 'index');
define('LOGGED',$_SESSION['user']['id'] ?: 0);
if(in_array(C_PAGE,array('page_1','page_2','page_3')) && !LOGGED){ header('Location: login.html'); exit; }

取决于服务器端的软件包,使用此变量由webserver或fastcgi包装器设置。

硬件/软件堆栈中的URL重写和非透明代理可以影响您在脚本中看到的值。

例如,Nginx可以将/test.html中的URL重写为/index.php?action=test,然后将其传递到您的网络服务器。 用户在应用程序看到/index.php?action=test时会调用/test.html

结论:REQUEST_URI是传递给Web服务器的URI,可用作基于URL的访问控制的参考。

编辑:

只是为了避免混淆,因为我看到了其他答案......

你的问题,因为我明白:你想检查你的当前请求和已经密码授权的用户有足够的权限访问特定的URL。 再次,是的,您可以使用请求uri作为参考值


您应该使用会话变量(或cookie)确实跟踪他们的入口。 其中任何一个都可能被阻止......但它们更接近“万无一失”。 也就是说,任何事情都可以伪造......所以如果安全是最重要的,那么使用组合和/或强大的独特字符串。


就个人而言,我发现声明一个或多个应该有权访问文件的用户组(类)的用户更可靠,并且如果登录用户不在任何这些组中,则包含返回401错误的页面。 例如

session_start();
...
$access = 'admin';
include 'inc/guard.php';

听起来就像你想要的'公开'和'登录',你的情况稍有不同,但是我的警卫脚本也涵盖了这种情况。 在那里,我只需检查$_SESSION变量是否为空(我在登录时向它插入东西):

if($access != 'public' && empty($_SESSION)) {
    header('HTTP/1.1 401 Unauthorized', true);
    include 'inc/login.php';
    exit;
}
链接地址: http://www.djcxy.com/p/42265.html

上一篇: SERVER['REQUEST

下一篇: How reliable is $