如何保护phpMyAdmin

2020/10/30 08:02 · php ·  · 0评论

我注意到我的网站上有奇怪的请求,试图找到phpmyadmin,例如

/phpmyadmin/
/pma/

等等

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

谢谢


更新资料

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

Alias /phpmyadmin /usr/share/phpmyadmin

/phpmyadmin如果要避免不必要的活动,则应将第一个更改为其他内容,例如:

Alias /secret /usr/share/phpmyadmin

最大的威胁是攻击者可能利用诸如以下的漏洞:目录遍历,或者使用SQL Injection调用load_file()以读取配置文件中的纯文本用户名/密码,然后使用phpmyadmin或通过tcp端口3306登录。

这是锁定phpmyadmin的好方法:

  • 不允许远程登录!相反,可以将phpmyadmin配置为使用“ Cookie身份验证”来限制哪些用户可以访问系统。如果您需要一些root特权,请创建一个可以添加/删除/创建但没有grant的自定义帐户file_priv
  • file_priv从每个帐户中删除权限。file_priv是MySQL中最危险的特权之一,因为它允许攻击者读取文件或上传后门。
  • 有权访问phpmyadmin界面的白名单IP地址。这是一个.htaccess重新设置示例:
Order deny,allow
Deny from all
allow from 199.166.210.1
  • 没有可预测的文件位置,例如:http://127.0.0.1/phpmyadminNessus / Nikto / Acunetix / w3af等漏洞扫描程序将对此进行扫描。

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

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

我对phpMyAdmin的关注之一是,默认情况下,所有MySQL用户都可以访问该数据库。如果数据库的root密码遭到破坏,则有人可以破坏数据库。我想找到一种方法,通过限制哪个MySQL用户可以登录phpMyAdmin来避免这种情况。

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

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

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

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

grant select on db_name.some_table to 'pma-user'@'app-server'

在新版本的phpMyAdmin中,可以在phpMyAdmin的config.inc.php文件中设置用户名+ ip地址的访问权限。这是一种限制访问的更好,更健壮的方法(通过将硬编码的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 -    
    );

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

在MySQL用户名级别,这给您带来了比Apache的URL权限或.htaccess文件所能提供的更细粒度的访问限制。

确保与您登录的用户的MySQLHost:字段设置为127.0.0.1::1,因为phpMyAdmin和MySQL在同一系统上。

另一种解决方案是使用配置文件而不进行任何设置。第一次,您可能必须包含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 / lighhtpd别名就可以将其显示在登录屏幕上。
在此处输入图片说明

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

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

最有可能的是,您的Web服务器上的某个地方将是这样的Alias指令;

Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"

在我的wampserver / localhost设置中,它位于c:/wamp/alias/phpmyadmin.conf中。

只需更改alias指令,就可以了。

如果您正在运行linux服务器:

  • 使用SSH可以禁止用户/密码登录,并且只接受authorized_keys文件中的公共密钥
  • 使用腻子连接到服务器并打开远程终端
  • 转发X11并将localhost firefox / iceweasel带到您的桌面(在Windows中,您需要安装Xming软件)
  • 现在,您通过ssh保护了phpMyAdmin。

该系统对于家庭服务器而言非常安全/方便(通常默认情况下所有端口都被阻止)。您只需要转发SSH端口(不必使用数字22)。

如果您喜欢Microsoft Terminal Server,甚至可以在计算机上设置SSH隧道并通过它安全地连接到Web服务器。

使用ssh隧道,您甚至可以将远程服务器的3306端口转发到本地端口,并使用本地phpMyAdmin或MySQL Workbench连接。

我知道此选项是一个过大的功能,但与访问私钥一样安全。

最简单的方法是编辑Web服务器,最有可能是Apache2的安装,配置,并给phpmyadmin一个不同的名称。

第二种方法是限制可以访问phpmyadmin的IP地址(例如,仅本地lan或localhost)。

保护phpMyAdmin的最佳方法是将所有这4种方法结合使用:

1. Change phpMyAdmin URL
2. Restrict access to localhost only.
3. Connect through SSH and tunnel connection to a local port on your computer
4. Setup SSL to already encrypted SSH connection. (x2 security)

这是使用以下方法的全部操作:
Ubuntu 16.4 + Apache 2安装Windows计算机+ PuTTY以将SSH连接连接并通过隧道传输到本地端口:

# Secure Web Serving of phpMyAdmin (change URL of phpMyAdmin):

    sudo nano /etc/apache2/conf-available/phpmyadmin.conf
            /etc/phpmyadmin/apache.conf
        Change: phpmyadmin URL by this line:
            Alias /newphpmyadminname /usr/share/phpmyadmin
        Add: AllowOverride All
            <Directory /usr/share/phpmyadmin>
                Options FollowSymLinks
                DirectoryIndex index.php
                AllowOverride Limit
                ...
        sudo systemctl restart apache2
        sudo nano /usr/share/phpmyadmin/.htaccess
            deny from all
            allow from 127.0.0.1

        alias phpmyadmin="sudo nano /usr/share/phpmyadmin/.htaccess"
        alias myip="echo ${SSH_CONNECTION%% *}"

# Secure Web Access to phpMyAdmin:

        Make sure pma.yourdomain.com is added to Let's Encrypt SSL configuration:
            https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04

        PuTTY => Source Port (local): <local_free_port> - Destination: 127.0.0.1:443 (OR localhost:443) - Local, Auto - Add

        C:\Windows\System32\drivers\etc
            Notepad - Run As Administrator - open: hosts
                127.0.0.1 pma.yourdomain.com

        https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/ (HTTPS OK, SSL VPN OK)
        https://localhost:<local_free_port>/newphpmyadminname/ (HTTPS ERROR, SSL VPN OK)

        # Check to make sure you are on SSH Tunnel
            1. Windows - CMD:
                ping pma.yourdomain.com
                ping www.yourdomain.com

                # See PuTTY ports:
                netstat -ano |find /i "listening"

            2. Test live:
                https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/

如果您能够成功完成所有这些操作,

you now have your own url path for phpmyadmin,
you denied all access to phpmyadmin except localhost,
you connected to your server with SSH,
you tunneled that connection to a port locally,
you connected to phpmyadmin as if you are on your server,
you have additional SSL conenction (HTTPS) to phpmyadmin in case something leaks or breaks.

您可以使用以下命令:

$ grep "phpmyadmin" $path_to_access.log | grep -Po "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | sort | uniq | xargs -I% sudo iptables -A INPUT -s % -j DROP 

说明:

确保在通过iptables drop传递管道之前未列出您的IP !!

这将首先在$ path_to_access.log中找到所有包含phpmyadmin的行,

然后从行首开始grep出IP地址,

然后对它们进行排序和唯一化

然后添加一条规则以将其放入iptables

同样,只需在echo %末尾编辑而不是iptables命令,以确保您的IP不存在。不要无意间禁止访问服务器!

局限性

如果您使用的是Mac或没有grep -P的任何系统,则可能需要更改命令的grep部分。我不确定所有系统是否都以xargs开头,因此可能也需要安装。无论如何,如果您进行大量的bash操作,它将非常有用。

本文地址:http://php.askforanswer.com/ruhebaohuphpmyadmin.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!