您的当前位置:首页使用PHP模拟HTTP认证

使用PHP模拟HTTP认证

2023-11-29 来源:热乐宠物网

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

    }

}

?>

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

Julie Meloni 是i2i Interactive的技术主管,及Linux和开放源代码社区的大力推动者。她撰写了很多关于PHP及其他技术的书籍,并成为对CNET Builder.com具有长期贡献的专家。

 

小编还为您整理了以下内容,可能对您也有帮助:

PHP HTTP 认证实例详解

HP来实现HTTP的强制认证是十分简单的,只需简单的几行代码就可以实现,下面我们来看一个例子,然后结合这里例子我向大家详细介绍一下PHP实现HTTP认证。
<?php
if(!isset($_SERVER['PHP_AUTH_USER']))
{
header('WWW-Authenticate:
Basic
realm="系统名称"');
header('HTTP/1.0
401
Unauthorized');
echo
'未通过HTTP认证.';
exit;
}
else
{
echo
'认证通过.';
echo
'用户名:
'.$_SERVER['PHP_AUTH_USER']."\n";
echo
'密码:
'.$_SERVER['PHP_AUTH_PW']."\n";
}
?>
1.实现说明
怎么样,看到上面的代码了吧,就这么几行添加到你的程序页面上就可以实现了.
它是通过利用header()函数向客户端浏览器发送”Authentication
Required”信息,强制其弹出一个用户名/密码输入窗口,当用户输入用户名和密码后,包含有URL的PHP脚本将会加上预定义变量PHP_AUTH_USER,
PHP_AUTH_PW和AUTH_TYPE然后再次调用,这三个变量分别表示用户名,密码和认证类型(从PHP5.0.1起开始支持”Basic”和”Digest”两种认证方式),它们被保存在$_SERVER(从HP>>4.1.0起有效)或$HTTP_SERVER_VARS(从PHP3起有效)数组中具体应用时,我们可以把验证的几行代码写成函数,只要判断到用户变量不存在或验证不正确就一直执行该函数并弹出窗口,而且还可以设置错误登录几次就不允许该用户访问,具体的使用大家使劲的发散思考吧.
2.注意事项:
1.这段代码必须放到程序的开始,且在其开始执行之前不能有任何输出(若有输出则需要使用输出缓冲函数才行).
2.PHP的HTTP认证机制仅在PHP以Apache模块方式运行时才有效,这个容易理解,它本身是HTTP强制认证,肯定是不适合于CGI版本,不能在命令行下执行的.
3.header发送标头代码时请小心.为了对所有的客户端保证兼容性,关键字”Basic”的第一个字母必须大写为”B”,分界字符串必须用双引号引用(不能是单引号);在HTTP/1.0和401之间必须有且仅有一个空格.
4.在上面列子中,仅输出了用户名和密码,而在实际系统中则可按照登录验证流程进行与数据库或其他方式进行判断和验证.
5.从PHP4.3.0起,为防止有人通过编写脚本来从页面上获取密码,当外部认证对特定页面有效,并且安全模式被开启时,PHP_AUTH变量将不会被设置.可以用REMOTE_USER来辨别外部认证的用户,用AuthType指令来判断外部认证机制是否有效.
6.要想让HTTP认证能够在IIS下工作,PHP配置选项cgi.rfc2616_headers必须设置为0(默认值).
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP HTTP 认证实例详解

HP来实现HTTP的强制认证是十分简单的,只需简单的几行代码就可以实现,下面我们来看一个例子,然后结合这里例子我向大家详细介绍一下PHP实现HTTP认证。
<?php
if(!isset($_SERVER['PHP_AUTH_USER']))
{
header('WWW-Authenticate:
Basic
realm="系统名称"');
header('HTTP/1.0
401
Unauthorized');
echo
'未通过HTTP认证.';
exit;
}
else
{
echo
'认证通过.';
echo
'用户名:
'.$_SERVER['PHP_AUTH_USER']."\n";
echo
'密码:
'.$_SERVER['PHP_AUTH_PW']."\n";
}
?>
1.实现说明
怎么样,看到上面的代码了吧,就这么几行添加到你的程序页面上就可以实现了.
它是通过利用header()函数向客户端浏览器发送”Authentication
Required”信息,强制其弹出一个用户名/密码输入窗口,当用户输入用户名和密码后,包含有URL的PHP脚本将会加上预定义变量PHP_AUTH_USER,
PHP_AUTH_PW和AUTH_TYPE然后再次调用,这三个变量分别表示用户名,密码和认证类型(从PHP5.0.1起开始支持”Basic”和”Digest”两种认证方式),它们被保存在$_SERVER(从HP>>4.1.0起有效)或$HTTP_SERVER_VARS(从PHP3起有效)数组中具体应用时,我们可以把验证的几行代码写成函数,只要判断到用户变量不存在或验证不正确就一直执行该函数并弹出窗口,而且还可以设置错误登录几次就不允许该用户访问,具体的使用大家使劲的发散思考吧.
2.注意事项:
1.这段代码必须放到程序的开始,且在其开始执行之前不能有任何输出(若有输出则需要使用输出缓冲函数才行).
2.PHP的HTTP认证机制仅在PHP以Apache模块方式运行时才有效,这个容易理解,它本身是HTTP强制认证,肯定是不适合于CGI版本,不能在命令行下执行的.
3.header发送标头代码时请小心.为了对所有的客户端保证兼容性,关键字”Basic”的第一个字母必须大写为”B”,分界字符串必须用双引号引用(不能是单引号);在HTTP/1.0和401之间必须有且仅有一个空格.
4.在上面列子中,仅输出了用户名和密码,而在实际系统中则可按照登录验证流程进行与数据库或其他方式进行判断和验证.
5.从PHP4.3.0起,为防止有人通过编写脚本来从页面上获取密码,当外部认证对特定页面有效,并且安全模式被开启时,PHP_AUTH变量将不会被设置.可以用REMOTE_USER来辨别外部认证的用户,用AuthType指令来判断外部认证机制是否有效.
6.要想让HTTP认证能够在IIS下工作,PHP配置选项cgi.rfc2616_headers必须设置为0(默认值).
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

php http验证 ?

你看看用这个得行不得行,我朋友写的,我用了一下,还行!!

session_start();

Header("Content-type: image/PNG");

$im = imagecreate(50,30);

$back = ImageColorAllocate($im, 0,0,0);

imagefill($im,0,0,$back);

srand((double)microtime()*1000000);

for($i=0;$i<4;$i++){

$font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255));

$authnum=rand(1,9);

$vcodes.=$authnum;

imagestring($im, 5, 4+$i*10, 8,$authnum, $font);

}

for($i=0;$i<100;$i++)

{

$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));

imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);

}

ImagePNG($im);

ImageDestroy($im);

$_SESSION['vcode'] = $vcodes;

热乐宠物网还为您提供以下相关内容希望对您有帮助:

在PHP中如何模拟HTTP_USER_AGENT

php//client$ch = curl_init();curl_setopt_array($ch, array(CURLOPT_URL =&gt; 'http://localhost/ua.php',CURLOPT_USERAGENT =&gt; "YeRenChai_v1.0",CURLOPT_RETURNTRANSFER =&gt; True,CURLOPT_FOLLOWLOCATION =&gt; True,));$response = curl_exec($ch);if(!$response) exit(curl_error($ch...

php中http验证[header('HTTP/1.0 401 Unauthorized');]

sql = "SELECT * FROM tbl_user WHERE AccountID = '$_SERVER[PHP_AUTH_USER]' AND AccountPassword = '$_SERVER[PHP_AUTH_PW]'";这个执行语句改成这样

php怎么响应客户端发送http请求

使用原生的PHP HTTP函数:PHP提供了一些原生的HTTP函数,如header()、setcookie()、http_response_code()等,可以使用这些函数来响应HTTP请求。使用PHP框架:PHP框架(如Laravel、Symfony等)提供了许多处理HTTP请求和响应的功能,可以方便地构建Web应用程序。使用框架可以简化开发流程,提高代码的可维护性和安...

PHP curl 模拟 请求 中我添加 Authorization 认证 但是这个认证内容我...

代码如下 crl = curl_init();headr = array();headr[] = 'Authorization: '.$douban_user_name.' '.$accesstoken;curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);curl_setopt($crl, CURLOPT_POST,true);rest = curl_exec($crl);curl_close($crl);print_r($rest);

怎么用PHP发送HTTP请求

= new URLLoader(); //建立事件的侦听 configureListeners(_loader); //建立urlloader的数据 var loaderData:URLVariables = new URLVariables(); loaderData.userName = "kidliu"; loaderData.passWord = "123456"; //建立请求地址 var url:String = "localhost/login.php"; ...

php 调用http接口 出现错误

122.Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request.Please contact the server administrator at admin@phpStudy.net to inform them of the time this error occurred, and the actions you performed just before this ...

php curl 401时怎么获取body

CURLOPT_URL: 这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项。 CURLOPT_USERPWD: 传递一个形如[username]:[password]风格的字符串,作用PHP去连接。 CURLOPT_PROXYUSERPWD: 传递一个形如[username]:[password] 格式的字符串去连接HTTP代理。 CURLOPT_RANGE: 传递一个你想指定...

在WAMP上用PHP代码怎么实现访问http链接,并实时记录访问状态(包括是否...

php需要使用curl或者file_get_contents来获取远程url的状态,支予插入数据库这个很简单吧。

php网站http怎么变成https

服务器+域名+SSL数字证书=HTTPS PHP网站升级HTTPS流程:普通的HTTP网站搭建完毕,并且可以访问。确定升级HTTPS的域名。Gworg申请后根据Gworg要求完成SSL证书认证。大约15分钟获得SSL数字证书。配置到虚拟主机或云服务器就可以实现HTTPS。解决办法:如果虚拟主机(空间)不支持,也可以让Gworg提供接入,只需解析...

如何利用 PHP 解决 HTTP 的无状态本质?

最主要的俩各选择是 session 和 cookie。使用 session 的方法是在每一页的开始加上 session_start(),然后利用 $_SESSION 散列表来储存 session 变量。至于 cookie 你只需记着一个原则:在输出任何文字之前调用 set_cookie() 函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 变量。还有一...

Top