使用PHP模拟HTTP认证_php基础

如果你希望在每个脚本的基础上实现口令保护功能,那么你可以通过结合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具有长期贡献的专家。

 

时间: 2016-10-09

使用PHP模拟HTTP认证_php基础的相关文章

Zend公司全球首推PHP认证_php基础

Zend公司培训与认证主管-Daniel Kushner昨日向美国一著名媒体透露道,Zend公司决定创建新的Zend Certified Engineer认证以适应于那些需要证明自己在PHP技术方面的能力的人的需求. Kushne说道,#200-100:Zend PHP认证考试(PHP考试科目)的创作是由10名PHP专家协助评测以确保它的合法性与正确性.他解释说:"质量是我们唯一的目标". 该考试包含多选题,填空题以及其他标准的题型,Kushner推荐报考者至少拥有6个月的PHP工作经

使用php通过Socket进行发信源码,支持发信认证_php基础

使用php直接打开socket端口进行发信的小程序特点是使用smtp认证,能够更好的使用满足一般网友建站需要. 整个源码附在本文中,同样内容可到下列地址下载.转载请注明出处. http://www.knowsky.com/download/phpsendmail.rar <?/******************************************//*          Php webmail sender            *//*           www.ebugs.o

php中处理模拟rewrite 效果_php基础

php中处理模拟rewrite 效果<?php $Php2Html_FileUrl = $_SERVER["REQUEST_URI"]; $Php2Html_UrlString = str_replace("/", "", strrchr($Php2Html_FileUrl, "/")); ?> <?php $sid=intval(intval($Php2Html_UrlString));//Integer 

PHP+&amp;#106avascript模拟Matrix画面_php基础

    直接存为*.php文件运行即可. <?   $color_back="#000000";   $number_w=8;   $number_h=6;   $space=1;   $font_size=20;   $speed=0; ?> <html> <head> <title>The Matrix</title> <meta http-equiv="Content-Type" content

使用PHP模拟HTTP认证

如果你希望在每个脚本的基础上实现口令保护功能,那么你可以通过结合header()函数和$PHP_AUTH_USER.$PHP_AUTH_PW全局变量的方法来创建一个基本认证机制.通常基于服务器的认证请求/响应过程如下: 1. 用户向一台Web服务器请求一个文件.如果文件在一个受到保护的区域以内,服务器就在响应数据的头部内加上401(非法用户)字符串作为回应. 2.浏览器看见该响应之后弹出用户名/口令对话框. 3.用户在对话框中输入用户名和口令,然后单击"OK"把这些信息送回到服务器进行

《CCNP安全Secure 642-637认证考试指南》——第6章 配置与实施802.1X认证(基础)

第6章 配置与实施802.1X认证(基础)CCNP安全Secure 642-637认证考试指南本章涵盖以下内容. 规划基本的802.1X部署:介绍与802.1X部署有关的基本知识.为Cisco Catalyst交换机配置认证方:介绍认证方的详细配置过程.为Cisco ACS配置EAP-FAST:介绍EAP-FAST的详细配置过程.为Cisco SSC配置请求方:介绍请求方的详细配置过程.802.1X的验证与排错:介绍排错时需要考虑的各种因素.这一章将介绍802.1X认证架构的各种功能.在信息时代

模拟xcopy的函数_php基础

模拟xcopy的函数 <?php /************************************** 系统名称:模拟xcopy的函数* 程序功能:模拟xcopy的函数* 开发日期:2003/03/14*************************************/?><?//copy a direction's all files to another direction function xCopy($source, $destination, $child){

模拟SQLSERVER的两个函数:dateadd(),datediff()_php基础

<?php//文件名:date.inc.php3//在使用这两个函数前,要先将日期或日期时间转换成timestamp类型.//如://$today=mktime(0,0,0,date("m"),date("d"),date("Y")); /****模拟sqlserver中的dateadd函数*******$part 类型:string取值范围:year,month,day,hour,min,sec表示:要增加的日期的哪个部分$n 类型:数值

PHP模拟SQL Server的两个日期处理函数_php基础

//在PHP中处理日期非常不方便,比如求两个日期之间相差的月份?该怎么办呢?  //文件名:date.inc.php3  //在使用这两个函数前,要先将日期或日期时间转换成timestamp类型.  //如:  //$today=mktime(0,0,0,date("m"),date("d"),date("Y"));  /****模拟sqlserver中的dateadd函数*******  $part 类型:string  取值范围:year,m