网站被拖库,加强往往不是网站网站稳定因为黑客多厉害,而是管理管理上留了太多后门。上个月帮一个做电商的确保朋友看站点,后台登录地址直接暴露在公网,安全密码是加强admin123,数据库备份文件就扔在根目录下,网站网站稳定文件名还叫backup.sql。管理这种配置,确保不出事才是安全运气。
网站安全的加强第一道防线不是防火墙,是网站网站稳定人的习惯。很多管理员图省事,管理测试环境和生产环境用同一套账号密码,确保离职员工的安全权限半年不回收,日志文件从来不翻。攻击者根本不需要什么零日漏洞,拿个弱口令扫描器跑一遍,就能筛出一堆“开门迎客”的站点。
权限管理得较真。每个账号只给完成工作所需的最小权限,这条原则听起来简单,执行起来却总打折扣。见过一个CMS系统,编辑账号居然能直接执行SQL语句,理由是“方便改数据”。方便了自己,也方便了入侵者。数据库账户和Web应用账户必须分离,读写权限要拆开,删除操作最好单独审批。别嫌麻烦,真被删库的时候,麻烦才刚开始。
补丁和更新是另一件容易被拖延的事。PHP从5.6升到7.x,性能提升不说,一堆老漏洞直接堵死。可总有人觉得“网站跑得好好的,动它干嘛”。去年某开源建站程序爆出远程代码执行漏洞,官方补丁发布后一周,仍有超过三成的站点没打上。攻击脚本早就集成进自动化工具了,扫描、利用、植入后门,全程不到十秒。
日志不是用来占硬盘的。Web访问日志、错误日志、数据库慢查询日志,定期翻一翻,能看出很多问题。比如某个IP在凌晨三点频繁请求登录接口,或者某个参数里出现了union select的字样。这些异常不会自己消失,只会变成更大的窟窿。建议配个简单的告警,比如登录失败超过五次就发邮件,成本不高,管用。
备份要离线,要验证。见过太多人把备份和网站放在同一台服务器上,服务器被加密勒索,备份跟着一起完蛋。正确的做法是本地一份、异地一份、离线一份,定期做恢复演练。备份文件不能带.sql、.zip这种明显后缀,最好加密后改个名字扔进对象存储。恢复流程得写清楚,别等出事的时候现翻文档。
HTTPS现在已经是底线了。Let's Encrypt免费证书申请简单,自动续期也不难配。可还是有站点在登录页面用HTTP,用户密码在网络上裸奔。混合内容的问题也常见,主页面加载了HTTPS,里面却嵌了个HTTP的图片或脚本,浏览器照样报警告。全站强制HTTPS,HSTS头加上,这步没有商量余地。
网站安全是个持续对抗的过程,没有一劳永逸。今天配好的规则,明天可能就被绕过。保持警惕,定期检查,出了事别瞒着,该修修该改改。那些觉得“我这个小站没人惦记”的人,往往就是下一个被挂马的对象。攻击是自动化的,防守也得跟上节奏。