一次完整的网站安全审计与加固实践

2026-03-23
28
-
- 分钟
|

你有没有想过,每天访问的网站背后,可能藏着多少安全隐患?

今天我想和大家分享一次真实的网站安全审计经历。我们对自己运营的博客站点进行了一次全面的安全检查,并且针对发现的问题做了加固处理。希望通过这篇文章,能让大家了解网站安全的基本概念,以及一些实用的防护手段。

一、为什么要关注网站安全?

很多人觉得我的网站又没什么重要数据,谁会来攻击呢?但事实上,自动化攻击工具每天都在互联网上扫描数以百万计的网站。不论你的站点大小,都可能成为攻击者的目标。SQL注入、XSS攻击、会话劫持,这些听起来很专业的术语,其实离我们并不遥远。

二、我们做了哪些安全检查?

这次审计主要从以下几个维度展开:

  1. 传输安全(HTTPS/TLS)

首先检查了HTTPS的配置。好消息是我们的站点已经启用了HTTPS,并且支持TLS 1.3协议,使用了AES-256-GCM这样强度很高的加密套件。HTTP请求也会自动301重定向到HTTPS,确保所有流量都经过加密传输。

同时我们也验证了SSL证书的有效性,使用的是Let's Encrypt签发的证书,有效期90天,需要确保证书自动续期机制正常工作。

  1. 安全响应头(Security Headers)

安全响应头是网站防护的第一道防线。通过curl命令检查了站点的HTTP响应头,发现了一些问题:

已有的安全头包括Strict-Transport-Security(HSTS强制HTTPS)、X-Content-Type-Options(防MIME嗅探)、Referrer-Policy(控制引用信息泄露)。

但缺少两个重要的安全头:Content-Security-Policy(CSP内容安全策略)和Permissions-Policy(浏览器权限策略)。CSP可以有效防止XSS攻击,Permissions-Policy可以限制网站对摄像头、麦克风等浏览器功能的访问。

  1. 服务器信息泄露

检查发现服务器响应头中暴露了nginx的完整版本号(nginx/1.29.6)。虽然这本身不是漏洞,但攻击者可以利用版本号去查找该版本的已知漏洞,增加了被针对性攻击的风险。

  1. 端点暴露检查

对Spring Boot Actuator端点进行了检查。Actuator是Halo博客系统使用的Spring Boot框架自带的监控端点,如果配置不当,可能会泄露服务器环境变量、系统配置等敏感信息。

检查发现/actuator/health端点是公开可访问的,返回了应用的健康状态信息。虽然信息量不大,但属于不必要的信息泄露。

  1. 认证安全

登录接口测试中,多次错误尝试返回了403状态码,说明存在一定的防暴力破解机制,这是好的方面。

三、发现的问题和风险等级

高风险问题:

缺少Content-Security-Policy头。没有CSP保护,网站容易遭受XSS跨站脚本攻击。攻击者可以在页面中注入恶意JavaScript代码,窃取用户的Cookie或其他敏感信息。

缺少Permissions-Policy头。浏览器功能权限没有限制,网站理论上可以请求访问用户的摄像头、麦克风等设备。

中风险问题:

服务器版本号暴露。nginx/1.29.6版本信息泄露,可能被攻击者利用。

Actuator健康端点公开。/actuator/health可以被外部访问,泄露了应用的运行状态。

已弃用的X-XSS-Protection头设置为0。这个头虽然已被现代浏览器弃用,但设置为0等于完全关闭了浏览器自带的XSS过滤器。

四、如何修复这些问题?

我们通过修改nginx配置文件来统一管理安全响应头。以下是主要的修复措施:

  1. 添加Content-Security-Policy头。限制资源加载来源,只允许加载同源的脚本、样式和图片等资源。同时禁止页面被嵌入iframe(frame-ancestors 'self'),防止点击劫持攻击。

  2. 添加Permissions-Policy头。明确禁止网站使用地理位置、麦克风、摄像头和支付功能。

  3. 隐藏服务器版本号。在nginx配置中添加server_tokens off,响应头中只显示nginx而不显示具体版本号。

  4. 封锁Actuator端点。通过nginx的location规则,只允许内网IP访问/actuator路径,外部访问直接返回403。

  5. 移除弃用的X-XSS-Protection头。现代浏览器已不再使用这个头,安全防护由CSP来承担。

  6. 统一管理安全头。使用nginx的proxy_hide_header指令,隐藏后端应用(Halo)自带的安全头,由nginx统一添加,避免重复和不一致。

五、修复后的效果

经过加固后,所有安全响应头都整齐地出现在每个HTTP响应中:

Content-Security-Policy限制了资源加载来源

Permissions-Policy禁止了不必要的浏览器功能

Strict-Transport-Security强制HTTPS传输

X-Content-Type-Options防止MIME类型嗅探

X-Frame-Options防止点击劫持

Referrer-Policy控制引用信息的泄露范围

Actuator端点也被成功封锁,外部访问返回403。服务器版本号不再暴露。

六、给网站管理员的建议

无论你运营的是个人博客还是企业网站,以下几点安全措施都值得考虑:

  1. 全站启用HTTPS,使用TLS 1.2或更高版本

  2. 2. 配置安全响应头,特别是CSP和HSTS

  3. 3. 定期检查服务器和应用的端点暴露情况

  4. 4. 隐藏服务器和框架的版本信息

  5. 5. 对管理后台和监控端点设置访问限制

  6. 6. 定期更新依赖组件,修补已知漏洞

安全不是一个一劳永逸的事情,而是需要持续关注和维护的过程。希望这篇文章能对你有所帮助。

如果你对网站安全有什么问题或经验,欢迎在评论区交流!

评论交流

文章目录