如何保护phpMyAdmin

And*_*rei 59 php mysql security ubuntu phpmyadmin

我注意到我的网站有一些奇怪的请求试图找到phpmyadmin,就像

/phpmyadmin/
/pma/
Run Code Online (Sandbox Code Playgroud)

等等

现在我通过apt在Ubuntu上安装了PMA,并希望通过不同于/ phpmyadmin /的webaddress访问它.我该怎么做才能改变它?

谢谢


更新

对于Ubuntu 9.10和Apache2,相应的设置位于文件中/etc/apache2/conf.d/phpmyadmin.conf,该文件是指向的链接/etc/phpmyadmin/apache.conf.该文件包含

Alias /phpmyadmin /usr/share/phpmyadmin
Run Code Online (Sandbox Code Playgroud)

/phpmyadmin如果想要避免不必要的活动,第一个应该改为不同的东西,例如:

Alias /secret /usr/share/phpmyadmin
Run Code Online (Sandbox Code Playgroud)

roo*_*ook 81

最大的威胁是攻击者可以利用诸如此类的漏洞; 目录遍历,或使用SQL注入调用load_file()以读取配置文件中的纯文本用户名/密码,然后使用phpmyadmin或通过tcp端口3306登录.作为测试者,我使用此攻击模式来破坏系统.

这是一个锁定phpmyadmin的好方法:

  • 不要允许远程根部登录!而是可以将phpmyadmin配置为使用"Cookie Auth"来限制用户可以访问系统的内容.如果您需要某些root权限,请创建一个可以添加/删除/创建但没有grant或的自定义帐户file_priv.
  • file_priv从每个帐户中删除权限.file_priv是MySQL中最危险的权限之一,因为它允许攻击者读取文件或上传后门.
  • 有权访问phpmyadmin接口的白名单IP地址.这是一个示例.htaccess reulset:
Order deny,allow
Deny from all
allow from 199.166.210.1
Run Code Online (Sandbox Code Playgroud)
  • 没有可预测的文件位置,如:http://127.0.0.1/phpmyadmin.像Nessus/Nikto/Acunetix/w3af这样的漏洞扫描程序会扫描这个.

  • 防火墙关闭tcp端口3306,以便攻击者无法访问它.

  • 使用HTTPS,否则数据和密码可能会泄露给攻击者.如果您不想为证书支付30美元,那么请使用自签名.您将接受一次,即使由于MITM而更改,您也会收到通知.

  • 我并不是说要批评,但有趣的是你如何在最后一步之前解决"最大的威胁".对大多数人来说,最大的威胁就是强暴 - 这是你的其他步骤所解决的.使用合适的密码也是一个好主意. (6认同)
  • 我们还在phpMyAdmin配置中将AllowRoot切换为false. (2认同)

Jae*_*Cho 12

我对phpMyAdmin的一个担忧是,默认情况下,所有MySQL用户都可以访问数据库.如果DB的root密码被泄露,有人可能会破坏数据库的破坏.我想通过限制哪个MySQL用户可以登录phpMyAdmin来找到避免这种情况的方法.

我发现在PhpMyAdmin中使用AllowDeny配置非常有用. http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29

AllowDeny允许您以类似于Apache的方式配置对phpMyAdmin的访问.如果将"订单"设置为显式,则仅授予对"规则"部分中定义的用户的访问权限.在规则中,您限制可以访问的MySql用户使用phpMyAdmin.

$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')
Run Code Online (Sandbox Code Playgroud)

现在,您对MySQL中名为pma-user的用户的访问权限有限,您可以向该用户授予有限权限.

grant select on db_name.some_table to 'pma-user'@'app-server'
Run Code Online (Sandbox Code Playgroud)

  • 不错的提示!只是代码中的一个小错误,规则应如下所示:`$ cfg ['Servers'] [$ i] ['AllowDeny'] ['rules'] = array('允许来自所有人的pma-user'); ` (4认同)

rig*_*uff 6

在较新版本的phpMyAdmin中,可以在phpMyAdmin的config.inc.php文件中设置用户名+ ip-addresses的访问权限.这是一种更好,更强大的限制访问方法(通过硬编码URL和IP地址到Apache的httpd.conf).

以下是如何切换到列出所有用户的白名单的完整示例(此列表中不允许任何人访问),以及如何仅限用户root到本地系统和网络.

$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
    'deny % from all', // deny everyone by default, then -

    'allow % from 127.0.0.1', // allow all local users
    'allow % from ::1',

    //'allow % from SERVER_ADDRESS', // allow all from server IP

    // allow user:root access from these locations (local network)
    'allow root from localhost',
    'allow root from 127.0.0.1',
    'allow root from 10.0.0.0/8',
    'allow root from 172.16.0.0/12',
    'allow root from 192.168.0.0/16',

    'allow root from ::1',

    // add more usernames and their IP (or IP ranges) here -    
    );
Run Code Online (Sandbox Code Playgroud)

来源:如何在localhost for Windows上安装和保护phpMyAdmin

这提供了比Apache的URL权限或.htaccess文件可以在MySQL用户名级别提供的更细粒度的访问限制.

确保您登录的用户将其MySQL Host:字段设置为127.0.0.1或者::1,因为phpMyAdmin和MySQL在同一系统上.


Pio*_*ula 5

另一种解决方案是使用没有任何设置的配置文件。第一次您可能必须包含您的 mysql root 登录名/密码,以便它可以安装所有内容,然后将其删除。

$cfg['Servers'][$i]['auth_type'] = 'cookie';

$cfg['Servers'][$i]['host'] = 'localhost';

$cfg['Servers'][$i]['connect_type'] = 'tcp';

$cfg['Servers'][$i]['compress'] = false;

$cfg['Servers'][$i]['extension'] = 'mysql';

离开它没有任何 apache/lighthtpd 别名只会向您显示一个登录屏幕。 在此处输入图片说明

可以用root登录,但建议创建其他用户,只允许root进行本地访问。还要记住使用字符串密码,即使很短但带有大写和特殊字符的数量。例如!34sy2rmbr!又名“容易 2 记住”

- 编辑:现在一个好的密码实际上是一些没有语法意义的单词,但你可以记住,因为它们很有趣。或者使用 keepass 生成强随机数并轻松访问它们