php职业认证,如何用 PHP 进行 HTTP 认证

PHP 的 HTTP 认证机制在 PHP 以 Apache 模块方式运行时才有效,因此该功能不适用于 CGI 版本。在 Apache 模块的 PHP 脚本中,可以用 header() 函数来向客户端浏览器发送“Authentication Required”信息,使其弹出一个用户名/密码输入窗口。当用户输入用户名和密码后,包含有 URL 的 PHP 脚本将会再次和预定义变量 PHP_AUTH_USER、PHP_AUTH_PW 和 AUTH_TYPE 一起被调用,这三个变量分别被设定为用户名,密码和认证类型。预定义变量保存在 $_SERVER 或者 $HTTP_SERVER_VARS 数组中。系统支持“基本的”认证。请参阅 header() 函数以获取更多信息。

PHP 版本问题: Autoglobals 局变量,包括 $_SERVER等,在 PHP 4.1.0 以后版本有效, $HTTP_SERVER_VARS 从 PHP 3 开始有效。

以下是在页面上强迫客户端认证的脚本范例:

例子 16-1. HTTP 认证范例

if (!isset($_SERVER['PHP_AUTH_USER'])) {

header('WWW-Authenticate: Basic realm="My Realm"');

header('HTTP/1.0 401 Unauthorized');

echo 'Text to send if user hits Cancel button';

exit;

} else {

echo "

Hello {$_SERVER['PHP_AUTH_USER']}.

";

echo "

You entered {$_SERVER['PHP_AUTH_PW']} as your password.

";

}

?>

兼容性问题: 在编写 HTTP 头信息代码时请格外小心。为了对所有的客户端保证兼容性,关键字“Basic”的个字母必须大写为“B”,分界字符串必须用双引号(不是单引号)引用;并且在头信息行 HTTP/1.0 401 中,在 401 前必须有且有一个空格。

在以上例程中,我们只打印出了 PHP_AUTH_USER 和 PHP_AUTH_PW 的值,但在实际运用中,您可能需要对用户名和密码的合法性进行检查。或许进行数据库的查询,或许从 dbm 文件中检索。

请注意由 Internet Explorer 浏览器本身的问题带来的错误。它对头信息的顺序显得似乎有点吹毛求疵。目前在 HTTP/1.0 401 头之前发送 WWW-Authenticate 头信息能解决该问题。

在 PHP 4.3.0 中,为了防止有人通过编写脚本来从用传统外部机制认证的页面上获取密码,当外部认证对特定页面有效,并且 安模式 被开启时,PHP_AUTH 变量将不会被设置。但无论如何,REMOTE_USER 可以被用来辨认外部认证的用户,即使用 $_SERVER['REMOTE_USER'] 变量。

设置问题: PHP 用 AuthType 选项来判断外部认证机制是否有效。

注意,这仍然不能防止有人通过未认证的 URL 来从同一服务器上认证的 URL 上偷取密码。

Netscape Navigator 和 Internet Explorer 浏览器都会在收到 401 的服务端返回信息时清空所有的本地浏览器整个域的 Windows 认证缓存。这能够有效的注销一个用户,并迫使他们重新输入他们的用户名和密码。有些人用这种方法来使登录状态“过期”,或者作为“注销”按钮的响应行为。

例子 16-2. 强迫重新输入用户名和密码的 HTTP 认证的范例

function authenticate() {

header('WWW-Authenticate: Basic realm="Test Authentication System"');

header('HTTP/1.0 401 Unauthorized');

echo "You must enter a valid login ID and password to access this resource\n";

exit;

}

if (!isset($_SERVER['PHP_AUTH_USER']) ||

($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {

authenticate();

}

else {

echo "

Welcome: {$_SERVER['PHP_AUTH_USER']}

";

echo "Old: {$_REQUEST['OldAuth']}";

echo "

\n";

echo "\n";

echo "\n";

echo "\n";

echo "

\n";

}

?>

该行为对于 HTTP 基本认证标准来说并不是必须的,因此您不能依靠这种方法。对 Lynx 浏览器的测试表明 Lynx 在收到 401 的服务端返回信息时不会清空认证文件,因此只要对认证文件的检查要求没有变化,只要用户点击“后退”按钮,再点击“前进”按钮,其原有资源仍然能够被访问。不过,用户可以通过按“_”键来清空他们的认证信息。

同时请注意,在 PHP 4.3.3 之前,由于微软 IIS 的限制,HTTP 认证无法工作在 IIS 服务器的 CGI 模式下。为了能够使其在 PHP 4.3.3 以上版本能够工作,您需要编辑 IIS 的设置“目录安”。点击“编辑”并且只选择“匿名访问”,其它所有的复选框都应该留空。

另一个限制,在您使用 IIS 的 ISAPI 模式的时候,您无法使用 PHP_AUTH_* 变量,而只能使用 HTTP_AUTHORIZATION。例如,考虑如下代码:list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间服务器

时间服务器配置: 1 安装软件包: [rootlocalhost ~]# yum install ntp –y 2 修改配置文件 [rootlocalhost ~]# vim /etc/ntp.conf # 允许内网其他机器同步时间 192.168.1.0该网段 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 允许任何ip的客户机都可以…

使用 HTML5 Canvas 绘制出惊艳的水滴效果

HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临。在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作,具有极大的应用价值。 这里分享一个惊艳的 Canva…

Java EE 8:社区想要什么?

在进行了之前的两次社区调查之后,第一次调查于2013年12月发布,第二次调查于2014年1月发布,Oracle呼吁企业社区对Java EE 8进行第三次也是最后一次调查 。该调查的截止日期为2014年3月24日,12日。太平洋时间。 值得注意的是&#…

mysql 字符串类型 char varchar

字符类型用在存储名字、邮箱地址、家庭住址等描述性数据 char指的是定长字符,varchar指的是变长字符 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度#char类型:定长…

二叉树遍历规则

树的遍历顺序大体分为三种:前序遍历(先根遍历、先序遍历),中序遍历(中根遍历),后序遍历(后根遍历)。 如图所示二叉树: 前序遍历:前序遍历可以记为…

vue vue的table表格自适应_vue table autoHeight(vue 表格自动高度)

小编主要做的都是后台管理系统,采用布局多为头部、左侧菜单栏,右侧内容,头部和菜单栏固定位置,内容部分如果很长就会出现滚动条(iview和element都提供了布局容器),后台管理系统多为表格的增删改查,so&#…

php网页的注册界面设计,HTML开发博客之注册页面设计(一)

CSS文件的引入新建文件reg.html文件首先我们来分析网页布局这是我们页面完成后的效果,网页分为三部分头部,主体,和底部我们按照这个顺序开始编写。头部导航栏的编写html>用户注册页面首页科技资讯心情随笔资源收藏图文图片留言板登陆/注册…

Arctext.js - 基于 CSS3 jQuery 的文本弯曲效果

Arctext.js 是基于 Lettering.js 的文本旋转插件,根据设置的旋转半径准确计算每个字母的旋转弧度并均匀分布。虽然 CSS3 也能够实现字符旋转效果,但是要让安排每个字母都沿着弯曲路径排布相当的复杂,结合 Arctext.js 则可以轻松实现这个效果。…

在JDT中使用Java 8 Lambda

旧 Curmudgeon 认识Smalltalk的Dude 在修改Eclipse Java开发工具 (JDT)项目正在开发的Java 8支持时,我一直在使用这种语言。 我承认我对Java 8中的lambda有点不满意。 当然,这来自于知道Smalltalk (和LISP / Schem…

[POJ1463] Strategic game

题目链接: 传送门 题目大意: Bob非常享受玩电脑游戏的过程,尤其是策略游戏,但是在有些时候,他因为不能在第一时间找到最佳的策略而十分伤心。 现在,他遇到了一个问题。他必须保卫一个中世纪的城市&#xff…

zabbix邮件告警

zabbix邮件告警调用第三方邮件服务来发送邮件。 [roottiandong ~]# yum install mailx -y 修改配置文件 [roottiandong ~]# vim /etc/mail.rc 67 set from15600857257163.com smtpsmtp.163.com 68 set smtp-auth-user15600857257163.com 69 set smtp-auth-password密码&#xf…

模糊推理机制 matlab,基于模糊综合评判推理机制的学生素质评价系统设计与实现...

第22卷第2期2002年2月文章编号:(2002)l00l-908l2-008l-03计算机应用ComputerAppIicationsVoI.22,No.2Feb.,2002基于模糊综合评判推理机制的学生素质评价系统设计与实现尹世群(西南师范大学计算机与信息科学学院,重庆4007l5)摘要:根据模糊数学…

SweetAlert – 替代 Alert 的漂亮的提示效果

Sweet Alert 是一个替代传统的 JavaScript Alert 的漂亮提示效果。SweetAlert 自动居中对齐在页面中央,不管您使用的是台式电脑,手机或平板电脑看起来效果都很棒。另外提供了丰富的自定义配置选择,可以灵活控制。 在线演示 插件下载 您可…

onpagefinished等了很久才执行_今天自律了吗?停课不停锻炼 才是战疫正确姿势

近日,中青校媒面向全国915名高校学生发起关于“宅家运动”情况的调查,发现15.39%被调查者在家期间会严格执行锻炼计划,39.96%选择间歇性完成制订的运动目标,还有44.65%在家很少运动。(3月18日《中国青年报》)新冠肺炎疫情发生&…

Spring Data Couchbase 1.0 GA发布

Spring Data Couchbase 1.0 GA版本已发布! 该项目是Spring Data项目的一部分,该项目旨在为新数据存储提供熟悉且一致的基于Spring的编程模型,同时保留特定于存储的功能。 Spring Data Couchbase项目提供了与Couchbase Server数据库的集成。 …

网络验证php接口逆向,一个专利查错的逆向(网络验证)

[C#] 纯文本查看 复制代码bool flag true;if (!fileInfo.CreationTime.ToString().Equals(configData.fileCreateTime))//这里是校验License,直接删除掉{MessageBox.Show("认证文件已损坏!");flag false;Application.Exit();}if (flag){Lice…

kickstart-G

感觉自己很蠢&#xff0c;large数据只能交一次&#xff0c;忘记这回事了 A题 O(n^2)解法&#xff0c;用vector<set> 缓存j后面的数据&#xff0c;减少一重循环 1 #include <string>2 #include <vector>3 #include<iostream>4 #include<cstdio>5 …

Ocrad.js – JS 实现 OCR 光学字符识别

Ocrad.js 相当于是 Ocrad 项目的纯 JavaScript 版本&#xff0c;使用 Emscripten 自动转换。这是一个简单的 OCR &#xff08;光学字符识别&#xff09;程序&#xff0c;可以扫描图像中的文字回文本。 不像 GOCR.js&#xff0c;Ocrad.js 被设计成一个端口&#xff0c;而不是围绕…

c++ ptree判断是否存在节点_CTreeCtrl 查找 等于某值 的节点,并设置为高亮

查找节点&#xff0c;并返回该节点HTREEITEM GroupTree::FindTreeItem(HTREEITEM item,CString& strText){HTREEITEM hFind;if(item NULL)return NULL;while(item!NULL){if(m_pTree->GetItemText(item) strText)return item;if(m_pTree->ItemHasChildren(item))…

oracle安装出现getproces,oracle安装问题

一.引入问题帮朋友在CentOS上安装一个10g的Oracle&#xff0c;结果朋友的CentOS版本是6.2的版本&#xff0c;最新的一个版本&#xff0c;不过Linux上基本都差不多&#xff0c;所以按照以前的步骤&#xff0c;迅速的操作起来&#xff0c;结果遇到N多以前没有遇到过的错误。安装被…