Django屏蔽Server响应头信息

一、背景

最近我们被安全部门的漏洞扫描工具扫出了一个服务端口的漏洞。这个服务本身是一个Django启动的web服务,并且除了登录页面,其它页面或者接口都需要进行登录授权才能进行访问。

漏洞扫描信息和提示修复信息如下:

自然这些漏洞如何修复,很简单,搜索下资料可以先临时替换补丁代码,最后重启服务即可。 但是从我们修复完毕以后,让安全部门继续扫描了几次,还是能扫出这几个漏洞。这十分奇怪。

这就很奇怪了。 奇怪的第一点就是, 这个安全扫描工具只是通过端口的方式就能知道我后端是用什么编程语言实现的(python)、并且还能知道python的版本信息。心想你一个安全扫描工具再怎么神通广大,也不会猜得这么精准吧。

由此,我先排查了一下,除了login接口,其它接口都是需要登录授权的,因此页面暴露基本上不存在这种可能性。 那请求页面/接口内容不存在泄露风险,那么只是剩下HTTP响应头的信息了。刷新页面查看HTTP响应头的信息,果不其然,server响应头暴露了关键信息:

Server: WsGIserver/0.2 cPython/3.9.13

果不其然,暴露了后端的实现。 WSGI Python是3.9.13版本。 安全扫描工具应该是基于这个信息,推断, 你的站点存在Python3.9.13之前存在的一些漏洞风险提示。 其实仅仅只是提示,因为安全扫描工具是基于这个信息给出的推断。 所以即使你修复好了补丁,但是这个消息还是暴露,导致它一直判断你没有修复漏洞或者升级Python版本。

二、解决方案

1、安全原则

基于安全原则, HTTP服务器的响应信息应该屏蔽Server字段, 避免被攻击者扫描出相关后端实现以及版本信息,从而造成安全隐患

2、Django屏蔽Server响应头

知道了原因我们就能对症下药,屏蔽Server响应头信息即可。这里有2种方式实现, 修改完毕后需要重启服务.

1、Django默认存在Server响应头信息

默认Django是存在这个Server响应头的:

2、修改Lib/wsgiref/handlers.py

修改后查看效果:

3、新增middleware中间件进行处理

setting.py新增中间件信息

修改后的查看效果:

3、总结

安全原则再次强调, HTTP响应头信息不要暴露任何后端相关实现以及版本信息,否则会被攻击者进行漏洞扫描或者注入,存在安全隐患!!! 这个一点必须时刻谨记!!!

这次运气好是安全扫描测试,下次可能就是攻击者利用该漏洞进行破坏了。

相关推荐
咖啡八杯2 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
掘金码甲哥2 小时前
这块终端神器, 必须吹爆!
后端
糖果店的幽灵3 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
Csvn3 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
想会飞的蒲公英3 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel4 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记4 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
CCPC不拿奖不改名5 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code5 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook5 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化