Django论坛富文本与附件安全:XSS、CSRF 与内容隔离的落地方案

Django论坛富文本与附件安全:XSS、CSRF 与内容隔离的落地方案

django.cn/forum/ 场景下,富文本编辑与文件上传是最容易引入风险的入口。本文给出一套“端到端”的内容安全方案,覆盖输入白名单、上传隔离、预览防护与审计追踪。

富文本输入与渲染

  • 白名单清洗:后端二次清洗优先于前端校验,允许标签集合(p, h1–h3, ul/ol, li, a, img, code, pre, blockquote, table),严格限制属性(href/src/title/alt/rel,target),a 标签强制 rel="nofollow ugc noopener"
  • 协议限制:仅允许 https:data:image/*;拒绝 javascript:vbscript:file:
  • 内联脚本/样式:全部移除;对 style 白名单(颜色、对齐)可选启用“正则+CSS Sanitizer”。
  • 代码高亮:后端将代码块包裹 pre>code 并转义,前端仅做高亮渲染,避免二次 HTML 注入。
from bleach.sanitizer import Cleaner
ALLOWED_TAGS = ['p','h1','h2','h3','ul','ol','li','a','img','code','pre','blockquote','table','thead','tbody','tr','th','td','hr','em','strong']
ALLOWED_ATTRS = {'a':['href','title','rel','target'], 'img':['src','alt','title'], '*':['class']}
cleaner = Cleaner(tags=ALLOWED_TAGS, attributes=ALLOWED_ATTRS, protocols=['http','https','data'])
safe_html = cleaner.clean(user_html)

CSRF 与会话安全

  • 表单:启用 Django CSRF 中间件,富文本异步保存使用 X-CSRFToken;跨域预检限制到可信来源。
  • 登录:会话 Cookie 置 HttpOnly+Secure+SameSite=Lax;管理员后台改用双因子验证与短时效会话。
  • 上传接口:强制 POST + CSRF 校验,匿名用户需经人机校验/邀请码。

文件上传与隔离

  • 对象存储:图片/附件传 OSS/S3,分桶/目录按租户与资源类型隔离:/media/forum/{tenant}/{yyyy}/{mm}/...
  • 签名访问:原始文件仅允许签名 URL(短有效期),公开展示图生成受控样式(如等比缩略、去 EXIF)。
  • MIME 与魔数:双重校验,禁止可执行脚本(php, js, html, svg 中脚本),压缩包仅允许 zip 且解包扫描。
  • 病毒扫描:集成 ClamAV/云杀毒,上传后异步扫描,命中即下架并通知审核。
def validate_upload(f):
    assert f.size <= settings.MAX_MB * 1024*1024
    mime = magic.from_buffer(f.read(2048), mime=True)
    if mime not in settings.ALLOWED_MIME:
        raise ValidationError("Invalid file type")

预览与下载安全

  • 独立域名:静态资源用 static.cdn.example.com,主站设置 Content-Security-Policydefault-src 'self'; img-src 'self' https: data:; script-src 'self'; frame-ancestors 'none'
  • 文件下载:统一 Content-Disposition: attachment,避免浏览器内联执行;SVG 强制转 PNG 预览。
  • PDF/Office:只提供离线下载或受信的内嵌查看器,禁用外部脚本。

审核与风控

  • 多模态审核:文本(敏感词/外链黑名单)、图片(OCR+NSFW)、链接健康(域名信誉/跳转检测);命中阈值进入人工队列。
  • 用户分级:基于信誉分与历史记录,决定是否“先发后审/先审后发”;对新手限制外链/图片数量与发布频率。
  • 追踪与回溯:存储原始文本与清洗后文本、上传者 IP/指纹/时间戳;提供一键下架与批量封禁能力。

指标与演练

  • 命中率、误杀率、平均审核用时、下架响应时间;
  • 定期红队演练(XSS/存储型/反射型、SVG 注入、压缩炸弹、MIME 欺骗),持续升级规则与工具链。

评论 0