Django Security Cheat Sheet:OWASP 视角下的 Django 应用安全加固实战指南

📅 发布时间:2026/9/30 7:09:08
Django Security Cheat Sheet:OWASP 视角下的 Django 应用安全加固实战指南
应用安全【免费下载链接】CheatSheetSeriesThe OWASP Cheat Sheet Series was created to provide a concise collection of high value information on specific application security topics.项目地址https://gitcode.com/gh_mirrors/ch/CheatSheetSeries点击查看免费下载本文是 OWASP Cheat Sheet Series 中《Django Security Cheat Sheet》的深度解读与实践指南面向使用 Django 框架构建 Web 应用的开发者。文章以 Django 内置的安全特性secure-by-default为主线逐项讲解认证、密钥管理、安全响应头、CSRF/XSS 防护、HTTPS 强制与部署前安全检查等配置要点结合本仓库 Password Storage Cheat Sheet、Cross-Site Request Forgery Prevention Cheat Sheet 等关联文档补充底层原理读完后你将掌握一套可直接复制到settings.py与视图代码中的 Django 安全加固方案。总体建议General RecommendationsDjango 自带许多开箱即用的安全特性默认倾向于安全secure-by-default但这些特性足够灵活开发者在不熟悉内部机制时也可能配置出不安全的组合。本速查表的目标正是枚举这些易错场景。在深入各项配置前先遵循三条底线保持依赖更新始终将 Django 及应用依赖升级到最新版本以跟进安全漏洞修复。可参考仓库中 Django REST Framework Cheat Sheet 关于依赖更新流程的建议定期每月/每季度例行更新、每周评估重要安全漏洞、在极端情况下执行紧急更新。生产环境严禁开启调试切勿在生产环境中设置DEBUG True这既会泄露堆栈信息也会触发check --deploy的security.W018警告。防护暴力破解使用django-ratelimit、django-axes等第三方包限制登录尝试次数防止针对认证接口的暴力破解。认证加固Authentication启用官方认证应用使用django.contrib.auth应用提供登录、登出、密码修改等视图与表单。在settings.py的INSTALLED_APPS中同时加入其依赖模块django.contrib.contenttypes与django.contrib.sessionsINSTALLED_APPS [ # ... django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, # ... ]用装饰器强制登录login_required装饰器确保只有已认证用户能访问目标视图未认证用户会被重定向到登录页。默认重定向到登录页也可通过login_url指定自定义地址from django.contrib.auth.decorators import login_required # 未认证用户被重定向到默认登录页 login_required def my_view(request): # Your view logic # 未认证用户被重定向到自定义 /login-page/ login_required(login_url/login-page/) def my_view(request): # Your view logic配置密码策略校验器通过AUTH_PASSWORD_VALIDATORS强制密码策略。Django 提供四类内置校验器可组合使用并配置选项AUTH_PASSWORD_VALIDATORS [ { # 检查密码与用户属性如用户名、邮箱的相似度 NAME: django.contrib.auth.password_validation.UserAttributeSimilarityValidator, OPTIONS: { user_attributes: (username, email, first_name, last_name), max_similarity: 0.7, } }, { # 检查密码是否满足最小长度 NAME: django.contrib.auth.password_validation.MinimumLengthValidator, OPTIONS: { min_length: 8, } }, { # 检查密码是否出现在常见弱密码列表中 NAME: django.contrib.auth.password_validation.CommonPasswordValidator, }, { # 检查密码是否完全由数字组成 NAME: django.contrib.auth.password_validation.NumericPasswordValidator, } ]密码哈希与校验工具函数永远不要明文存储密码。Django 提供两个底层工具函数make_password()将明文密码哈希化后存储。check_password()将用户输入的明文密码与库中哈希值比对。from django.contrib.auth.hashers import make_password #... hashed_pwd make_password(plaintext_password)from django.contrib.auth.hashers import check_password #... plain_pwd plaintext_password hashed_pwd hashed_password_from_database if check_password(plain_pwd, hashed_pwd): print(The password is correct.) else: print(The password is incorrect.)底层原理哈希算法选型本仓库的 Password Storage Cheat Sheet 明确指出密码必须使用慢速、可加盐的哈希算法如 Argon2id、bcrypt、PBKDF2存储而 SHA-256 这类快速哈希因便于暴力破解而不适用。Django 默认使用 PBKDF2 算法若追求更强的内存困难型算法可配置PASSWORD_HASHERS优先使用 Argon2id建议至少 19 MiB 内存、2 次迭代、1 并行度。该文档还提醒当 PBKDF2 处理超过哈希函数块大小SHA-256 为 64 字节的长密码时若实现不当可能引发拒绝服务Django 2013 年曾因此发布安全公告因此对超长密码需谨慎处理。密钥管理Key ManagementSECRET_KEY用于 Django 的加密签名会话、密码重置令牌、CSRF 等均依赖它必须严格保密。建议生成至少 50 字符、包含字母、数字与符号混合的随机密钥使用强随机生成器生成例如 Django 提供的get_random_secret_key()函数避免在settings.py或其他代码位置硬编码密钥应存入环境变量或密钥管理服务import os SECRET_KEY os.environ.get(DJANGO_SECRET_KEY)定期轮换密钥但注意轮换会使既有会话、密码重置令牌等失效一旦密钥泄露必须立即轮换。check --deploy会通过security.W009警告检查密钥是否过短少于 50 字符、唯一字符过少或带有django-insecure-前缀Django 自动生成密钥的标志。安全响应头Headers在settings.py的MIDDLEWARE中加入django.middleware.security.SecurityMiddleware其为响应添加多项安全相关参数SECURE_CONTENT_TYPE_NOSNIFF设为True通过X-Content-Type-Options: nosniff响应头防止 MIME 类型嗅探攻击SECURE_HSTS_SECONDS配合 HSTSHTTP 严格传输安全确保站点仅通过 HTTPS 访问。同时加入django.middleware.clickjacking.XFrameOptionsMiddleware注意顺序必须排在SecurityMiddleware之后中间件顺序很重要用于设置X_FRAME_OPTIONS设为DENY或SAMEORIGIN为所有 HTTP 响应添加X-Frame-Options响应头防护点击劫持Clickjacking攻击。点击劫持防护的更多细节可参考仓库中的 Clickjacking Defense Cheat Sheet。内容安全策略Content Security PolicyCSPDjango 默认不内置 CSP 支持。可以通过两类方式实现引入第三方库如django-csp配置 CSP 中间件与策略直接在 HTTP 响应头中配置 CSP 策略。CSP 策略的完整设计default-src、script-src、object-src等指令的取舍可参考仓库中的 Content Security Policy Cheat Sheet该文档给出了系统化的 CSP 策略编写建议避免形同虚设的策略。Cookie 安全Cookies以下三个设置点确保 Cookie 只通过 HTTPS 传输SESSION_COOKIE_SECURE True会话 Cookie 仅通过安全HTTPS连接发送CSRF_COOKIE_SECURE TrueCSRF Cookie 仅通过安全连接发送在视图中通过HttpResponse.set_cookie()设置自定义 Cookie 时必须将secure参数设为Trueresponse HttpResponse(Some response) response.set_cookie(my_cookie, cookie_value, secureTrue)跨站请求伪造防护CSRF在MIDDLEWARE中加入django.middleware.csrf.CsrfViewMiddleware为响应添加 CSRF 相关保护。表单中使用{% csrf_token %}模板标签嵌入 CSRF 令牌form methodpost {% csrf_token %} !-- Your form fields here -- /form对于 AJAX 调用需要在请求发起前先提取 CSRF 令牌。仓库的 Cross-Site Request Forgery Prevention Cheat Sheet 详细记录了 Django 的令牌交换机制Django 使用请求头X-CSRFToken区别于 Rails、Laravel 使用的X-CSRF-Token典型做法是先读取页面 meta 标签或 Cookie 中的令牌再通过XMLHttpRequest.setRequestHeader(X-CSRFToken, csrf_token)附加到每次请求该文档还提供了 axios 等库的全局拦截器配置示例。跨站脚本防护XSS在模板渲染层面遵循以下建议使用 Django 内置模板系统渲染模板依赖其自动 HTML 转义Automatic HTML escaping机制对输出进行转义尽量避免使用safe过滤器或mark_safe函数关闭自动转义确需使用时必须确保输入来自可信来源对用户可控输入要格外谨慎需要向模板中的 JavaScript 传递数据时使用json_script模板过滤器安全地序列化数据Django 自带针对 HTML、JavaScript 等上下文的基础 XSS 防护但应用层仍应遵循仓库中 Cross Site Scripting Prevention Cheat Sheet 与 DOM based XSS Prevention Cheat Sheet 提供的输出编码与上下文感知转义规则。HTTPS 强制HTTPS确保django.middleware.security.SecurityMiddleware已在MIDDLEWARE中未添加则补上设置SECURE_SSL_REDIRECT True自动将所有 HTTP 请求 301 永久重定向到 HTTPS浏览器会记住该重定向后续请求直接走 HTTPS若应用位于代理或负载均衡之后设置SECURE_PROXY_SSL_HEADER让 Django 能识别原始请求的协议否则可能因代理转发的 HTTP 请求被误判为 HTTPS 而绕过重定向。管理后台 URL 混淆Admin panel URL默认管理后台地址为example.com/admin/可修改默认 URL 以小幅提高自动化攻击的难度。操作方法在项目的默认应用文件夹中找到管理顶层 URL 的urls.py修改urlpatterns列表中指向admin.site.urls的路径使其不再是admin/。这通过隐藏常见的后台端点增加一层额外防护注意这属于隐匿型措施不能替代认证、授权等核心控制相关纵深防御思路可参考仓库的 Access Control Cheat Sheet。部署前安全检查内置命令check --deployDjango 提供内置安全检查命令manage.py check --deploy会在部署模式下扫描安全相关设置并输出警告$ ./manage.py check --deploy System check identified some issues: WARNINGS: ?: (security.W004) You have not set a value for the SECURE_HSTS_SECONDS setting. If your entire site is served only over SSL, you may want to consider setting a value and enabling HTTP Strict Transport Security. Be sure to read the documentation first; enabling HSTS carelessly can cause serious, irreversible problems. ?: (security.W008) Your SECURE_SSL_REDIRECT setting is not set to True. Unless your site should be available over both SSL and non-SSL connections, you may want to either set this setting True or configure a load balancer or reverse-proxy server to redirect all connections to HTTPS. ?: (security.W009) Your SECRET_KEY has less than 50 characters, less than 5 unique characters, or its prefixed with django-insecure- indicating that it was generated automatically by Django. Please generate a long and random value, otherwise many of Djangos security-critical features will be vulnerable to attack. ?: (security.W012) SESSION_COOKIE_SECURE is not set to True. Using a secure-only session cookie makes it more difficult for network traffic sniffers to hijack user sessions. ?: (security.W016) You have django.middleware.csrf.CsrfViewMiddleware in your MIDDLEWARE, but you have not set CSRF_COOKIE_SECURE to True. Using a secure-only CSRF cookie makes it more difficult for network traffic sniffers to steal the CSRF token. ?: (security.W018) You should not have DEBUG set to True in deployment. ?: (security.W020) ALLOWED_HOSTS must not be empty in deployment. System check identified 7 issues (0 silenced).对照上文逐项修正这些警告即可完成基础加固。例如W020要求在生产环境显式配置ALLOWED_HOSTS空值会触发该警告W004提示若全站仅走 SSL 可启用 HSTS注意需先理解后果HSTS 配置不当会造成不可逆问题W016提示已启用 CSRF 中间件但未设置CSRF_COOKIE_SECURE。此命令可作为 CI/CD 流水线中的自动化安全门禁与本仓库的 CI/CD Security Cheat Sheet 相结合实现可重复的加固流程。参考与延伸阅读本仓库相关的进一步资料Django REST Framework Cheat SheetDRF API 场景下的认证类、权限类、限流与分页等安全配置Cross-Site Request Forgery Prevention Cheat Sheet含 DjangoX-CSRFToken请求头的 AJAX 集成示例Password Storage Cheat SheetArgon2id、bcrypt、PBKDF2 的选型与参数建议用于优化 Django 默认哈希配置Content Security Policy Cheat SheetCSP 策略的系统化编写指南Clickjacking Defense Cheat SheetX-Frame-Options与 frame-ancestors 的完整对比Cross Site Scripting Prevention Cheat Sheet 与 DOM based XSS Prevention Cheat SheetXSS 上下文感知编码细则。赞分享应用安全【免费下载链接】CheatSheetSeriesThe OWASP Cheat Sheet Series was created to provide a concise collection of high value information on specific application security topics.项目地址https://gitcode.com/gh_mirrors/ch/CheatSheetSeries点击查看免费下载相关推荐Mage-VL系统设计详解System 1 System 2双进程架构的创新之处Mage VL系统设计详解System 1 System 2双进程架构的创新之处 Mage VL作为一款先进的视觉语言模型其核心创新在于采用了 Syst人工智能基础模型多模态计算机视觉视频NLPECC django-security Skill 实战指南Django 认证、授权、注入防护与生产安全配置全解ECC django security Skill 实战指南Django 认证、授权、注入防护与生产安全配置全解 本文以 ECCEverything Cla人工智能AI 技能AI 插件AI 评测Agent 评测MCP Clients开发工具CentOS-WSL完全指南如何在Windows系统中无缝运行CentOS发行版CentOS WSL完全指南如何在Windows系统中无缝运行CentOS发行版 CentOS WSL项目提供了将CentOS QCOW2云镜像转换为适用于W上一篇在 Feast 中自建本地 Feast UI 应用从 feast ui 脚手架到自定义 React 模块的完整指南下一篇scan4all 中的 freeportGo 语言获取操作系统空闲端口的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考