给任意php文件添加登陆验证(basic authorization)

tetsai
原创声明
本文由tetsai原创,转载请注明来源
使用http协议自带的登陆验证
好处是不需要设计登陆界面,无html,无js,无css,纯属协议层的交互,对api接口友好,坏处是容易被扫描爆破。
如何实现basic authorization?
相关代码:
<?php session_start(); ?> <?php $users_global=array('tetsai'=>'xxxxxxx'); if($users_part) $users=array_merge($users_part,$users_global); else $users=$users_global; $auth=explode(' ', $_SERVER['HTTP_AUTHORIZATION']); if($auth[0]=='Basic'){ $auth=explode(':',base64_decode($auth[1])); $_SESSION['auth_user']=$auth[0]; $_SESSION['auth_pass']=$auth[1]; } if($_SESSION['auth_user']=='' || $_SESSION['auth_pass']!=$users[$_SESSION['auth_user']]){ header('HTTP/1.0 401 Authorization Required'); header('www-Authenticate: Basic realm= "backdoor"'); header('Content-Type: text/html; charset=UTF-8'); echo '<h1>illegal access</h1>'; die(); } ?>
利用session,只需要验证一次basic authorization 就可以了,把它保存成xxxx.php文件,需要保护的php直接加
<?php $users_part=array('guest'=>'xxxxxx'); include 'xxxx.php'; ?>
其中$users_global 为全局用户(相当于root用户,万能**,到哪里都可以用此用户登陆),$users_part 是局部用户,仅限当前受保护的php登录,比如你需要分享用户名**,但同时又因为用户名**跟后台有关系,就可以设置一个局部用户。
单用户:
array('这里是用户名'=>'这里是对应的**');
多用户:
array('这里是用户名'=>'这里是对应的**','这里是用户名'=>'这里是对应的**','这里是用户名'=>'这里是对应的**','这里是用户名'=>'这里是对应的**',...);
就可以了。
效果如下:


因为是https,所以本身这种**传输即使是明文,也是加密的,可以放心使用。