SuperAPI AI 工具集

security-django

安全与审计

查看项目

更新于 10-15 13:51

技能介绍

该技能是一套面向 Django 应用的安全审计模式集合,主要用于审查 settings.py 中的关键配置与中间件设置,并识别常见漏洞。文中给出的内容以反例(❌)与正例(✓)代码对照的方式呈现,便于对照检查。

一、关键设置审计(settings.py)

  • SECRET_KEY:不应硬编码或提交到仓库,应从环境变量读取,例如 os.environ['DJANGO_SECRET_KEY'],或使用 django-environ 的 env('SECRET_KEY')。检查点:SECRET_KEY 是否在 .env 中,且 .env 是否已加入 .gitignore。
  • DEBUG:生产环境不应开启 DEBUG = True,因为会暴露完整堆栈、设置与 SQL 查询。建议通过环境变量控制,如 DEBUG = os.environ.get('DEBUG', 'False').lower() == 'true'。
  • ALLOWED_HOSTS:不应使用 ['*'],也不应在生产环境留空。应显式列出主机,如 ['example.com', 'www.example.com']。

二、安全中间件

  • 必需中间件:django.middleware.security.SecurityMiddleware 应位于 MIDDLEWARE 列表靠前位置(文中标注为 MUST be first),此外需包含 CsrfViewMiddleware 与 XFrameOptionsMiddleware。检查点:SecurityMiddleware 是否启用且靠前。
  • 安全中间件设置:生产环境建议启用 SECURE_BROWSER_XSS_FILTER(已弃用但无害)、SECURE_CONTENT_TYPE_NOSNIFF、SECURE_HSTS_SECONDS(示例为 31536000,即 1 年)、SECURE_HSTS_INCLUDE_SUBDOMAINS、SECURE_HSTS_PRELOAD、SECURE_SSL_REDIRECT、SESSION_COOKIE_SECURE、CSRF_COOKIE_SECURE。

三、CSRF 防护

  • 全局禁用 CsrfViewMiddleware 属于严重问题。
  • @csrf_exempt 的滥用属于高危:支付回调等 webhook 配合其他认证时可能可接受,但类似更新个人资料这类视图绝不应使用。审计方法:搜索所有 @csrf_exempt,逐个确认理由。
  • CSRF_TRUSTED_ORIGINS(Django 4.0+):不应使用 ['https://*'] 这类过于宽松的配置,应显式列出域名。

四、常见漏洞

  • SQL 注入:禁止在 raw 或 cursor.execute 中使用字符串格式化,应使用参数化查询(如 %s 占位)或 ORM。
  • 命令注入:禁止把用户输入拼入 subprocess 并配合 shell=True,或使用 os.system;应使用数组参数形式,避免 shell=True。
  • 路径遍历:不应直接使用用户可控的 filename 拼接路径;应使用 os.path.basename 处理并校验最终路径是否位于上传目录内,否则抛出 Http404。
  • IDOR(不安全的直接对象引用):查询对象时不应只按 id 获取,应同时校验归属,如 Document.objects.get(id=doc_id, owner=request.user),并结合 LoginRequiredMixin。
  • 鉴权装饰器缺失:管理类视图应加上 @login_required 与 @user_passes_test 等装饰器。

五、Django REST Framework 检查 DRF 设置:DEFAULT_AUTHENTICATION_CLASSES 中单独使用 SessionAuthentication 而不配合 CSRF 存在风险;DEFAULT_PERMISSION_CLASSES 不应默认 AllowAny,建议默认 IsAuthenticated。

六、快速审计命令 文中列出可直接运行的命令:

  • rg "(SECRET_KEY|DEBUG|ALLOWED_HOSTS)" settings*.py
  • rg "@csrf_exempt" . -g "*.py"
  • python manage.py check --deploy
  • rg ".raw(|cursor.execute(" . -g "*.py" -A 1
  • rg "(subprocess.|os.system|os.popen)" . -g "*.py"
  • rg "^def " views.py | head -20(再检查哪些函数带装饰器)
  • rg "shell\s*=\sTrue" . -g ".py"

七、加固清单 SECRET_KEY 来自环境变量而非硬编码;生产环境 DEBUG = False;ALLOWED_HOSTS 显式设置且无通配符;SecurityMiddleware 已启用并配置;CSRF 中间件已启用;SECURE_SSL_REDIRECT = True;SESSION_COOKIE_SECURE = True;CSRF_COOKIE_SECURE = True;无未经说明的 @csrf_exempt;所有视图具备合适的鉴权装饰器;无字符串拼接的原始 SQL;DRF 默认权限为 IsAuthenticated。

适用场景:在编写或审查 Django 项目、进行安全自查或代码评审时,可依据上述模式逐项核对。限制:资料仅提供审计模式与检查清单,未说明自动化程度、安装方式、平台依赖或收费信息,这些内容暂未提供。