使用PHP模拟HTTP认证


Posted in PHP onOctober 09, 2006

如果你希望在每个脚本的基础上实现口令保护功能,那么你可以通过结合header()函数和$PHP_AUTH_USER、$PHP_AUTH_PW全局变量的方法来创建一个基本认证机制。通常基于服务器的认证请求/响应过程如下:

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

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

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

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完成有效性的检查。

本例显示对两个硬件编码值的确认检查,不论用户名和口令存放在何处,这在理论上完全相同。

<?

/* 检查变量 $PHP_AUTH_USER 和$PHP_AUTH_PW 的值*/

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

 /* 空值:发送产生显示文本框的数据头部*/

    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))){

    /* 变量值存在,检查其是否正确 */

    if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {

/* 用户名输入错误或密码输入错误,发送产生显示文本框的数据头部*/

       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")) {

      /* 用户名及密码都正确,输出成功信息 */

       echo "<P>You're authorized!</p>";

    }

}

?>

必须提醒,当你正在使用基于文件的保护时,此方式并不能对目录提供全方位的安全保障。。这对大多数人而言是很明显的,但是,如果你的大脑在弹出对话框和保护给定目录二者之间建立一个连接,你应该对此进行进一步的考虑。。

Julie Meloni 是i2i Interactive的技术主管,及Linux和开放源代码社区的大力推动者。她撰写了很多关于PHP及其他技术的书籍,并成为对CNET Builder.com具有长期贡献的专家。

 

PHP 相关文章推荐
用PHP和ACCESS写聊天室(一)
Oct 09 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
PHP使用递归生成文章树
Apr 21 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
PHP访问数据库集群的方法小结
Mar 14 PHP
php写入文件不覆盖的实例讲解
Sep 17 PHP
在PHP中使用XML
Oct 09 #PHP
使用PHP维护文件系统
Oct 09 #PHP
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 #PHP
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 #PHP
PHP4之真OO
Oct 09 #PHP
第十一节 重载 [11]
Oct 09 #PHP
第十二节 类的自动加载 [12]
Oct 09 #PHP
You might like
PHP中的CMS的涵义
2007/03/11 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
JavaScript QueryString解析类代码
2010/01/17 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
angular4自定义组件详解
2017/09/28 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
用Python抢过年的火车票附源码
2015/12/07 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
Python数据结构之翻转链表
2017/02/25 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
python pygame实现2048游戏
2018/11/20 Python
Django中间件基础用法详解
2019/07/18 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
Python while循环使用else语句代码实例
2020/02/07 Python
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
项目开发计划书
2014/01/09 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
离婚案件答辩状
2015/05/22 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书