网站被攻击这件事,没碰到的时候觉得离自己挺远,碰上了就是另一回事。首页被挂马、数据库被删、后台登不上去、服务器 CPU 跑满,每一种都能让人半夜爬起来处理。防攻击不是买一个产品就能一劳永逸的事,它更像是在不同层面上抬高入侵门槛,让攻击者觉得投入成本不划算,就算被突破进来,也能把损失控制住。
先得清楚自己会面临哪些攻击方式。最常见的分几类,一类属于流量型攻击,DDoS会发送大量垃圾流量堵死带宽,CC则模拟正常用户反复请求动态页面,拖垮数据库与CPU资源。另一类依靠漏洞实施入侵,SQL注入、XSS、CSRF、文件上传漏洞、命令执行都属于这类。多数情况并不是攻击者技术有多厉害,只是代码里某个参数没有过滤、上传接口缺少校验、部分接口没有做鉴权。还有一类是弱口令搭配暴力破解,后台密码设置成admin123,SSH 22端口直接对公网开放,Redis不设密码直接暴露在公网,这类配置在扫描工具面前等同于大门没上锁。爬虫和恶意扫描也算一类,它们不一定直接破坏站点,但会消耗服务器资源、抓取站点内容,同时持续探测系统漏洞。

流量型攻击防护的核心思路,就是不要把源站直接暴露在公网。可以选购高防服务器或者接入高防IP,攻击流量会被引导到清洗中心,清洗完成后的干净流量再回源访问。想要硬扛DDoS大流量带宽并不现实,普通云服务器自带的基础防护带宽大多只有几个G,遇到大流量攻击会直接触发黑洞。CDN也能起到隐藏源站IP的作用,但要留意不要在邮件头、DNS历史记录、子域名解析记录中泄露真实服务器IP。CC攻击处理起来更棘手,因为访问特征和正常用户请求几乎一致,防护手段主要依靠WAF配置访问频率限制、人机验证、JS挑战,再结合用户行为分析。限流规则不能一味收紧,规则过严会误拦截正常访客,需要结合自身业务的访问波动曲线调整参数。
应用层防护的根本,在于代码编写与服务器配置。SQL注入问题采用参数化查询或者预编译语句处理,不要直接拼接SQL字符串。XSS依靠输出编码处理,用户提交的内容在页面展示阶段做好转义,再搭配CSP策略限制脚本加载来源。CSRF防护需要增加token,关键操作环节校验请求来源。文件上传功能必须设置白名单,限制文件后缀和MIME类型,上传完成的文件最好存储在非Web目录,或者重命名成无法执行的格式。接口鉴权不能省略,不要以为前端隐藏按钮就能保障安全,后端每一次请求都要校验访问权限。开发框架自带的安全防护机制不要随意关闭,很多漏洞的产生,都是开发者把安全校验当成累赘直接关掉。
弱口令相关的安全隐患,能整改的都要尽快处理。SSH不要使用密码登录,改用密钥认证,修改默认端口,同时安装fail2ban监控,限制密码连续失败尝试次数。数据库、缓存服务不要监听公网地址,Redis需要设置密码,绑定内网地址并更换默认端口。后台管理路径不要使用/admin这类极易被猜到的地址,额外开启二次验证。员工账号权限遵循最小分配原则,员工离职之后立刻回收账号权限,禁止多人共用同一个账号。这些操作实现难度不高,却能挡住大量自动化扫描和暴力破解尝试。
运维层面养成安全习惯,远比出事之后临时补救更有用。系统补丁要及时更新,操作系统、Web服务、数据库、CMS系统以及各类插件,发布安全更新就要跟进升级。备份工作要定期执行,备份文件不能和业务服务器放在同一台设备,离线备份或者异地备份可靠性更高。日志集中收集管理,登录失败、异常流量、文件变更事件都需要配置告警。监控项目不能只盯着CPU和内存,请求量突增、单个IP高频访问、数据库慢查询数量突然上涨这类异常,同样需要关注。一旦遭遇攻击,不要第一时间拔掉网线,优先隔离受影响的业务服务,保留日志与现场证据,修改各类账号密码,使用备份恢复业务,最后复盘漏洞根源。
WAF和防火墙确实有防护作用,但不能当成万能解决方案。WAF规则需要持续调试,默认规则有可能误拦截正常业务请求,也会漏掉针对业务逻辑的专属攻击。防火墙安全组只开放业务必需端口,数据库端口、管理端口、调试端口,能关闭就关闭。蜜罐也能起到辅助预警效果,在几乎不会被访问的路径部署假后台,一旦被扫描访问,就代表攻击者正在探测站点,可提前拉黑对应IP。第三方组件和供应链风险同样需要关注,npm、Composer、Docker镜像,使用前核查是否存在已知漏洞,不要随意引入来源不明的代码。
还有一块容易被忽略,就是人为因素。开发、运维、运营人员,每个人的安全认知水平参差不齐。写代码的人觉得参数校验属于前端工作,运维人员认为防火墙开启就足够安全,运营人员随意把后台账号交付外包人员。网站防攻击本质依靠流程和长期习惯,不是单纯堆砌几款安全产品就能解决。定期做简单安全自查,核查公网暴露端口、运行服务、组件版本、备份文件可恢复性,远比故障爆发之后慌乱抢修要好得多。
网站防攻击不存在终点,只能持续不断修补加固。攻击工具获取门槛持续降低,攻击手段不断迭代,站点不需要做到毫无破绽,但至少不要成为攻击者眼里最容易下手的目标。