PHP脚本的10个技巧(5)


Posted in PHP onOctober 09, 2006

采用PHP的用户认证
如果你希望在每一个脚本的基础上实现口令保护功能,那么你可以联合使用header()函数和$PHP_AUTH_USER、$PHP_AUTH_PW全局变量来创造一个基本的认证方案。通常的、基于服务器的认证请求/响应回合很象下面这个样子:

1.用户向一台Web服务器请求一个文件。如果文件在一个受到保护的区域以内,服务器就在响应的文件头内加上401(非法用户)字符串作为回应。

2.浏览器看见该响应之后就弹出用户名/口令对话框。

3.用户在对话框中输入用户名和口令,然后单击“确认”按钮把这些信息送回到服务器。

4.如果用户名和口令有效,被保护的文件将对用户显示,并且,只要现在经过证实的用户一直在保护区域以内。以上的认证过程都有效。

 

一个简单的PHP脚本可以模仿HTTP认证请求/响应系统,方法就是发送适当的HTTP头来使得用户名/口令对话框自动出现在客户机的屏幕上。PHP把用户输入对话框的信息存储在$PHP_AUTH_USER和$PHP_AUTH_PW变量中。使用这些变量,你就可以把不符合用户名/口令检验的列表存放到某个文本文件、数据库或者你任何自己指定的地方

注意:$PHP_AUTH_USER、$PHP_AUTH_PW和$PHP_AUTH_TYPE这三个全局变量只有在PHP被当作一个模块安装时才是有效的。如果你正在使用PHP的CGI版本,那么你只能受限于采用基于.htaccess的认证或基于数据库的认证方式,这样你就必需设计HTML表单让用户输入用户名和口令,再让PHP进行有效性的检查。

下面的这个例子显示对2个设定值的检查,但在理论上和以上的用户名和口令检查并无本质的不同。

<?
/* Check for values in $PHP_AUTH_USER and $PHP_AUTH_PW */

if ((!isset($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW))) {

  /* No values: send headers causing dialog box to appear */
  header('WWW-Authenticate: Basic realm="My Private Stuff"');
  header('HTTP/1.0 401 Unauthorized');
  echo 'Authorization Required.';
  exit;

} else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){

  /* Values contain some values, so check to see if they're correct */

  if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {
    /* If either the username entered is incorrect, or the password entered is incorrect, send the headers causing dialog box to appear */
    header('WWW-Authenticate: Basic realm="My Private Stuff"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Authorization Required.';
    exit;
  } else if (($PHP_AUTH_USER == "validname") || ($PHP_AUTH_PW == "goodpassword")) {
    /* if both values are correct, print success message */
    echo "<P>You're authorized!</p>";
  }
}
?>

记住,当你正在使用基于文件的保护措施时,这种方式不是绝对能保护目录的安全毯。这对你们中的大多数人而言是显而易见的,但是,如果你的大脑在弹出对话框之间和保护给定目录之间建立一个连接,那么你必须费点劲来认识这一进程。

PHP 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
PHP daddslashes 使用方法介绍
Oct 26 PHP
php的ajax简单实例
Feb 27 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
tp5 实现列表数据根据状态排序
Oct 18 PHP
PHP设计模式(观察者模式)
Jul 07 PHP
打造计数器DIY三步曲(中)
Oct 09 #PHP
打造计数器DIY三步曲(下)
Oct 09 #PHP
打造计数器DIY三步曲(上)
Oct 09 #PHP
PHP脚本的10个技巧(4)
Oct 09 #PHP
聊天室php&amp;mysql(六)
Oct 09 #PHP
PHP脚本的10个技巧(3)
Oct 09 #PHP
社区(php&amp;&amp;mysql)六
Oct 09 #PHP
You might like
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
实现获取http内容的php函数分享
2014/02/16 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
Python实现Const详解
2015/01/27 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
自学考试自我鉴定范文
2013/09/26 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书