在phpMyAdmin使用用户口令登陆

phpmyadmin 使用过phpMyAdmin的人知道,在phpMyAdmin中,使用文件config.inc.php保存用户名和密码,当需要更换用户或用户口令更改时,必须修改config.inc.php文件,然后再上传,特别的不方便。更有时,为了修改MYSQL库或表而使用root账号,如果这时其它网站的自动搜擎系统搜索到index.php并继续执行其中的每一步的话,是相当危险的。为此需要用户登陆机制,在每次使用时,输入用户名和口令,这样会安全得多。

以下是我在管理过程中,根据实际需要,对phpMyAdmin做的一些更改,为了尽量不影响原来phpMyAdmin的结构,我在phpMyAdmin的基础上增加了一个文件index0.php,仅仅修改了一个文件config.inc.php,对phpMyAdmin没有一点影响,既可以使用原来的phpMyAdmin,也可以使用新的用户口令登陆机制。

以下为两个文件列表,将这两个文件拷贝到phpMyAdmin目录,执行index0.php即可,该程序在Apache + PHP + MYSQL 和 IIS5 + PHP + MYSQl 和 PWS + PHP + MYSQL下正常执行。

phpMyAdmin 下载:

A set of PHP3-scripts to adminstrate MySQL over the WWW.

Version 2.1.0 - 08/06/2000

http://www.phpwizard.net/projects/phpMyAdmin/

index0.php文件:

<html><head><title>MySQL 维护</title></head><body>
<!--

<?php
//编码,防止在地址栏上显示
function b2h($string) {
return(bin2hex(strrev($string)));
}

//反编码,防止在地址栏上显示
function h2b($string) {
$stringtmp="";
for($i=0;$i<strlen($string);$i+=2) {
$stringtmp .= pack("C",hexdec(substr($string,$i,2)));
}
return(strrev($stringtmp));
}
global $PHP_SELF;

if (1==0) {
echo "-->PHP运行不正常,请检查<!--";
} else {
echo "--".">";
}
?>

<?php
if ($step=="") {
?>

<p>欢迎使用</p>本工具用于维护MySQL数据库</p>
<p><a href="<? echo basename($PHP_SELF); ?>?step=2">下一步 -></a></p>

<?php
}
if ($step==2) {

$userfiletmp="/tmp/~userfile/~tmp.inc";
if (file_exists($userfiletmp)) {
include $userfiletmp;
//$dbservertype,$servername,$dbusername,$dbpassword,$dbname;
$dbservertype=h2b($dbservertype);
$servername=h2b($servername);
$dbusername=h2b($dbusername);
$dbname=h2b($dbname);
$curtime=h2b($curtime);
if (time()-$curtime<120){
$dbpassword=h2b($dbpassword);
}else{
$dbpassword="";
}
}else{
$dbservertype="mysql";
$servername="localhost";
$dbusername="";
$dbpassword="";
$dbname="";
}

$dbservertype=($dbservertype==""?"mysql":$dbservertype);
$servername=($servername==""?"localhost":$servername);

?>

<p>填入连接信息</p></p>
<div align="center">
<center>
<table border="1" width="53%" height="111">
<tr>
<td width="100%" height="105">

<form method="POST" action="<? echo basename($PHP_SELF); ?>?step=3">

<div align="center">
<center>
<table border="1" width="83%" height="60">
<tr>
<td width="34%" height="10">主机类型:</td>
<td width="66%" height="10"><input type="text" name="dbservertype" size="20" value="<? echo $dbservertype; ?>"></td>
</tr>
<tr>
<td width="34%" height="10">主机地址:</td>
<td width="66%" height="10"><input type="text" name="servername" size="20" value="<? echo $servername; ?>"></td>
</tr>
<tr>
<td width="34%" height="10">用户名称:</td>
<td width="66%" height="10"><input type="text" name="dbusername" size="20" value="<? echo $dbusername; ?>"></td>
</tr>
<tr>
<td width="34%" height="16">密码:</td>
<td width="66%" height="16"><input type="password" name="dbpassword" size="20" value="<? echo $dbpassword; ?>"></td>
</tr>
<tr>
<td width="34%" height="16">数据库名:</td>
<td width="66%" height="16"><input type="text" name="dbname" size="20" value="<? echo $dbname; ?>"></td>
</tr>
</table>
</center>
</div>
<p align="center"><input type="submit" value="下一步" name="next"><input type="reset" value="清 除" name="reset"></p>
</form>
</td>
</tr>
</table>
</center>
</div>

<?php
}
if ($step==3) {
$dbservertype=trim($dbservertype);
$servername=trim($servername);
$dbusername=trim($dbusername);
$dbpassword=trim($dbpassword);
$dbname=trim($dbname);

echo "<p>确认是否正确:</p>n";
echo "<p><b>Database server type:</b> $dbservertype</p>n";
echo "<p><b>Database server hostname / IP address:</b> $servername</p>n";
echo "<p><b>Database username:</b> $dbusername</p>n";
echo "<p><b>Database password:</b> ******</p>n";
echo "<p><b>Database name:</b> $dbname</p>n";
echo "<p>以上参数正确才能继续</p>";

$dbservertype=b2h($dbservertype);
$servername=b2h($servername);
$dbusername=b2h($dbusername);
$dbpassword=b2h($dbpassword);
$dbname=b2h($dbname);

$userfiletmp="/tmp/~userfile/~tmp.inc";
if (!file_exists(dirname($userfiletmp))) {
mkdir(dirname($userfiletmp), 0700);
}
$handertmp=fopen($userfiletmp,"w");
fputs($handertmp,"<?phpn");
fputs($handertmp,"$"."dbservertype="$dbservertype";n");
fputs($handertmp,"$"."servername="$servername";n");
fputs($handertmp,"$"."dbusername="$dbusername";n");
fputs($handertmp,"$"."dbpassword="$dbpassword";n");
fputs($handertmp,"$"."dbname="$dbname";n");
$curtime=time();
$curtime=b2h($curtime);
fputs($handertmp,"$"."curtime="$curtime";n");
fputs($handertmp,"?>n");
fclose($handertmp);

//echo "<p><a href="".basename($PHP_SELF)."?step=4&servername=$servername&dbusername=$dbusername&dbpassword=$dbpassword&dbname=$dbname">下一步 -></a></p>";
echo "<p><a href="index.php">下一步 -></a></p>";
}

if ($step==4) {
}

if ($step==44) {
$step=0;
$userfiletmp="/tmp/~userfile/~tmp.inc";
if (file_exists($userfiletmp)) {
include $userfiletmp;
//重新保存文件,去掉密码
$dbpassword="";
$handertmp=fopen($userfiletmp,"w");
fputs($handertmp,"<?phpn");
fputs($handertmp,"$"."dbservertype="$dbservertype";n");
fputs($handertmp,"$"."servername="$servername";n");
fputs($handertmp,"$"."dbusername="$dbusername";n");
fputs($handertmp,"$"."dbpassword="$dbpassword";n");
fputs($handertmp,"$"."dbname="$dbname";n");
$curtime=time();
$curtime=b2h($curtime);
fputs($handertmp,"$"."curtime="$curtime";n");
fputs($handertmp,"?>n");
fclose($handertmp);
echo "</p></p><center><a href="".basename($PHP_SELF)."">成功注销,请重新登陆</a></center>";
}
}
?>

<?php
if ($step>1) {
echo "</p><a href=javascript:location.reload()>刷新</a>";
echo " <a href=javascript:history.back()>上一步</a>";
}
?>

<?php
echo "</"."body>";
echo "<"."!--";
?>

-->
</html>

config.inc.php 文件

<?php
/* $Id: config.inc.php,v 1.28 2000/07/13 13:52:48 tobias Exp $ */

//编码,防止在地址栏上显示
function b2h($string) {
return(bin2hex(strrev($string)));
}

//反编码,防止在地址栏上显示
function h2b($string) {
$stringtmp="";
for($i=0;$i<strlen($string);$i+=2) {
$stringtmp .= pack("C",hexdec(substr($string,$i,2)));
}
return(strrev($stringtmp));
}

/*
* phpMyAdmin Configuration File
* All directives are explained in Documentation.html
*/

// The $cfgServers array starts with $cfgServers[1]. Do not use $cfgServers[0].
// You can disable a server config entry by setting host to ''.
$cfgServers[1]['host'] = 'localhost'; // MySQL hostname
$cfgServers[1]['port'] = ''; // MySQL port - leave blank for default port
$cfgServers[1]['adv_auth'] = false; // Use advanced authentication?
$cfgServers[1]['stduser'] = 'root'; // MySQL standard user (only needed with advanced auth)
$cfgServers[1]['stdpass'] = ''; // MySQL standard password (only needed with advanced auth)
$cfgServers[1]['user'] = 'root'; // MySQL user (only needed with basic auth)
$cfgServers[1]['password'] = ''; // MySQL password (only needed with basic auth)
$cfgServers[1]['only_db'] = ''; // If set to a db-name, only this db is accessible
$cfgServers[1]['verbose'] = ''; // Verbose name for this host - leave blank to show the hostname

$userfiletmp="/tmp/~userfile/~tmp.inc";
if (file_exists($userfiletmp)) {
include $userfiletmp;
//$servername,$dbusername,$dbpassword,$dbname;
$dbservertype=h2b($dbservertype);
if ($dbservertype=="mysql"){
$servername=h2b($servername);
$dbusername=h2b($dbusername);
$dbpassword=h2b($dbpassword);
$dbname=h2b($dbname);
$curtime=h2b($curtime);
if (time()-$curtime<600){
$cfgServers[1]['host'] = $servername; // MySQL hostname
$cfgServers[1]['user'] = $dbusername; // MySQL user (only needed with basic auth)
$cfgServers[1]['password'] = $dbpassword; // MySQL password (only needed with basic auth)
$cfgServers[1]['only_db'] = $dbname; // If set to a db-name, only this db is accessible

//重新保存文件,以便更新时间
$dbservertype=b2h($dbservertype);
$servername=b2h($servername);
$dbusername=b2h($dbusername);
$dbpassword=b2h($dbpassword);
$dbname=b2h($dbname);

$handertmp=fopen($userfiletmp,"w");
fputs($handertmp,"<?phpn");
fputs($handertmp,"$"."dbservertype="$dbservertype";n");
fputs($handertmp,"$"."servername="$servername";n");
fputs($handertmp,"$"."dbusername="$dbusername";n");
fputs($handertmp,"$"."dbpassword="$dbpassword";n");
fputs($handertmp,"$"."dbname="$dbname";n");
$curtime=time();
$curtime=b2h($curtime);
fputs($handertmp,"$"."curtime="$curtime";n");
fputs($handertmp,"?>n");
fclose($handertmp);

}else{
echo "</p>账号参数已经过期,请重新输入!</p>";
echo "<a href="index0.php" target="_top">登陆</a>";
die("</p><b>程序终止</b>");
}
}
}

$cfgServers[2]['host'] = '';
$cfgServers[2]['port'] = '';
$cfgServers[2]['adv_auth'] = false;
$cfgServers[2]['stduser'] = '';
$cfgServers[2]['stdpass'] = '';
$cfgServers[2]['user'] = '';
$cfgServers[2]['password'] = '';
$cfgServers[2]['only_db'] = '';
$cfgServers[2]['verbose'] = '';

$cfgServers[3]['host'] = '';
$cfgServers[3]['port'] = '';
$cfgServers[3]['adv_auth'] = false;
$cfgServers[3]['stduser'] = '';
$cfgServers[3]['stdpass'] = '';
$cfgServers[3]['user'] = 'root';
$cfgServers[3]['password'] = '';
$cfgServers[3]['only_db'] = '';
$cfgServers[3]['verbose'] = '';

// If you have more than one server configured, you can set $cfgServerDefault
// to any one of them to autoconnect to that server when phpMyAdmin is started,
// or set it to 0 to be given a list of servers without logging in
// If you have only one server configured, $cfgServerDefault *MUST* be
// set to that server.
$cfgServerDefault = 1; // Default server (0 = no default server)
$cfgServer = '';
unset($cfgServers[0]);

$cfgManualBase = "http://www.mysql.com/documentation/mysql/bychapter/";

$cfgConfirm = true;
$cfgPersistentConnections = false;

$cfgBorder = "0";
$cfgThBgcolor = "#D3DCE3";
$cfgBgcolorOne = "#CCCCCC";
$cfgBgcolorTwo = "#DDDDDD";
$cfgMaxRows = 30;
$cfgMaxInputsize = "300px";
$cfgOrder = "ASC";
$cfgShowBlob = true;
$cfgShowSQL = true;

require("chinese_gb.inc.php");

$strWelcome="<a href="index0.php?step=44" target="_top">注销账户</a> <a href="index0.php" target="_top">重新登陆</a></p>$strWelcome";

$cfgColumnTypes = array(
"TINYINT",
"SMALLINT",
"MEDIUMINT",
"INT",
"BIGINT",
"FLOAT",
"DOUBLE",
"DECIMAL",
"DATE",
"DATETIME",
"TIMESTAMP",
"TIME",
"YEAR",
"CHAR",
"VARCHAR",
"TINYBLOB",
"TINYTEXT",
"TEXT",
"BLOB",
"MEDIUMBLOB",
"MEDIUMTEXT",
"LONGBLOB",
"LONGTEXT",
"ENUM",
"SET");

$cfgFunctions = array(
"ASCII",
"CHAR",
"SOUNDEX",
"CURDATE",
"CURTIME",
"FROM_DAYS",
"FROM_UNIXTIME",
"NOW",
"PASSWORD",
"PERIOD_ADD",
"PERIOD_DIFF",
"TO_DAYS",
"USER",
"WEEKDAY",
"RAND");

$cfgAttributeTypes = array(
"",
"BINARY",
"UNSIGNED",
"UNSIGNED ZEROFILL");

// Setting magic_quotes_runtime - do not change!
set_magic_quotes_runtime(0);
?>

如有引用,请注明高山雪和alpsnow@china.com

时间: 2024-09-30 12:35:49

在phpMyAdmin使用用户口令登陆的相关文章

“在phpMyAdmin使用用户口令登陆”补充

phpmyadmin 重要注意:IIS5 + PHP + MYSQl 和 PWS + PHP + MYSQL环境请修改 由于调试时,我的机器在运行php的磁盘上有tmp目录,故没有发生意外,有网友来信说PWS环境下不能运行,原因是这样的,由于在windows系统下,可能在运行php的磁盘上没有tmp目录,从而运行时建立目录"/tmp/~userfile/"不可能成功,提示出错.你可以把全篇文章中的$userfiletmp="/tmp/~userfile/~tmp.inc&qu

Linux下MySQL忘记超级用户口令的解决办法

解决办法一 MySQL忘记超级用户口令的解决办法  如果MySQL正在运行,首先杀之: killall -TERM mysqld. 启动MySQL:  代码如下 复制代码 bin/safe_mysqld --skip-grant-tables & 就可以不需要密码就进入MySQL了 然后就是  代码如下 复制代码 >use mysql >update user set password=password("new_pass") where user="ro

mysql 添加用户,授权,远程登陆,远程导入导出数据库,用户及权限查询,新增用户无法登陆,

首先提示一点,当使用新增用户登陆失败: root@controller:~# mysql -h localhost -ukeystone -ppassword  ERROR 1045 (28000): Access denied for user 'keystone'@'localhost' (using password: YES)解决方法:  增加普通用户后,执行:  mysql> use mysql mysql> delete from user where user=''; mysql

保护用户口令的算法及实现

算法 读者总是问我怎样才能在他们的站点上通过使用JavaScript来保护用户的登陆口令,我的第一个反应就是告诉他们使用安全套接层(Secure Sockets Layer,SSL).当使用正确时,SSL是安全敏感的Web程序最好的解决方法.然而,一些开发者在发布对安全不那么敏感的Web程序时更愿意让用户登陆时不使用SSL. Web程序使用一种称为会话状态管理(session state management)的技术来跟踪浏览器与服务器之间的交互,正如超文本传输协议所规定的那样,每个浏览器的请求

用户口令保护新招

经常有读者询问,如何在其站点上使用JavaScript,以确保用户登录时的口令不会外泄.对于这样的问题,我的第一反应就是告诉他们使用SSL(安全套接字协议层).如使用正确,SSL对于安全要求较高的Web应用是最佳的解决方案.但是,也有相当一部分开发者,他们的Web应用对安全性的要求并不高,因此他们并不希望访问者使用SSL 登录. Web应用一般使用一种叫做"会话状态管理"(Session State Management) 的技术来追踪和管理浏览器与服务器之间的相互活动.因为每个浏览器

phpmyadmin教程:使用phpmyadmin创建用户、数据库表的方法

phpmyadmin作为管理Mysql数据库的利器,越来越受到PHP网站开发建设者的欢迎,在此之前我介绍了两篇phpmyadmin入门教程:phpmyadmin3安装配置图解教程和允许phpmyadmin空密码登录的配置方法,今天继续phpmyadmin教程学习,介绍如何使用phpmyadmin创建添加新用户进行用户权限设置以及如何使用phpmyadmin创建数据库表的方法. 在使用phpmyadmin管理Mysql数据库之前,请确保Mysql服务已启动,即 1 net start mysql

技巧:ASP.NET 2.0防止同一用户同时登陆

asp.net|技巧 要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在.在这里使用一个cache存放已经登陆的用户名,但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了,也就是设置一个cache的时间.这个时间可以跟用户的session值联系起来,刚好当用户session值失效的时候该用户在cache里面的信息也会被清空.这样就达到了防止同时登陆的效果,具体代码如下: 放在登陆成功的地方: stri

ASP.NET 2.0实现防止同一用户同时登陆

asp.net 要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在.在这里使用一个cache存放已经登陆的用户名,但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了,也就是设置一个cache的时间.这个时间可以跟用户的session值联系起来,刚好当用户session值失效的时候该用户在cache里面的信息也会被清空.这样就达到了防止同时登陆的效果,具体代码如下: 放在登陆成功的地方: string

在主页中利用ASP技术实现用户口令的验证

在主页中利用ASP技术实现用户口令的验证 ---- 大家知道在一般的WEB 站点中,用户的访问是不受限制的,即可以访问WEB 站点上的任何信息,且访问信息的次序是不受限制的. 以http://www.xyz.com为例,用户可以访问 http://www.xyz.com,可以访问http://www.xyz.com/custom.htm.这两页访问的次序没有限制,即可以先访问http://www.xyz.com/custom.htm,也可以先访问 http://www.xyx.com. 这种灵活