在测试环境中使用 python -m http.server 8080 可以快速启动一个 Web 服务,测试一些简单的网页,但是如果要在公网发布页面还是存在一些安全问题的。
1. python -m http.server 的作用与安全风险
python -m http.server 8080 是 Python 内置的一个简单 HTTP 服务器,用于快速共享文件或调试。它的主要安全风险如下:
(1)默认暴露当前目录所有文件
- 启动后,任何人(包括外网)都能访问你当前工作目录及子目录的所有文件,存在信息泄露风险。
- 例如:
cd /etc && python3 -m http.server 8080会导致/etc目录下的敏感配置文件被公开访问。
(2)无身份验证与加密
- 传输为明文 HTTP,没有 HTTPS 加密,数据可能被中间人窃取或篡改。
- 没有密码保护,任何人都可访问服务器。
(3)潜在的执行风险
- 如果目录中存在可执行文件(如
.py、.sh),虽然默认不会执行,但攻击者可能通过其他方式诱导执行。 - 例如:上传恶意文件到可访问目录,再结合其他漏洞执行。
(4)性能与稳定性
- 该服务器为单线程,不适合高并发,易被 DDoS 攻击拖垮。
2. http.server 库的安全漏洞情况
官方维护状态:
http.server是 Python 标准库的一部分,安全漏洞会在新版本中修复。- 建议使用最新版本的 Python(如 3.12+)以获取安全补丁。
已知漏洞(历史):
- CVE-2019-9740:目录遍历漏洞(已修复)。
- CVE-2021-23336:请求解析缺陷(已修复)。
- CVE-2023-40217:HTTP 请求走私漏洞(已修复)。
结论:
- 最新版本的
http.server没有已知高危漏洞,但它的设计目标是开发调试,不适合生产环境。
3. 安全使用建议
(1)限制访问范围
- 绑定到本地回环地址:
python3 -m http.server 8080 --bind 127.0.0.1仅允许本机访问。 - 或使用防火墙限制端口:
sudo ufw allow from 192.168.1.0/24 to any port 8080
(2)使用临时目录
- 在空目录中启动服务器,避免暴露敏感文件:
mkdir /tmp/web && cd /tmp/web && python3 -m http.server 8080
(3)启用身份验证
- 自定义
SimpleHTTPRequestHandler添加 Basic Auth:
from http.server import SimpleHTTPRequestHandler, HTTPServer
base64
():
():
.send_response()
.send_header(, )
.send_header(, )
.end_headers()
():
.headers.get() :
.do_AUTHHEAD()
.wfile.write()
:
auth = .headers.get().split()[]
username, password = base64.b64decode(auth).decode().split()
username == password == :
SimpleHTTPRequestHandler.do_GET()
:
.do_AUTHHEAD()
.wfile.write()
__name__ == :
server = HTTPServer((, ), AuthHandler)
server.serve_forever()

