4 nginx whitelist http-basic-authentication phpmyadmin
因此,为了帮助防止对我的 phpmyadmin 安装的暴力攻击,我将 nginx 配置为需要 HTTP 基本身份验证(额外的用户名和密码),然后请求需要来自列入白名单的 IP 地址。但是,如果我运行https://example.com/phpmyadmin/,IP地址白名单工作正常,但是如果不添加额外的 .php 块,我可以加载https://example.com/phpmyadmin/index.php而不将我的 IP 列入白名单。此问题不会影响 HTTP 基本身份验证。发生这种情况有原因吗?无论如何要避免添加额外的 .php 块?phpmyadmin 配置区域的副本如下。
# Setup and secure phpMyAdmin
location /phpmyadmin/ {
allow 1.2.3.4;
deny all;
auth_basic "phpMyAdmin - HTTP Basic Login";
auth_basic_user_file /etc/nginx/pma_pass;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
allow 1.2.3.4;
deny all;
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数 PHP 配置中,有一个location ~ \.php$块处理以 结尾的任何 URI .php,因此向其他location块添加限制只会影响所涉及的静态文件。有关更多信息,请参阅此文档。
最简洁的解决方案是使用前缀的位置与^~修改,这确保了开头的所有的URI/phpmyadmin/由该块被处理,以及其他locations在顶层不要绕过您的安全。有关更多信息,请参阅此文档。
正如您所发现的,您将需要location在该块中添加一个嵌套来处理 PHP,但身份验证语句应该全部继承并且不需要在内部块中重复。
例如:
location ^~ /phpmyadmin/ {
allow 1.2.3.4;
deny all;
auth_basic "phpMyAdmin - HTTP Basic Login";
auth_basic_user_file /etc/nginx/pma_pass;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
Run Code Online (Sandbox Code Playgroud)