网站安全:网站是如何被黑客攻击的以及如何防止
网站很少被黑客攻击,因为有人决定针对您的公司。它们被黑客攻击是因为自动化软件全天候扫描整个互联网,寻找疏忽。好消息是,大多数入侵都被一 dozen 不起眼的习惯阻止,而其中大多数不需要开发人员。
为什么即使是小网站也会受到攻击
让我们从我们在几乎每次第一次会议中听到的信念开始:"谁会在乎我们?我们只有五个页面,每周只有三个咨询。" 这听起来合理。这也是为什么像这样的站点最常被攻破的原因。
没有人选择你。针对中小型企业的绝大多数攻击根本不是个人行为。软件在工作:它会获取域名和IP地址的列表,逐一检查,并测试每个已知的弱点。机器人不知道你是牙科诊所还是陶瓷工作室。它在服务器响应中读取版本字符串,检查其列表,如果没有匹配项就继续。如果有匹配项,它就开始工作。
这就像在街上走着拉车门把手。没有人选择你的车。你的车只是解锁了。
宣传网站的价值
攻击者几乎从不想伤害你特定地。一个被攻陷的网站有市场价值,这来自于几个方面:
- 链接权益。隐藏的链接或关于赌场、贷款或药房的整个隐藏部分被悄悄注入到你的页面中。你看不见它们。搜索引擎能看到。
- 流量。您的访客会被重定向到其他地方——但并不是所有人。通常只有移动用户、只有从搜索到达的用户,以及每人每天仅一次。这正是您可以在自己的笔记本电脑上访问自己的网站几个月而没有注意到任何变化的原因。
- 服务器资源。您的托管成为发送垃圾邮件、挖矿或攻击其他网站的节点。
- 数据。一个包含查询、电话号码、地址和电子邮件的数据库是有买家的产品。即使您只有“仅仅是一个联系表单”。
- 敲诈。文件被加密或删除,您被邀请支付以获取它们的返回。
这导致了一个改变整个话题感觉的结论:网站安全并不是防御一个穿着连帽衫的天才。这是一种卫生措施,可以将您移出易受攻击的目标池。一个机器人不会在一个维护良好的网站上花时间,而一千个被忽视的网站就在旁边。
所有者通常是如何发现的
症状几乎从来不是来自于你。你的主机会发送关于可疑活动的电子邮件。Google Search Console 会标记一个警告。客户打电话来说他们的浏览器在对他们大喊。公司的电子邮件突然落入每个人的垃圾邮件文件夹。搜索流量无故下降。如果这些事情中的任何一件发生过,你就晚知道了——但晚并不等于太晚。
网站是如何被攻陷的
忘掉电影吧。在现实中,几乎每一个小企业的安全漏洞都可以追溯到一个简短而极其无聊的列表。我们已经清理了数十个被感染的网站,而入口几乎总是这些。
过时的CMS和插件,尤其是
这是毫无疑问的赢家。WordPress、Joomla、OpenCart——这些平台本身并不容易泄露。问题在于生态系统:一个在2021年最后更新的图库插件,一个在市场上购买的主题,其作者早已离开,承包商安装并遗忘的表单模块。
理解这里的机制,因为它们是反直觉的。当在一个插件中发现漏洞时,它会被发布。这就是行业的运作方式,也是正确的。但从那一刻起,一场竞赛开始了:开发者发布修复,扫描机器人在几小时内接收到易受攻击版本的指纹。一个每年更新一次的网站根本不在这场竞赛中。
弱密码,更糟的是,重复使用的密码
像Admin2024!这样的密码看起来很强——大写字母、数字、一个感叹号。它在每个破解字典中都有。但真正的伤害并不在于此。真正的伤害是你在主机面板、网站管理员、电子邮件和两年前被泄露的某个服务上使用相同的密码。别人的泄露变成了你的登录,而技术上根本没有发生“黑客攻击”。攻击者只需输入用户名和密码。
从员工笔记本电脑窃取的凭据
经典的无人怀疑。FTP凭据保存在设计师笔记本电脑的文件管理器中,被普通的商品恶意软件读取。通过合法登录“黑客”入侵网站。明显的迹象是:你彻底清理了一切,但感染在两天内又回来了。
未保护的表单和开放的端点
你的网站接受外部输入的每个地方——联系表单、网站搜索、文件上传、API端点——都是一扇门。当输入在没有检查其类型、大小和内容的情况下被接受时,这扇门是双向的。文件上传尤其令人恐惧:允许某人将某些东西放在你的服务器上,而服务器随后执行它,基本上就是把钥匙交给了他们。
遗留在网站根目录的文件
安静的杀手,我们不断发现它。位于公共文件夹中:backup.zip来自前一家机构,dump.sql包含完整数据库,一个.git 包含整个项目历史的文件夹,其中包含旧提交中的密码,一个 test.php,一个 info.php,一个名为 config.php.bak 的配置副本。任何猜到 URL 的人都可以下载这些文件。而机器人不会猜——它们会携带常见名称的列表,并在几秒钟内检查它们。
特别提到一个 .bak 和 .旧扩展名:服务器不会将其作为代码执行,而是将其作为纯文本提供。这意味着它将您的数据库密码直接交给浏览器。
被遗忘和被抛弃的项目
一个旧的活动着陆页在一个子域名上。两年前构建的一个暂存副本,从未被删除。一个没人使用的论坛。它们从未更新,因为没有人记得它们的存在。它们通常位于同一个托管账户中——因此,妥协一个被遗忘的着陆页会交出您主站点的文件。我们在每次审计开始时都会问“这个账户里还有什么?”,而答案常常让所有者感到惊讶。
HTTPS和SSL:不再是争论的焦点
如果您没有HTTPS,请停止阅读并先修复这个问题。在2026年,没有加密的网站不是节俭,而是一个错误。
SSL证书实际上做了什么
没有HTTPS,数据在您访客的浏览器和您的服务器之间以纯文本传输。任何位于该路径上的人都可以读取和更改它:咖啡馆Wi-Fi的拥有者、ISP、中间网络上的设备。读取它意味着读取密码和表单内容。更改它意味着他们可以重写您的页面或将自己的广告注入其中,而您的访客会确信这是来自您的。
SSL证书同时解决了两个问题。它加密了通道,并证明该域名属于提供它的任何人。第二个问题与第一个问题同样重要:没有身份,加密是毫无意义的,因为您可能在加密一个通向欺诈者的通道。
比证书本身更重要的细节
证书现在是免费的和自动的——Let's Encrypt 为每个人解决了这个问题。所以错误不再是关于“是否有一个”。它们在于配置:
- 重定向。每个 HTTP 请求必须永久重定向到 HTTPS。否则旧版本将与新版本并行运行。
- 混合内容。页面通过 HTTPS 加载,但通过 HTTP 拉取图像、字体或脚本。浏览器会发出警告,锁形图标消失。旧的分析代码和第三方小部件通常是罪魁祸首。
- 自动续订。证书是短期的,由机器人续订。当机器人出现故障时,你会在最糟糕的日子里听到客户的抱怨。监控到期日期。
- 规范 URL。迁移到 HTTPS 后,确保每个页面只有一个地址,而不是带或不带 www 的四个变体。
HTTPS无法做到的事情
这里存在一个危险的误解。锁形图标并不意味着网站是安全的。它仅仅意味着一件事:到服务器的通道是加密的。一个充满恶意代码的被攻陷网站可以在HTTPS下愉快地运行,锁形图标依然完好。钓鱼网站也有证书——它们是免费且自动发放给每个人的。HTTPS是基础,而不是屋顶。
对于处理资金的网站,标准要高得多。通道加密是入场券;之后是Webhook签名验证、幂等操作和严格的访问分离。我们详细介绍了这个机制,使用了Payora支付网关,在这里,交易安全性优先于构建中的其他所有功能。
安全头部:无人开启的安静防御
安全头是您的服务器在页面旁边发送给浏览器的指令。关键在于,浏览器默认是信任的:它们会运行在您的页面上找到的任何脚本,并在请求时在其他人的窗口中显示您的页面。头部是您告诉浏览器“不要这样对待我”的方式。
它们的优点在于免费、一次配置,并在访客端强制执行,而不会加载您的服务器。它们的最大问题是几乎在所有地方默认缺失。
内容安全策略(CSP)
最强大且最难以控制。它是一个允许列表:该页面可以从哪里加载脚本、样式、图像和字体。如果攻击者设法将外部脚本注入到您的页面中,浏览器会简单地拒绝执行它,因为源不在列表上。实际上,CSP将成功的攻击转变为失败的攻击。
诚实的警告:匆忙实施 CSP 会破坏您的网站。正确的路径是先使用报告模式,收集违规信息,然后再收紧。在一个有十几个第三方小部件的网站上,这需要几天的工作,而不是十分钟。
严格传输安全 (HSTS)
告诉浏览器:此域名仅支持 HTTPS,请记住这一点一年。它缩小了用户在没有前缀的情况下输入地址与重定向触发之间的差距。这个差距正是拦截发生的地方。只有在您确信 HTTPS 在所有地方都能正常工作并且是永久性的情况下,才启用它——撤销这个决定是缓慢的。
X-Frame-Options
阻止您的网站被嵌入到其他页面的框架中。它防御一种简单而恶劣的把戏:在您真实按钮上放置一个不可见的层,使用户的点击转向他们从未打算去的地方。对于任何有客户账户或结账功能的网站,这个是强制性的。
X-Content-Type-Options
一行,无需配置。它禁止浏览器根据服务器声明的内容猜测文件类型。没有它,上传的图像在特定条件下可能会被解释为脚本并执行。
Referrer-Policy
控制浏览器在访客点击离开时传递关于您网站的信息。如果没有它,完整的页面 URL——包括像密码重置令牌或内部标识符这样的参数——会传递到其他人的分析中。这不是黑客攻击。这是一个泄漏:安静而持续。
Permissions-Policy
关闭您网站明显不需要的功能:相机、麦克风、地理位置、传感器。规则很简单——任何未使用的功能都应该关闭。
任何公共在线扫描器都会在一分钟内对您的头部进行评分,结果通常令人震惊。对我们来说,头部是每个项目的基础构建的一部分——开发本身的一部分,而不是后来额外付费添加的内容。
更新和第三方代码:纪律胜于英雄主义
建议很无聊:保持更新。问题在于,这是每个人都听过但几乎没有人遵循的建议。让我们看看原因——以及如何让它坚持下去。
为什么更新被推迟
不是懒惰。是恐惧。一次更新破坏了布局,或者购物车停止工作,从那以后就一直避免点击“更新”按钮。这种恐惧是合理的:更新确实可能会破坏东西,尤其是当一个网站是由直接在其源代码中修改的插件组装而成时。
但算一算。布局破损的风险让您损失一个小时。安全漏洞的风险让您需要恢复、清理、与客户进行尴尬的对话,以及数月的努力恢复搜索排名。第二种风险的成本是第一种的几个数量级。
如何在不惊慌的情况下更新
- 在之前备份,而不是之后。完整备份:文件和数据库。绝不要跳过这一步,毫无例外。
- 保留一个暂存副本。一个独立的环境,关闭搜索引擎和外部访问,在上线之前测试更新。在任何严肃的项目中,这不是可选的。
- 将关键任务与常规任务分开。安全更新立即进行。小更新按计划进行。重大版本跳跃是一个独立的项目,需要有计划。
- 事后检查重要事项。提交表单,进行支付,登录账户,在手机上查看。三分钟的手动检查可以节省数周的时间。
审计他人的代码
每季度一次,打开你的插件列表并问两个问题。首先:这个插件有被使用吗?一个“以防万一”安装的插件是一个没有功能的漏洞。请注意,停用的插件仍然存在于文件系统中,仍然可能存在安全漏洞——因此未使用的东西必须被删除,而不是关闭。
第二:作者还在吗?如果最后一次更新是在三年前,并且描述中说它与一个早已过时的版本兼容,那就是被遗弃的代码。它不会自行变得更安全。提前冷静地寻找替代品,而不是在发生安全漏洞后的那个晚上。
值得挂在墙上的规则是:你网站上的第三方代码越少,你的攻击面就越小。每个插件都是一个陌生人,你默默地授予了他们访问你服务器的权限。
访问和托管卫生:比代码更大的胜利
现实中最常见的安全漏洞原因不是巧妙的攻击,而是分散的访问。这也是恢复秩序最快且几乎不花钱的地方。
最小权限
每个人和每个过程都应该仅拥有其工作所需的确切权限,而不多一分。内容管理者不需要管理员权限;他们需要发布文章。编辑一页的承包商不需要数据库。读取目录的脚本不需要写入权限。
现在打开你的管理员用户列表。在审计中,我们常常发现仍在使用的账户属于已经离开的人、你一年前分开的代理机构,以及一个叫 admin2 的神秘用户,没人能解释。最后一个不是疏忽——这是一个症状。
每人一个账户
共享的 管理员使用聊天线程中的密码登录意味着没有人负责。当发生某些事情时,日志显示“管理员登录”,这对你没有任何帮助。个人账户为你提供了两件事:可读的历史记录,了解谁做了什么,以及在不更改整个公司的密码的情况下撤销某个人的访问权限。
双重身份验证
如果你从整篇文章中只实施一项内容,那就选择这一项。双重身份验证使被盗的密码变得毫无价值。每一次暴力破解尝试和每一次第三方泄露都不再对你有效,因为仅凭密码已不足够。无论在哪里都要启用它:托管面板、域名注册商、网站管理员、电子邮件、Cloudflare、GitHub。
关于域名注册商的特别说明。它是整个堆栈中最被低估的故障点。失去对你域名的控制比失去你的网站更糟:网站可以在一个小时内从备份恢复,而域名则需要数月的支持工单才能恢复——如果能恢复的话。
使用 SSH 密钥而不是密码,并且不使用 FTP
密码可以被猜测或从笔记本电脑中提取。密钥在任何有用的时间范围内都无法被猜测。设置一次只需十五分钟,此后完全禁用对服务器的密码登录。
另外:放弃普通 FTP。它以明文发送你的用户名和密码,就像1998年一样。仅使用 SFTP 或 SSH。如果你的主机将 FTP 作为主要方法,这告诉你一些关于主机的信息。
使用密码管理器而不是记忆
没有人能记住四十个不同的复杂密码,这正是他们重复使用密码的原因。密码管理器完全消除了这个问题:它为每个服务生成一个唯一的密码,安全存储,并允许你在不粘贴到消息应用中的情况下将凭据交给同事。它的费用微不足道,并能防止灾难。
表单、垃圾邮件和速率限制
联系表单是你网站上最易接触的部分。它对所有人开放,无需登录,并静静等待数据。难怪它受到最多的滥用。
为什么 CAPTCHA 不是解决方案
CAPTCHA 捕捉原始脚本并让真实用户感到烦恼。现代垃圾邮件流量要么通过技术手段绕过,要么通过解决服务让实际的人以几分之一美分的价格回答验证码。与此同时,它显著影响转化率:一些真正的客户会因为扭曲的字母而放弃。
有效的方法是分层的,并对访客不可见:
- 蜜罐。一个人类从未看到或填写的隐藏字段,机器人会自动填写。填写意味着被丢弃。简单、免费、有效地对抗大部分垃圾邮件。
- 时间检查。在页面加载后半秒提交的表单不是由人填写的。
- 速率限制。在给定的时间窗口内,来自一个地址的提交不得超过几次。这是关键机制,也是保护您的登录页面免受密码猜测的同一机制。
- 隐形评分。现代系统评估行为,仅对看起来可疑的请求进行挑战。真实客户根本看不到任何东西。
服务器端验证是不可妥协的
浏览器中的优雅字段验证是用户的便利,而不是防御。到达您服务器的数据可以在不接触您的页面的情况下发送。因此,一切都在服务器端再次检查:类型、长度、格式、允许的值。规则简单且通用:来自外部世界的输入永远不可信,即使您自己的脚本刚刚验证过它。
文件上传是它们自己的问题
如果访客可以上传文件,就要像他们上传的是恶意文件一样处理。检查真实的内容类型,而不是名称中的扩展名。自己重命名文件。限制大小。最重要的是,将上传的文件存储在服务器物理上不会执行代码的地方——理想情况下完全在单独的存储上。
速率限制超越表单
相同的机制也适用于您的 API 端点、站点搜索、密码重置和任何昂贵的操作。没有它,一个持续的机器人通过重复行为使您的服务器崩溃。在涉及金钱的地方,这一点尤为重要:在支付项目中,我们总是限制交易创建的速度 — 我们关于接受加密货币支付的文章解释了这如何保护您的会计和服务器。
备份:唯一总能赔付的保险政策
显而易见:备份比本文中的其他一切都更重要。其他措施降低了灾难发生的概率。备份决定了灾难的结局 — 一个不愉快的晚上,还是一家关闭的企业。
3-2-1 规则
一个在我们之前就被发明的经典,至今无人能敌:
- 3 份您的数据:一份实时数据和两份备份。
- 2 种不同的介质或平台 — 并非所有东西都放在一个篮子里。
- 1 份离线备份,在物理和管理上与服务器分开。
最后一点是大多数设置崩溃的地方。备份如果在同一台服务器上,或者在同一托管账户中,就不是备份。攻击者一旦入侵,首先会删除它——这是一个标准步骤,而不是华丽的动作。勒索软件会将其与其他所有内容一起加密。如果主机崩溃,它也会随之消失。
未经测试的备份不是备份
这部分让人痛心。我们不断看到同样的场景:备份忠实运行了两年,而在关键时刻,档案却发现是损坏的。或者它们包含文件但没有数据库。或者数据库存在,但导出时编码被破坏,文本变成了问号。或者档案只有40千字节,因为脚本在第一个文件夹时崩溃,错误邮件发送到了没人查看的收件箱。
结论:恢复必须进行排练。每季度一次,将一份备份部署到预发布环境中并查看它。网站能加载吗?数据库在吗?图片存在吗?订单显示吗?这是提前了解备份真相的唯一方法,而不是在灾难发生时。
保留优于频率
每天备份并保留三天的备份对于静默感染毫无用处。恶意代码通常会潜伏数月。等你发现它时,所有三个副本都已经被感染。保持深度:每天备份两周,每周备份几个月,每月备份一年。磁盘空间的成本与没有可恢复内容的网站相比便宜得多。
备份什么
文件和数据库是显而易见的。被遗忘的还有其他所有内容:服务器配置、Web 服务器规则、计划任务、DNS 设置、电子邮件。一个好的衡量标准是这个问题:“如果托管公司明天消失,在哪里完全重建需要多长时间?”如果你没有答案,你的备份是不完整的。
监控和日志:在客户之前看到它
妥协通常不会很明显。更常见的是它们是静默的,这正是重点:你越长时间没有注意到,资产为窃取者赚取金钱的时间就越长。因此,监控的工作不是“抓住黑客”。而是缩短事件发生与你知道之间的时间差。
最小集
- 正常运行时间监控。每分钟进行一次可用性检查并发出警报。基本服务是免费的,设置只需十分钟。
- 文件完整性监控。系统记录你的文件状态,并在某些内容发生变化时通知你。没有人触碰代码,但凌晨 3 点有两个文件发生了变化——这就是一个对话。
- SSL 和域名到期。提前发出警报,而不是事后。被遗忘的域名续费比大多数黑客攻击更具伤害。
- 谷歌搜索控制台。免费且强制。搜索引擎通常在网站所有者发现之前就会发现感染,并会在安全部分明确指出。
- 外部恶意软件扫描。外部的定期检查可以捕捉到只有访客才能看到的内容:重定向、注入的脚本、交换的内容。
日志:无聊,且真相所在
Web 服务器日志记录对您网站的每个请求。在平静的日子里,没有人想要它们。在事件发生的那一天,它们是您唯一的事实来源:何时、从哪里、请求了什么,以及服务器的回应。
有两件事值得提前做,因为它们无法追溯。首先,确认日志确实在写入并保存至少一个月。在许多设置中,它们在 24 小时后被截断,调查时没有任何内容可查。其次,启用管理员登录日志记录——成功和失败。失败的激增是实时的密码猜测,您可以在其成功之前做出反应。
要寻找的内容
你不需要成为分析师就能发现明显的问题。请求文件的请求你没有也从未拥有过。凌晨3点来自一个你没有雇佣任何人的国家的管理员请求。一个地址在一分钟内发出数百个请求。错误响应激增,而之前并没有这些。单独来看,这些都不是证据,但每一个都是进一步观察的理由。
我们在每个支持的项目启动后都包括基线监控——这些工作的例子位于我们的投资组合。教训并不光鲜:一个没有人关注的网站最终会产生惊喜,而这个惊喜的成本总是高于关注的成本。
WAF和CDN:Cloudflare做什么和不做什么
Cloudflare 和类似的服务是一个真正有用的层,这正是围绕它们存在如此多神话的原因。让我们诚实地看待价值所在和幻觉开始的地方。
它们是什么
CDN 在你的网站访客和你的服务器之间放置了一个全球节点网络。静态文件从最近的节点提供——网站更快,你的服务器得到了缓解。WAF(网络应用防火墙)是一个过滤器,检查传入请求并在它们到达你的代码之前丢弃攻击形状的请求。
真正的价值
- 吸收 DDoS。 垃圾流量在提供商的网络上破碎,而不是你的服务器。小型企业无法单独承受这种攻击。
- 隐藏您的真实服务器IP。当目标不可见时,直接攻击变得更加困难。
- 机器人过滤。大量扫描噪声会自动被丢弃,您的日志在一夜之间变得可读。
- 虚拟补丁。WAF规则可以在您准备适当更新时暂时封锁新的漏洞。这是借来的时间,而不是修复。
- 速度。一个令人愉快的副作用,访客和搜索引擎都会注意到。
他们不会做的事情
现在是令人不安的部分。WAF 在以下情况下无法保护您:
- 您的 密码被盗了。使用有效凭据的登录是一个合法请求。过滤器会通过它,这是正确的。
- 您的 真实 IP 已经被知道,而且您的服务器直接接受连接,绕过了过滤器。这是一个极其常见的错误配置:您的服务器必须只接受来自提供商网络的流量。
- 问题出在 您自己的业务逻辑。如果您的代码允许一个用户通过更改一个数字来获取另一个用户的订单,从 WAF 的角度来看,这就是一个完全格式正确的请求。
- 恶意代码在内部。过滤器监视前门,而不是房子里发生的事情。
- 加密设置为“灵活”。然后从 Cloudflare 到您的服务器的连接以明文传输,而您的访客看到一个锁并假设一切正常。这是对安全性的危险模仿——使用严格模式并进行证书验证。
简而言之:WAF 和 CDN 是一个优秀的周界围栏。当钥匙在垫子下而一楼的窗户开着时,围栏是无用的。它补充了卫生,但并不替代它。
如果您已经被攻破该怎么办
保持冷静。恐慌的代价比黑客攻击本身还要高:在恐慌中,人们会删除调查所需的东西。程序已经建立。遵循它。
1. 隔离
将网站放在返回503状态的维护页面后。这可以保护访客免受感染,并告诉搜索引擎停机是暂时的而不是永久的。还不要删除任何东西。
2. 保留证据
这听起来反直觉但至关重要。对受感染的网站及过去一个月的日志进行完整备份在任何清理之前。如果在没有识别入口点的情况下从备份中恢复,您将再次以相同的方式受到攻击,通常在一周内。这份备份是您了解他们如何进入的唯一机会。
3. 更换所有凭据
所有凭据,毫无例外,不要有“那个绝对不可能泄露”的想法。托管、SSH、数据库、每个管理员用户、FTP、域名注册商、电子邮件、连接服务。在您处理时,开启所有缺失的双重身份验证。有一个人们常常忽视的警告:请在干净的计算机上进行此操作。如果笔记本电脑被感染,您的新密码将像旧密码一样泄露。
4. 找到入口点
从感染日期修改的文件开始——这是最快的线索。搜索日志,查找在第一个外部文件出现之前不久到达的请求。检查托管账户中的所有内容,包括被遗忘的子域名。检查所有有访问权限的人的计算机。在找到入口点之前,事件不会结束。
5. 重建
最佳的解决方案是进行干净的重装:全新的CMS,来自官方来源的新插件,以及仅从备份中提取的内容和数据库——首先检查数据库,因为代码也会注入到那里,通常是在模板和设置中。手动清理感染的文件就像买彩票:错过一个文件,整个问题就会复发。
6. 关闭漏洞并恢复您的声誉
修复您识别出的原因,否则您只是重置了时钟。然后:在Google Search Console中请求审核,检查您域名的邮件记录(一个被攻击的网站可能在发送垃圾邮件,您的域名可能已经在黑名单上),并确认数据库中没有不熟悉的管理员。
一个诚实的提醒:如果您的网站接受付款或存储客户个人数据,临时应对是错误的选择。您需要一个有经验的人——联系。我们处理这样的事件,更重要的是,我们会在事后详细解释发生了什么错误以及如何确保不再发生。
实用安全检查清单
让我们将以上内容压缩成一个您今天可以开始的列表。它是按效果相对于努力的顺序排列的——从顶部开始。
今天,在一个晚上
- 开启双因素认证用于托管、您的域名注册商、电子邮件和网站管理员。
- 验证HTTPS在所有地方都能正常工作,并且所有HTTP重定向到它。
- 打开您的管理员用户列表,并且删除所有不该在那里的用户:前员工、旧承包商、无人认领的账户。
- 检查网站根目录是否有多余的文件: 归档,数据库转储,一个 .git 文件夹,配置副本,测试脚本。
- 确认 备份存在 并且不存储在同一服务器上。
- 将网站连接到 Google Search Console 并阅读安全部分。
本周
- 设置一个 密码管理器 并用一个独特的密码替换每个重复使用的密码。
- 更新 CMS 和所有插件,在进行完整备份后。
- 删除 未使用的插件和主题 — 删除,而不是停用。
- 配置 安全头:从 X-Content-Type-Options、X-Frame-Options 和 Referrer-Policy 开始,这些可以立即安全启用。
- 禁用FTP并转向 SSH 密钥。
- 添加正常运行时间监控和 SSL 及域名到期的警报。
- 限制登录尝试在管理面板上。
本月
- 测试恢复在一个预发布环境中——实际部署并查看它。
- 放置一个CDN和WAF在前面,并关闭对服务器的直接访问,以便没有任何东西绕过过滤器。
- 推出CSP,从仅报告模式开始。
- 审核托管账户中的所有内容:子域名、临时副本、被遗忘的着陆页。删除不需要的内容。
- 设置 文件完整性监控.
- 审查 文件和文件夹权限,移除不必要的写入权限。
重复进行,以便您不再需要这篇文章
- 每周: 安全更新,查看登录日志。
- 每月: 验证备份,审查用户,浏览日志。
- 每季度: 测试恢复,审计插件,轮换密钥密码。
- 每年: 完整审计,重新考虑谁有访问权限及其原因。
最后一个想法带给你。安全不是一个你达到后就可以忘记的状态;它是一种习惯,就像锁上办公室的门。没有人可以保证绝对的保护,任何承诺这样做的人都在误导你。但完成这个列表的网站和没有完成这个列表的网站之间的区别是“有人尝试过但没有成功”和“我们正在恢复数据的第三周”之间的区别。
常见问题
我的网站很小——谁会在乎呢?
这正是重点:没有特别的人。你不是被选择的,而是被自动扫描器发现的,这些扫描器爬行整个互联网,检查已知的漏洞。一个机器人并不关心你有五个页面还是五千个页面:一个被攻陷的宣传网站同样适合隐藏链接、重定向访客、发送垃圾邮件和攻击其他目标。小并不意味着你是隐形的。它使你变得方便,因为小网站通常没有更新、没有监控和没有备份。
SSL证书足以保护我的网站吗?
不,这在该领域是最普遍的误解。SSL加密浏览器和服务器之间的通道,保护传输中的数据并证明域名是你的。它对服务器本身发生的事情没有任何影响。一个充满恶意代码的被攻陷网站在HTTPS下也能完美运行,并且显示锁形图标。钓鱼网站也有证书。HTTPS是强制性的,但它是基础,而不是完整的保护:没有更新、稳固的访问控制和备份,它毫无意义。
我应该多久备份一次,备份应该存放在哪里?
专注于一个问题:你能承受多少数据丢失?一个每月更改的宣传网站每周备份一次就可以。一个在线商店至少需要每天备份,理想情况下更频繁。存储必须在主服务器之外——同一主机上的副本无法抵御攻击或平台故障。并且保持保留深度:每天保留两周,每周保留几个月,每月保留一年,因为感染通常在开始几周后才被发现。
什么是安全头信息,我真的需要它们吗?
它们是你的服务器在每个页面上发送给浏览器的指令:哪些脚本可以执行(CSP),HTTPS是否是强制性的(HSTS),该网站是否可以嵌入到其他人的框架中(X-Frame-Options),以及哪些信息会随着外部点击离开(Referrer-Policy)。它们是免费的,只需配置一次,不需要对你的网站代码进行更改。其中几个——X-Content-Type-Options、X-Frame-Options、Referrer-Policy——可以在五分钟内启用,且没有风险。CSP是最强大的,但需要通过仅报告模式进行仔细推出。
Cloudflare会保护我的网站不被黑客攻击吗?
部分保护。Cloudflare能够有效吸收DDoS攻击,隐藏您的真实服务器IP,过滤掉大量扫描机器人,并可以通过WAF规则暂时封堵新的漏洞。但如果您的密码被盗,它就无能为力——使用正确凭据的登录看起来像是普通的合法请求。如果您的真实IP已被知晓,并且您的服务器接受绕过过滤器的连接,它也无能为力。而且它无法发现您自己业务逻辑中的缺陷。这就像一个围栏,围栏并不能替代门上的锁。
我们被黑了——我可以只从备份恢复吗?
可以,但仅仅这样几乎总是会在一周内导致第二次被攻破。恢复会让网站回到正常状态;但它并不能消除原因。如果他们是通过一个易受攻击的插件进入的,那么同样的插件会随着备份一起恢复。正确的顺序是:隔离网站,保留受感染版本的副本和日志以供调查,从干净的计算机上更换所有凭据,找到入口点,然后再重建——理想情况下是干净地重新安装CMS和插件,只从备份中提取内容和经过验证的数据库。