在宝塔上有对目录加密的功能,但在appnode上只有对整站加密的功能。需要修改源文才能单独加密admin目录。
或许有人说修改admin目录名称一样安全,但我随便搜了下,有人发现typecho修改了admin目录名称后反而出现了漏洞,虽然有办法解决,但更麻烦了。
因此我决定在appnode用nginx的ngx_http_auth_basic_module
模块实现让用户只有输入正确的用户名密码才允许访问admin目录,来加密typecho的登录目录。
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(/|$) 的配置]
}
即可。
重启PHP、NGINX,用重载可能不会正确生效
之前我没加 index index.php;
导致网页一直认为/admin/是目录,从而导致403,经过提普和ucw的提醒,和我的测试,最后得到了这个配置。使用index index.php;
指定网页默认文档加载index.php
上面的配置是最新的配置
旧版的配置location /admin/
会被加参数绕过,也无法防御POST攻击
/admin/write-post.php?cid=1
而这个新版的配置即使是加了参数也绕不过去,还是得输入nginx密码。
经过测试,chrome自动填写密码能正确区分不同界面使用不同密码,并且,即使通过Cookie登录了后台,访问后台时依然需要输入nginx的密码才能访问。在两处密码不一样的情况下,基本上防御了普通暴力破解的攻击。
感谢UCW大佬提醒
此处评论已关闭