PHP+APACHE实现用户论证的方法

2016-01-29 14:48 13 1 收藏

PHP+APACHE实现用户论证的方法,PHP+APACHE实现用户论证的方法

【 tulaoshi.com - PHP 】

  在专业的 Web 站台上,常常会需要使用者的帐号及密码,也就是身份确认的动作。早期的 NCSA httpd 伺服器并没有提供这项使用者确认的功能,Webmaster 只能用手工打造一个身份确认的 CGI 程式。  
自 CERN httpd 之后的 Web 伺服器大部份都提供了使用者身份确认的功能。仅管每套 Web 伺服器的设定都不太相同,但在设定上都大同小异。  

以下就是 Apache 伺服器上的使用者身份确认的设定。  


<Directory /home/MyMember  
AuthType Basic  
AuthName MyMember  
AuthUserFile /usr/local/MyMember.txt  
Options Includes ExecCGI  
<Limit GET POST  
require valid-user  
</Limit  
</Directory  

在这个例子中,当使用者在看 MyMember 目录下所有的档案,包括图片档案及其它各式档案时,都需要使用者的帐号密码确认。而使用者的帐号及密码档都存在于/usr/local/MyMember.txt 之中。  

这个帐号密码档 /usr/local/MyMember.txt 的样子可能如下例。其中冒号前的字串是使用者帐号,冒号之后的字串是经过不可还原加密的密码,编码一般都是使用传统的 DES 编码,密码的头二个字是类似种子的字元 (salt),本例中都是 3P。每行代表一位使用者。当然 Webmaster 要自行控制重覆帐号的情形。比较特殊是在 Win32 系统上架 Apache 的情形,冒号后的密码不可加密,因为 Win32 没有提供这方面的编码  
API,因此使用者密码以明码的方式存在。  


john1234:3PWudBlJMiwro  
queenwan:3PFNVLNPN9W0M  
noname00:3PEsXaJx5pk7E  
wilson49:3PjoWb0EnaG22  
rootboot:3PIt0snI6.84E  
sun_moon:3PvymMeNOc.x.  
nobody38:3PbskPKwV94hw  

在 Apache 1.3.6 版上,可以用 ~apache/bin/htpasswd 来产生单笔的帐号及密码,但对于需要大笔资料的商业站台,可能就需要自行写程式来处理了。UNIX 上需要呼叫 crypt() 来处理编码。  



在一切都设定好了之后,连线时就会在浏览器出现查核密码的视窗,如上图就是SEEDNet 的 MySEED 网站的使用者查核机制。在输入了帐号及密码后,浏览器会将它用BASE64 编码后,传到伺服器端。当然 BASE64 只是编码不是加密,因此在网路上这种传输的安全性仍然不高,还是有可能被中间的刽客截下,再将 BASE64 还原,这也是整个使用者认证中最美中不足的地方,或许日后支援摘要认证 (Digest) 及使用 MD5 编码后,可以解决这种问题。之后每一页仍然需要帐号及密码,只不过浏览器会帮你主动送出,不用再输入帐号密码了。这方面浏览器会保留到被关闭为止,下次重执行浏览器仍需输入第一次。  

在使用者数量少时,使用上述的方法轻松又省事。但是在使用者有数万人,甚至数十万人时,会发生整个伺服器的效率都被搜寻帐号密码下拖垮,可能读取一页需要数十秒到数分钟。这种情形再使用伺服器提供的密码查核机制就不太明智了。在Netscape Enterprise Server 上可能就可以使用 NSAPI 来开发自己的查核方式,在IIS 上也可以用 ISAPI 过滤器开发。写 C/C++ 程式呼叫 NSAPI/ISAPI 总是很累,在PHP 上有了另外的选择,这也是本节的主题。  


PHP 的 HTTP 相关函式库提供了 header() 的函式。许多 Web 伺服器与客户端的互动,都可以使用这个函式来变戏法。例如在某个 PHP 页面最开始处,也就是第一行或第二行,加入以下的程式,可以将使用者重导到作者的网页。  


<?php  
header("Location: http://wilson.gs");  
exit;  
?  


当然,在上述程式之后的 HTML 文字或者是 PHP 程式都永远不会出现在使用者端了。  

同样的道理,我们就用 header() 来变使用者认证的把戏。可以在 PHP 的最开头送出字串到使用者端,就会在使用者端出现下图的视窗。  


<?php  
Header("WWW-Authenticate: Basic realm="Member"");  
Header("HTTP/1.0 401 Unauthorized");  
?  

在程式中字串 realm="Member" 中的 Member 字样出现在图中,当然若使用中文字取代,浏览器端也会出现中文字,如上面的 MySEED 图。若 Web 站台使用者还有其它语文,如英文或日文,送出中文的 realm 字串似乎就比较不合适。无论如何,这都要视站台的性质及使用者定位而决定。  

当然这还是很粗糙,因为除了送出视窗后,就没有下文了,帐号输入正确也好,输入错误也罢,都不会有任何的结果。我们需要再更进阶的程式来处理。  

<

来源:http://www.tulaoshi.com/n/20160129/1494297.html

延伸阅读
标签: PHP
领导要我策划一个 网页设计 大赛和Flash创作大赛,要求必须实现在线报名和上传作品。通过FreeBSD+Apache+PHP+Mysql+FTP我实现了该要求。 实现在线报名和上传作品的思路是利用网页表单收集用户填写的资料存储到 Mysql 数据库 内,同时以该用户的注册名创建一个FTP上传账号并创建该用户的相应目录。 FTP服务器是系...
标签: Web开发
服务器代码: LoginServlet: package com; 代码如下: import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import...
标签: PHP
本文目的在于帮助那些刚刚入门的朋友,这是一篇颇为详细的安装说明本人全部调试通过,现在正在调试ORACLE部分,到时再与大家共享。 1.硬件环境: 硬盘:9.2 G ; 内存:128 M ; 网卡:EEpor100 2.软件 操作系统: RedHat 6.2 3.优化RedHat 6.2 安装时选择 ftp 和 dns 编辑文件 /etc/hosts 改为: 202.104.131.100 info....
标签: PHP
经过一夜的“奋战”,终于把ORACLE装上了,而且PHP脚本调用ORACLE数据库也成功了,现在就和大家共同分享。 (注:现在网上一些资料都说oracle8.1.6+php4.0.4+apache1.3.2可以成功 安装,可是我和一个朋友试过了几次都不能成功,如有高手请指教,最好详细一些。) 1.硬件环境: 硬盘:9.2 G ; 内存:128 M ; 网卡:EEpor100 2.软件 ...
标签: PHP
接触 solaris : 安装 apache + php + mysql 这是最简单的安装,请扩展成自己需要的 作者信息 ================================= Macro Zeng http://www.ctohome.com Before Start ======================================= install gtar : install gcc : gcc-2.8.1-sol7-sparc-local install gzip : gzip-1.3-sol7-sparc-loca...

经验教程

70

收藏

14
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部