知其然,知其所以然
Java 内部原理 2026-10-02

JVMTI:本地诊断接口能观察什么

用 clang 编译一个真实的 JVMTI C agent:申请能力成功(可申请 68 项)、通过事件回调统计 ClassPrepare 172、ThreadStart 5、GC 9 次;VMDeath 时 GetLoadedClasses 661 个类、IterateOverInstancesOfClass 数出 app.Foo 1234 个实例、列出 6 个线程及状态。

Java JVMTI 本地诊断 C 语言 Agent 真实验证 动画演示
Django 2026-10-01

SecurityMiddleware 的安全响应头

SecurityMiddleware 与 XFrameOptionsMiddleware 默认发出 nosniff、Referrer-Policy: same-origin、COOP: same-origin、X-Frame-Options: DENY;HSTS / SSL 重定向要手动开;check --deploy 默认 4 条警告、加固后 1 条;Django 6 内置 CSP 中间件。

Django 安全 SecurityMiddleware HSTS CSP 真实验证 动画演示
Django 2026-10-01

ALLOWED_HOSTS 的校验过程

ALLOWED_HOSTS 的校验:精确写法忽略端口与大小写但不含子域名;'.example.com' 匹配域名及所有子域名;空列表在 DEBUG=True 只放行 localhost / 127.0.0.1 / [::1]、DEBUG=False 全部 400;格式非法的 Host 连 '*' 也被拒;'*' 时 build_absolute_uri 会用攻击者给的 Host。

Django 安全 ALLOWED_HOSTS Host头 真实验证 动画演示
Django 2026-10-01

CSRF Trusted Origins 配置

CSRF 来源检查的规则:Origin 必须与请求同源(协议、主机、端口都相同)或在 CSRF_TRUSTED_ORIGINS 里;通配符 https://*.example.org 也匹配 example.org 本身;不带协议的写法被 check 拒绝;没有 Origin 时改看 Referer;TLS 终止代理后面需要 SECURE_PROXY_SSL_HEADER。

Django 安全 CSRF CSRF_TRUSTED_ORIGINS 真实验证 动画演示
Django 2026-10-01

XSS 防护与模板自动转义

用同一个恶意字符串看模板自动转义:{{ p }}、format_html 安全;|safe、autoescape off、mark_safe 输出原样 <script>;不加引号的属性值会被插入新属性;href 里的 javascript: 不被拦截;放进 script 要用 escapejs / json_script。

Django 安全 XSS 模板 自动转义 真实验证 动画演示
Django 2026-10-01

SQL Injection 与 ORM 参数化查询

同一个输入 x' OR '1'='1:ORM filter 与 %s 参数化返回 0 行;raw / cursor.execute / extra 用 f-string 拼接返回全部 3 行;参数不能代替列名;order_by(用户输入) 不会注入但能按任意字段排序(泄漏顺序信息),要用白名单。

Django 安全 SQL注入 ORM 参数化 真实验证 动画演示
Django 2026-10-01

Clickjacking 防护与 X-Frame-Options

点击劫持防护:XFrameOptionsMiddleware 默认 X-Frame-Options: DENY;在真实 Chrome 里测 5 种页面的同源与跨源 iframe:DENY 全拦、SAMEORIGIN 只放同源、exempt 全放行、CSP frame-ancestors 'self' / 'none' 同样生效。

Django 安全 点击劫持 X-Frame-Options CSP 真实验证 动画演示
Django 2026-10-01

HSTS 配置与 HTTPS 部署

HTTPS 部署的几个坑:不配 SECURE_PROXY_SSL_HEADER 时 is_secure() 永远 False;配了之后客户端能伪造 X-Forwarded-Proto;SECURE_SSL_REDIRECT 放在 TLS 终止代理后面会重定向循环;真实 TLS 的 gunicorn 上验证了 HSTS 头。

Django 安全 HSTS HTTPS SECURE_PROXY_SSL_HEADER 真实验证 动画演示
Django 2026-10-01

Django Secret Key 的用途

SECRET_KEY 的用途,靠换密钥来验证:signing 签名、会话的认证哈希、密码重置令牌换密钥后全部失效;SECRET_KEY_FALLBACKS 让旧值继续有效;密码哈希、CSRF 令牌不受影响;空密钥抛 ImproperlyConfigured。

Django 安全 SECRET_KEY 签名 会话 真实验证 动画演示
Django 2026-10-01

生产环境 DEBUG=False 的影响

DEBUG=False 的实际差别:500 页面从 51454 字节(含异常、局部变量、设置)变成 145 字节;connection.queries 50 → 0;500 会邮件通知 ADMINS;runserver 不再提供静态文件(200 → 404);@sensitive_variables 在 DEBUG=True 时不生效。

Django 安全 DEBUG 错误页面 真实验证 动画演示
Django 2026-10-01

Gunicorn 与 Django WSGI

gunicorn 26.2.0 默认 1 个 sync worker;20 个 0.3 s 的并发请求:sync×1 6084 ms、sync×4 1521 ms、gthread 2 进程×8 线程 630 ms;timeout 杀 worker(客户端收到 状态码 500);max-requests 按计数回收 worker;SIGTERM 会等在途请求完成。

Django gunicorn WSGI 部署 worker 真实验证 动画演示
Django 2026-10-01

Uvicorn、Daphne 与 Django ASGI

uvicorn、daphne、gunicorn + UvicornWorker 跑同一个 Django ASGI 应用:20 个并发请求都约 515 ms;Django 不支持 lifespan(uvicorn 日志提示后继续);uvicorn --workers 2 均匀分摊;SIGTERM 时 uvicorn 等在途请求完成,daphne 直接断开。

Django ASGI uvicorn daphne 部署 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号