浏览器Basic Auth方式认证的phpMyAdmin自动登录

一、需求
自动登录 phpMyAdmin。最终能够解决自动登录所有使用 Basic Auth 方式认证的网页。

.
二、phpMyAdmin 的四种认证登陆方式
1.config 配置文件。直接将允许登录的用户名和密码写在 config.inc.php 配置文件中。
2.cookie。最常用的方式,通过填写首页表单进行登录。
3.http。HTTP Basic Authentication 方式,使用浏览器的弹出式对话框进行登录。与 cookie 方式的区别主要在于用户体验。
4.signon。单点登录,适用于系统集成。用户登录了某系统后,不必再输用户名密码即可以一键登录 phpMyAdmin。
参考:http://wiki.phpmyadmin.net/pma/Auth_types

按道理 signon 方式应该是满足需求的首选方案,只不过项目开发总是有妥协和迁就,要尽量少干预现有系统的运行。另外,在实现 signon 方式登录的同时,还需要保留原有的用户输用户名密码的登录方式,即备用登录方案。这就将问题复杂化了。

三、什么是 Basic Auth
现有系统使用了 Basic Auth 方式,于是我研究了怎样能够在这种情况下也一键登录。

在访问一个需要 HTTP Basic Authentication 的 URL 时,如果你没有提供用户名和密码,服务器就会返回 401,这时浏览器会提示你输入用户名和密码。例子如下:

 代码如下 复制代码
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.1 401 Unauthorized');
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>

保存为login.php,浏览 http://localhost/login.php 查看效果。

浏览器Basic Auth:IE9和Chrome的弹出式认证对话框
在浏览器弹出的窗口中输入用户名密码,如果使用 Chrome 开发者工具(或者 Firebug)查看,会发现其实它只是多发送了一个类似下面的请求头:

Authorization: Basic bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=
四、Basic Auth 认证的自动登录解决方案
要想通过认证,原则上有 2 种方法

•一是在请求头中添加 Authorization(可用 Javascript 来实现):
Authorization: “Basic 用户名和密码的base64加密字符串”
•二是在 url 中添加用户名和密码(IE 不支持):
http://username:password@domain.com/login.php

用 js 添加请求头可以使用 XMLHttpRequest,实现代码如下:

 代码如下 复制代码

<html>
<head>
<title>login</title>
<script>
function login() {
    var username = document.getElementById("username").value;
    var password = document.getElementById("password").value;
 
    xhr = new XMLHttpRequest();
    xhr.open("POST", "http://localhost/login.php", false, username, password);
    xhr.send(null);
 
    return xhr.status == 200;
}
</script>
</head>
<body>
<form action="http://localhost/login.php" method="post" onsubmit="return login();">
    <fieldset>
    <legend>Login</legend>
    <label for="username">username:</label>
    <input type="text" id="username" name="username">
 
    <label for="password">password:</label>
    <input type="password" id="password" name="password">
 
    <input type="submit" value="subject">
    </fieldset>
</form>
</body>
</html>

Basic Auth 认证的自动登录解决方案,总结下——

1、用户名密码直接写在 URL 里。

缺点:不够安全,且 IE 不支持。

2、写一个登陆表单,php 将用户名密码填到表单中,然后页面 onload 时 js 生成 Authorization 请求头提交

缺点:本系统和 phpMyAdmin 必须在同一个域。例如本系统在 admin.domain.com,而 phpMyAdmin 在 phpmyadmin.domain.com 这种情况 js 是无法跨域提交的。

3、本系统将用户名密码 post 到 phpMyAdmin 所在域的一个表单,那个表单再拿来用 js 登陆。

缺点:需要到 phpMyAdmin 所在域新增一个页面实现跨域。

时间: 2024-09-19 15:23:22

浏览器Basic Auth方式认证的phpMyAdmin自动登录的相关文章

phpMyAdmin自动登录和取消自动登录的配置方法_php实例

一.如何设置phpMyAdmin自动登录? 首先在根目录找到config.sample.inc.php复制一份文件名改为config.inc.php(如果已经存在 config.inc.php 文件,则直接修改该文件即可).打开config.inc.php 找到 $cfg['Servers'][$i]['auth_type'],将 复制代码 代码如下: $cfg['Servers'][$i]['auth_type'] = 'cookie'; 改成 复制代码 代码如下: $cfg['Servers

JS ajax实现Basic Auth认证通过方法

Basic Auth简单点说明就是每次请求API时都提供用户的username和password. .这种方式优点和缺点都很明显. 优点: u 使用非常简单, u 开发和调试工作简单, u 没有复杂的页面跳转逻辑和交互过程: u 更利于发起方控制: 缺点: u 安全性低,每次都需要传递用户名和密码,用户名和密码很大程度上存在被监听盗取的可能: u 同时应用本地还需要保存用户名和密码,在应用本身的安全性来说,也存在很大问题: u 开放平台服务商出于自身安全性的考虑(第三方可以得到该服务商用户的账号

java 发送带Basic Auth认证的http post请求实例代码_java

构造http header private static final String URL = "url"; private static final String APP_KEY = "key"; private static final String SECRET_KEY = "secret"; /** * 构造Basic Auth认证头信息 * * @return */ private String getHeader() { String

QQ浏览器怎么开启安全认证?

  事实上,QQ浏览器就已经考虑到用户上网的安全需求,并且提供了安全认证服务.那么QQ浏览器怎么开启安全认证呢? 步骤1:首先用户需要打开进入QQ浏览器的界面菜单. 步骤2:然后用户请点击界面右上方的三条杠图标(即"设置"功能)按钮,在弹出的下拉菜单处,再点击选择"QQ浏览器设置". 步骤3:接下来用户请在弹出的"设置"页面窗口中,点击"安全与隐私"选项卡,点击勾选"开启安全网址认证",并且一键点击&quo

login-登录模块实现自动登录功能对IE浏览器失效的问题

问题描述 登录模块实现自动登录功能对IE浏览器失效的问题 有没有人在做web项目过程中遇到过类似的问题, 就是登录模块有一个自动登录的功能,勾选后下次打开浏览器进入网页时,只要cookies没过期 就不需要再次登录.很多网站都有这个功能吧 在chrome浏览器下没有发生任何问题, 但是用IE浏览器就会出现自动登录失效的问题, 能在chrome下成功,说明程序主体啊啥都没问题的, 问题就在在于IE浏览器!(又是令人发指的IE! 但我不知道问题具体会出在哪一步, 我自己猜想有3方面的可能: 1是可能

自动登录-IE浏览器保存cookies失效如何解决

问题描述 IE浏览器保存cookies失效如何解决 我尝试了网上所有的设置IE浏览器保存cookies选项的办法,都没有解决问题 于是我想会不会是IE浏览器的cookies机制同chrome不一样? 因为同样的一段程序,实现的是自动登录功能, 在chrome下完全正常,说明代码是没错的, 而到了IE浏览器下就无法自动登录,在尝试完所有设置IE浏览器选项的办法都无效后, 我开始怀疑IE浏览器的cookies机制不同, 以至于同样一段代码能正常从chrome中存数据读数据,到了IE下就不行 求针对I

【问题】在浏览器输入localhost:8080/admin,如何自动跳转?

问题描述 [问题]在浏览器输入localhost:8080/admin,如何自动跳转?1.前台:自动跳转(比如,输入 localhost:8080,然后跳转到 localhost:8080/index.jsp),是通过web.xml里配置的,如下:<welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> &l

Twitter终止Basic Auth验证方法支持

http://www.aliyun.com/zixun/aggregation/17197.html">北京时间8月31日凌晨消息,据国外媒体报道,Twitter员工道格拉斯·鲍曼(Douglas Bowman)近日在其Twitter中表示,Twitter将在8月31日终止对Basic Auth验证方法的支持,建议开发者使用OAuth. OAuth相比Basic Auth有几点好处:第一,开发者不必担心由于程序漏洞泄露用户信息. 第二,开发者不必担心用户更改密码.即使用户更改密码,通过OA

oracle的操作系统认证(connect as sysdba)登录方式

有一种oracle的登录方式是操作系统验证登录方式,即常说的OS验证登录方式,在SQL server中也有这种方式. 有些朋友经常使用connect / as sysdba登录,但不知道为什么没有提供用户名和密码就得到了sysdba的权限.还认为这样是不是不安全呢? Oracle在常见的多用户操作系统上都可以进行OS认证方式来登录.例如solaris,windows等等. 下面以常见的windows操作系统来说明看一下这个操作系统认证方式登录的原理.如果你的机器可以使用connect / as