[转载]使用PHP模拟HTTP认证

如果你希望在每个脚本的基础上实现口令保护功能,那么你可以通过结合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
/* 检查变量 $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>";
    }
}
?>

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

[转载]使用PHP模拟HTTP认证的更多相关文章

  1. flask设置cookie,设置session,模拟用户认证、模拟管理后台admin、模拟用户logout

    设置cookie HTTP协议是无状态的,在一次请求响应结束后,服务器不会留下关于客户端状态的信息.但是对于某些web程序来说,客户端的信息有必要被记住,比如用户的登录状态,这样就可以根据用户的状态来 ...

  2. 转载:curl 模拟请求

    一般情况下我们会在网页上请求后台接口,但是对于需要进行多次测试的人来说,每一次都要在网页上模拟请求,是存在很大局限性的.因此,我们需要学会模拟请求,以达到跟实际请求一样的效果. 1. curl的用法 ...

  3. 【转载】.NET模拟POST登录并保持登录状态

    好了,还是由于工作需要 要登录一个网站并且模拟点击下载某些东西 原理就是先对一个地址(地址是用户名和密码输入框所在的form的action对应的页面)进行POST提交用户名和密码(不考虑验证码,当然验 ...

  4. 【转载】GPIO模拟i2c通信

    I2C总线的通信过程(见图4-8)主要包含三个主要阶段:起始阶段.数据传输阶段和终止阶段. 1. 起始阶段 在I2C总线不工作的情况下,SDA(数据线)和SCL(时钟线)上的信号均为高电平.如果此时主 ...

  5. 【转载】curl 模拟 GET\POST 请求,curl查看响应头 以及 curl post 上传文件

    补充说明:curl查看响应头 curl -I "http://www.baidu.com"HTTP/1.1 200 OK #HTTP协议 HTTP 返回码Server: Tengi ...

  6. 转载 :配置ssh密钥认证自动登录

    原文地址 :https://segmentfault.com/a/1190000000481249 在客户端来看,SSH提供两种级别的安全验证.[摘自wikipedia] 第一种级别(基于密码的安全验 ...

  7. 【转载】WCF 客户端识别认证之UserName认证

    原文地址: http://blog.csdn.net/zxz414644665/article/details/9308055 过程:用户调用service,服务端验证用户传来的用户名和密码(传输过程 ...

  8. Python3学习实例上手(1)-----模拟登录认证

    要求:输入用户名.密码进行认证,认证成功则欢迎,若输错三次会锁定最后一次输入的用户 知识点归纳:字典操作(items()方法).字符串操作(如strip().split()等).文件读写(for li ...

  9. HTTP基本认证

    众所周知,Web使人们可以很方便的访问分布在世界各个角落里信息.但是仅仅是方便还是不够的,并不是所有的信息都适合在互联网上公开访问,我们需要保证只有特定的人才能看到我们的敏感信息并且执行特定的操作. ...

随机推荐

  1. selenium操作浏览器-窗口切换

    package seleniumLearn1; import java.util.Set; import java.util.concurrent.TimeUnit; import org.openq ...

  2. e768. 创建单选按钮

    // Create an action for each radio button Action action1 = new AbstractAction("RadioButton Labe ...

  3. Vue 404页面处理

    问题原因: 刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径 解决方案: 第一步:后端配置 Apache <IfModule mod_rewrite.c& ...

  4. json过滤某些属性 之@jsonignore

    Jackson相关: 使用Jackson相关的注解时一定要注意自己定义的属性命名是否规范. 命名不规范时会失去效果.(例如Ename ,Eage 为不规范命名.“nameE”,“ageE”为规范命名) ...

  5. 软渲染 SoftRender

    弄了这几年OpenGL对管线还是算比较熟悉,写起来也比较顺,不过每个顶点都要经过一堆变换,着实感到效率的重要.(矩阵乘顶点没有SSE加速啊)装个B,半天的成果..(主要很多东西都写好了直接拿来) // ...

  6. APP投资 历史 十万到 十亿元的项目

    马云又投了课程表APP 1亿元.   还能输入106字 http://www.tuicool.com/articles/ARVN3qI#0-qzone-1-41007-d020d2d2a4e8d1a3 ...

  7. [mobile angular ui 1.2]桌面环境下如何自动隐藏左侧的sidebar?how to hide left sidebar on desktop browser by default?

    使用mobile angular ui 1.2开发,在默认情况下,桌面浏览器中sidebar-left是默认打开的,怎么才能在程序初始打开时关闭sidebar-left呢? 目前我找到的唯一可行办法就 ...

  8. 百度编辑器插入视频、iframe 失败

    插入失败是因为编辑器的xssFilter过滤,导致插入出现异常 文件位置:ueditor.config.js ,大概在428行加上 video: ['autoplay', 'controls', 'l ...

  9. windows下nvm安装node之后npm命令找不到问题解决办法

    主要关键解解决办法:===>>适用于所有东西的安装 安装有关环境配置类的软件及其他,一般情况下切记不要安装到c盘programfiles下,否则会出现各种问题的报错!!!切记! nvm安装 ...

  10. jquery与php的HTML转义与反转义

    1.jquery (1)Html转义 var tmp = '<a href="https://www.baidu.com/">连接</a>'; var tm ...