在宝塔上有对目录加密的功能,但在appnode上只有对整站加密的功能。需要修改源文才能单独加密admin目录。
或许有人说修改admin目录名称一样安全,但我随便搜了下,有人发现typecho修改了admin目录名称后反而出现了漏洞,虽然有办法解决,但更麻烦了。
因此我决定在appnode用nginx的ngx_http_auth_basic_module
模块实现让用户只有输入正确的用户名密码才允许访问admin目录,来加密typecho的登录目录。
这个文章算是appnode加密typecho的admin目录全网首发吧。
appnode安装完成后自带htpasswd工具,因此可以直接使用
htpasswd -c /data/basic/sites/vhost/conf/passwd admin
New password:
Re-type new password:
Adding password for user admin
来创建密码文件。
其中/data/basic/sites/vhost/conf/passwd
内的conf为appnode为每个网站(比如这里的vhost)单独创建的conf文件存放位置,所以我也把密码文件放这里了。admin
为用户名,可以自己设置。New password
为登录密码,需要输入两次,建议不要和typecho的密码重复。
使用:cat /data/basic/sites/vhost/conf/passwd
能看到admin:{SHA}xxxxxxxxx
,密码已被sha加密了。
前往网站设置-源文,自定义添加:
location /admin {
auth_basic "Admin Auth";
auth_basic_user_file /data/basic/sites/blog/conf/htpasswd;
index index.php;
}
location ~ ^/admin/.+\.php(/|$) {
auth_basic "Admin Auth";
auth_basic_user_file /data/basic/sites/blog/conf/htpasswd;
# [这部分照抄 APPNODE 中 ^/.+\.php(/|$) 的配置]
}
location ~ ^/(index.php/)?action/login {
auth_basic "Admin Auth";
auth_basic_user_file /data/basic/sites/blog/conf/htpasswd;
# [这部分照抄 APPNODE 中 ^/.+\.php(/|$) 的配置]
}
即可。
之前我没加 index index.php;
导致网页一直认为/admin/是目录,从而导致403,经过提普和ucw的提醒,和我的测试,最后得到了这个配置。使用index index.php;
指定网页默认文档加载index.php
上面的配置是最新的配置
旧版的配置location /admin/
会被加参数绕过,也无法防御POST攻击
/admin/write-post.php?cid=1
而这个新版的配置即使是加了参数也绕不过去,还是得输入nginx密码。
感谢UCW大佬提醒
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/64.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。
2 条评论
目前版本在浏览器看起来没问题,实际上可以通过直接 POST
/index.php/action/login
接口绕过登录,假设暴力破解密码成功后使用此时的 Cookie 直接访问/admin/index.php
,这样就不会被 302 到登录页面,仍然不影响后台正常使用。可以保护整个admin
目录以及登录接口,经测试,即使直接 POST 也需要通过 auth_basic。下面是我的配置:谢谢,已更新