是的,Django 的安全中间件在默认生成的 settings.py 中通常是启用的。

当你使用 django-admin startproject mysite 命令创建一个新项目时,生成的 MIDDLEWARE 配置列表中会包含以下与安全相关的中间件(按默认顺序):
django.middleware.security.SecurityMiddleware—— 这是核心的安全中间件。django.middleware.csrf.CsrfViewMiddleware—— 跨站请求伪造保护中间件。django.middleware.clickjacking.XFrameOptionsMiddleware—— 点击劫持保护中间件。
这些中间件默认做了什么?
虽然中间件本身是启用的,但具体的保护效果取决于你在 settings.py 中配置的相关安全设置。SecurityMiddleware 只是执行安全检查的“执行者”,而“检查哪些项目、如何检查”由下面的设置决定。
默认情况下,一些关键的安全设置是关闭或较为宽松的,你需要根据生产环境手动加固。
SECURE_SSL_REDIRECT:默认False,生产环境中建议设为True,强制 HTTP 跳转到 HTTPS。SECURE_HSTS_SECONDS:默认0(未启用),生产环境应设为大于0的值(如31536000一年)。SECURE_HSTS_INCLUDE_SUBDOMAINS:默认False。SECURE_HSTS_PRELOAD:默认False。SESSION_COOKIE_SECURE:默认False,生产环境建议True(仅通过 HTTPS 发送 cookie)。CSRF_COOKIE_SECURE:默认False,生产环境建议True。X_FRAME_OPTIONS:默认'DENY'(由XFrameOptionsMiddleware直接设置),这是默认开启且安全的,可以防止点击劫持。CSRF_COOKIE_HTTPONLY:默认False,建议设为True以防止 JavaScript 访问 CSRF cookie。SECURE_CONTENT_TYPE_NOSNIFF:默认True,防止浏览器进行 MIME 嗅探。SECURE_BROWSER_XSS_FILTER:默认True(在较新版本 Django 中已移除或默认启用),旧版本中启用浏览器内置 XSS 过滤器。
| 方面 | 情况 |
|---|---|
| 中间件本身 | 默认启用(SecurityMiddleware, CsrfViewMiddleware, XFrameOptionsMiddleware 都包含在默认的 MIDDLEWARE 列表中)。 |
| 默认保护强度 | 基础防护已开启(如阻止点击劫持、CSRF 防护、MIME 嗅探保护),但高级 HTTPS 策略默认关闭。 |
| 生产环境建议 | 必须检查并配置 settings.py 中的安全设置,特别是 SECURE_* 和 SESSION_COOKIE_SECURE / CSRF_COOKIE_SECURE 等。 |
| 检查方法 | 运行 python manage.py check --deploy 命令,Django 会列出当前配置中所有不安全的设置建议。 |
准确的回答是:Django 的安全中间件确实是默认启用的,但不要因此认为你的应用已经“完全安全”了。 你需要根据生产环境(尤其是是否使用 HTTPS)手动调整关键的安全配置项。