作者:摄影爱好者Summer_100 | 来源:互联网 | 2014-05-05 09:29
在专业的Web站台上,经常会需要应用者的帐号及密码,也就是身份确认的动作。早期的NCSAhttpd伺服器并没有供给这项应用者确认的功效,Webmaster只能用手工打造一个身份确认的CG
在专业的 Web 站台上,经常会需要应用者的帐号及密码,也就是身份确认的动作。早期的 NCSA httpd 伺服器并没有供给这项应用者确认的功效,Webmaster 只能用手工打造一个身份确认的 CGI 程式。
自 CERN httpd 之后的 Web 伺服器大部份都供给了应用者身份确认的功效。仅管每套 Web 伺服器的设定都不太雷同,但在设定上都大同小异。
以下就是 Apache 伺服器上的应用者身份确认的设定。
AuthType Basic
AuthName MyMember
AuthUserFile /usr/local/MyMember.txt
Options Includes ExecCGI
require valid-user
在这个例子中,当应用者在看 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 上有了另外的选择,这也是本节的主题。