nginx401授权后,如何解决php源码泄漏的问题?
发布于 作者:苏南大叔 来源:程序如此灵动~本文中,苏南大叔来说一下nginx
的401
授权调试的过程。当然,本调试过程不一定适合你的问题,但是苏南大叔相信,可能还是会给你一定的启迪的。
本文测试环境:宝塔面板@7.5.2
,nginx@1.18.0
,php@7.3
。主要目标是保护某个目录下面的文件,不被非法访问。本文代码基于部分基于宝塔面板,但是基本原理都是一样的。大家请辩证的看待本文的内容,根据实际情况修改你的代码。
目录保护
首先,第一步是得到一个加密字符串证书文件。命令行范例如下:
printf "yourname:$(openssl passwd -crypt yourrealpassword)\n" >>/yourpath/yourpassword.pass
其次,是配置nginx
站点配置,添加auth
相关配置。这里以保护admin
目录为例:
location ~ /admin {
auth_basic "who are you";
auth_basic_user_file /yourpath/yourpassword.pass;
}
这部分详细的设置过程,请参考下面的链接:
上述内容是本文的背景资料,接下来就是本文的正文。
调试问题一:任何密码都可以进入
在提示的使用过程中,偶尔苏南大叔发现:输入了错误的密码,居然也可以过。这个问题,简直是巨大的问题。
后来经过调试,发现是记录密码的证书文件的路径配置错了,就是说auth_basic_user_file
配置错了,修改之后再重启nginx
即可。
调试问题二:登录框和html
同时出现
显示401
登陆框的同时,页面没带css
的html
也显示了。(正常应该显示空白)。效果就是丢失了样式表的页面。这种情况的话,就是:对于地址栏里面的url
没有拦截到,而把所有的静态资源请求都拦截到了。所以,页面整体加载了,但是对样式表等的请求失败,所以,多次跳出401
登录框(页面上加载了多个静态资源)。
解决方案嘛,就是调整拦截规则了。
调试问题三:匹配到目录有问题
苏南大叔做了两个匹配,分别是:
location ~* \/admin\/{
}
location = /admin/login.php {
}
正则表达式写的不好,所以,这里的规则实际上写的是有待改进的,大家有好的写法可以留言给我。
前者~* \/admin\/
可以匹配到所有的静态资源,比如css
文件等,却匹配不到.php
文件。接下来想想看的话,在nginx
配置文件里面,确实有对.php
文件进行单独处理。
所以,对于后台目录保护来说,又单独配置了第二个匹配项目/admin/login.php
。后台的其他页面,在没有登陆的情况下,会自动跳转到login.php
,而login.php
又在这里做了单独的配置,所以,理论上是没有问题风险的。
调试问题四:php
文件无法执行,源码泄漏
php
文件无法被执行,大问题大事故,login.php
源码被下载到本地。所以,对于第二条匹配规则,需要做了新的修改。类对于.php
文件的location
设置,还需要在验证成功后,转到php
进行处理。
location = /admin/login.php {
auth_basic "who are you";
auth_basic_user_file /yourpath/yourpassword.pass;
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-73.sock;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
}
这里的对.php
的配置处理,是从宝塔面板的enable-php-73.conf
文件里面复制出来的。上面的配置文件,还需要您根据实际情况进行处理。千万不要随便复制上面的代码,请分析一下,根据您的实际情况进行修改。特别注意:
unix:/tmp/php-cgi-73.sock
中的73
字样!!!!很有可能变成74
或81
等等字样!!!配置错误的话,效果就是:所有页面都正常显示,但是特殊的页面(比如上边的登陆页面)显示502
错误。
主要的目的就是:匹配到特定目标php
文件后,先发出状态码401
,然后验证成功后,再转发到php
进行处理。
相关链接
- https://newsn.net/say/nginx-401.html
- https://newsn.net/say/mac-nginx-apache-2.html
- https://newsn.net/say/nginx-403-selinux.html
总结
在本文的内容中,虽然成功了实现了目标。但是,解决方式却不是太优美。这里,如果大家有更好的方案的话,欢迎给苏南大叔留言。更多博客文章,请参考下面的链接:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。