[PHP]如何防止用户从地址栏直接访问后台页面

原创 2013年12月02日 00:11:29

PHP $_SERVER['HTTP_REFERER']

使用 $_SERVER['HTTP_REFERER'] 将很容易得到链接到当前页面的前一页面的地址。一个例子如下:

index.php(实际地址为:http://www.5idev.com/php/index.php):

<a href="test.php">链接</a>

test.php(实际地址为:http://www.5idev.com/php/test.php):

echo $_SERVER['HTTP_REFERER'];

在浏览器访问 index.php,点击链接到 test.php,得到的输出结果为:

http://www.5idev.com/php/index.php

PHP $_SERVER['HTTP_REFERER'] 无效

需要注意的是,$_SERVER['HTTP_REFERER'] 完全来源于浏览器。并不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。因此,$_SERVER['HTTP_REFERER'] 不总是真实正确的。

通常下面的一些方式,$_SERVER['HTTP_REFERER'] 会无效:

  1. 直接输入网址访问该网页。
  2. Javascript 打开的网址。
  3. Javascript 重定向(window.location)网址。
  4. 使用 meta refresh 重定向的网址。
  5. 使用 PHP header 重定向的网址。
  6. flash 中的链接。
  7. 浏览器未加设置或被用户修改。

所以一般来说,只有通过 <a></a> 超链接以及 POST 或 GET 表单访问的页面,$_SERVER['HTTP_REFERER'] 才有效。

由于 $_SERVER['HTTP_REFERER'] 对 POST 表单访问也是有效的,因此在表单数据处理页面一定程度上可以通过校验 $_SERVER['HTTP_REFERER'] 来防止表单数据的恶意提交。但该方法并不能保证表单数据的绝对正确,即对表单数据的真实性检测并不能完全依赖于 $_SERVER['HTTP_REFERER'] 


  session_start();
   $v_url=$_SERVER['HTTP_REFERER'];
   if($v_url != "xxxxxx/admin.php")) {
  session_destroy();
  header("Location: xxxxxx/admin.php");   //refer back to login page
   }


php给页面设置访问权限

php中有时涉及到操作权限,比如有一些对数据库的操作只希望管理者有权限修改,而普通用户是不能修改的。需要向服务器上传一个要求服务器在浏览器中向用户索要用户名和密码的首部,使用内置 header函数向服...
  • fengzhizi76506
  • fengzhizi76506
  • 2016年12月29日 23:48
  • 1510

禁止地址栏直接访问页面(有权限也不行)

  • 2016年12月20日 09:54
  • 402B
  • 下载

防止用户通过地址栏直接访问主页

     前几天有同学问到一个问题,大概如下:     存在Login.aspx与Default.aspx页面,由Login.aspx输入正确的用户名与密码访问到Default.aspx,当在Defa...
  • 279503482
  • 279503482
  • 2010年10月13日 19:34
  • 1736

网页中怎样禁止通过输入url直接访问

通常的做法是这样的:在登录页(比如说是login.asp)登陆成功后,要把登陆成功的状态赋值给一个Session变量,比如 Session("login")="OK",然后在除登录页之外的其他页面的开...
  • bigtree_3721
  • bigtree_3721
  • 2017年05月26日 01:17
  • 723

Apache下禁止php文件被直接访问的解决方案

本文为大家讲解的是Apache下如何禁止php文件被直接访问的解决方法,感兴趣的同学参考下。 想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接...
  • hhkiss1
  • hhkiss1
  • 2015年01月04日 15:38
  • 1108

防止用户从地址栏直接访问后台接口

我们可以通过判断拦截器、过滤器http请求头里的referer来实现,但是存在一定的问题 在拦截器的perHandle方法中判断httpServletRequest.getHeader("refere...
  • qq_37545366
  • qq_37545366
  • 2017年03月13日 14:40
  • 653

怎么阻止直接输入地址访问 html 页面

step 1. Java中应用Filter对权限和Session控制 代码如下: package com.drp.util.filter; import java.io.IOException; ...
  • bigtree_3721
  • bigtree_3721
  • 2016年05月10日 17:18
  • 2170

防止用户直接访问url的权限控制(使用过滤器)

这是个过滤器的内容, [java] public void doFilter(ServletRequest request, ServletResponse response,     ...
  • xiantingxinbuone
  • xiantingxinbuone
  • 2013年08月18日 15:46
  • 2720

Apache下禁止php文件被直接访问的解决方案

本文为大家讲解的是Apache下如何禁止php文件被直接访问的解决方法,感兴趣的同学参考下。 想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接...
  • hhkiss1
  • hhkiss1
  • 2015年01月04日 15:38
  • 1108

禁止地址栏直接访问页面(有权限也不行)

  • 2016年12月20日 09:54
  • 402B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[PHP]如何防止用户从地址栏直接访问后台页面
举报原因:
原因补充:

(最多只允许输入30个字)