如何和开发者谈网站安全
你手里有一份扫描结果,或者发现了令人担心的迹象,需要转告开发者。该发什么,怎样要报价和日期,如何排优先级,以及如何确认修复。
你面前有一份安全报告,或是主机商的一封邮件,或是客户发来的消息,说某个地方看起来不对劲。你不确定严重程度。你不想显得一窍不通,也不想为根本不必要的工作付钱。
和开发者好好沟通,不需要技术知识。你需要的是结构:一个明确的请求,一个确定的日期,以及一种确认活儿已经干完的办法。下面讲怎么搭起这个结构。
第一条消息该发什么
开发者拿到三样东西时,工作最快。
原文照抄的发现项。 报告或主机商怎么写的,就一字不差地复制问题的名称。不要转述。“备份文件可被公开访问”,比“备份好像有问题”能告诉开发者多得多的信息。
确切的地址。 不是“网站上”,而是页面或文件的完整地址,例如 https://yourdomain.com/backup.zip。
证据。 一张能看到日期的截图,附上完整报告,转发主机商的邮件。这样没人需要猜你看到了什么。
整条消息可以像这样简短:
主题:yourdomain.com,备份文件可被公开访问
小王你好,9 月 2 日的一次安全检查显示,网站的一份备份可以从
https://yourdomain.com/backup.zip下载。截图和完整报告见附件。请确认情况是否属实,并给我一个修复的报价和日期。如果你认为是误报,请用几句话告诉我原因。
有一样东西不要发:不要把密码写在邮件正文里。如果开发者需要进入后台,给他单独建一个账号,以后容易删除。
要报价和日期,不要说“有空看一眼”
“有空时帮我看一眼”这种请求,可以一拖几个月。换成四件具体的事:具体要做什么,花多少钱或多少工时,什么时候完成,过程中有没有东西可能失效。
最后一个问题比看起来重要。更新一个旧插件,可能很简单,也可能连带主题一起要改。事先知道,好过周五晚上才发现订单表单坏了。
如果你按月给开发者付费,问问这次修复是否包含在内,还是算另外的工作。对严重的问题,请他们把两件事分开:消除表象,和堵住根源。删掉一个恶意文件,却没查出它是怎么进到服务器上的,这样的修复大约管一周。
约定本周、本月和以后各做什么
不是所有事都紧急,想一次修完所有东西,通常意味着没有一样做好。三个时间段比较好用。
本周:任何现在就能被人利用或会暴露数据的事:任何人都能下载的备份或配置文件,正被积极利用的已知漏洞插件,谷歌的警告,已过期的证书,没人认识的管理员账号,以不加密方式发送数据的表单。
本月:没有已知活跃攻击的拖延更新,缺失或设为 p=none 的 DMARC 记录,缺少的安全标头,以及前员工或外包人员的旧账号。
以后:能提高门槛、但拖几周也不会伤到谁的事:隐藏版本号,微调内容安全策略,换到更好的主机。
开发者对顺序可能有不同看法,值得听听他的理由。但最终由你决定,因为风险由你承担,后果也由你付出代价。
如何确认修复已经完成
邮件里一句“搞定了”不够。请他写一段简短说明:改了什么,在哪里,什么时候。两句话就够,但要写下来。
有些东西你可以自己检查。如果问题是备份文件,现在它的地址应该显示错误,而不是开始下载。如果是证书,浏览器里的小锁会显示新的到期日期。如果是更新,WordPress“插件”页面的队列里不应该再有等待项。
最简单的检查是把发现问题的同一项测试再跑一遍,对比结果。如果发现项已从报告里消失,就得到了确认。如果没有,你就有了重新沟通的具体理由。
把所有往来记录放在同一个文件夹里。这对下一次修复有用,而且万一数据泄露,它能证明你认真对待了安全,这正是 GDPR 要求你能够证明的。
合理的维护方案包含什么
一次性修复只是灭火。要不起火,网站需要定期照看。小企业网站合理的月度服务范围是这样:
- 至少每月一次更新 CMS、主题和插件,紧急的安全补丁更早,每次更新后检查网站,
- 把备份存放在服务器之外,并不时测试恢复,
- 监控网站是否在线、证书是否快到期,
- 审查能登录后台的账号,
- 定期从外部做安全检查,
- 每月一份简短总结:做了什么,哪些需要你决定,
- 约定好被入侵时的响应时间和联系渠道。
价格差异很大,所以比较包含的内容,而不只是月费数字。无论合同怎么写,都要确保一件事:域名和主机应该注册在你的企业名下,你应该有自己的管理员账号。如果合作终止,你不能被锁在自己的网站之外。
回答里的危险信号
不需要从技术上评判网站,就能识别出应该让你担心的回答:
- “WordPress 是安全的,什么都不用做。”
- “我们不更新,因为可能会出问题。”有时确实如此,但这时的解决办法是做一个网站的测试副本,先在上面测试更新,而不是不更新。
- “备份都在服务器上。”如果指的是网站所在的同一台服务器,入侵或故障会把备份和网站一起带走。
- “把你的密码发给我就行。”每个人都应该有自己的账号。
- “这是误报”,却没有任何解释。
- “我会处理的”,没有日期。
- 不愿意让你访问自己的主机、域名或后台。
好的开发者不会把问题当作针对自己,因为清晰的问题让双方更容易确定范围,也让他更容易拿到报酬。如果回答含糊或带着防备,这本身也说明了一些问题,在签下一份合同之前,心里有数是好事。