当前位置: 首页 > news >正文

CTFd CSRF 校验模块解读

实现上传头像功能的时候遇到了 403,隐约感觉到可能是 csrf 的问题,但是嫌麻烦一直懒得翻源码里的校验逻辑,反而让自己怀疑是 mime type 有限制,走了弯路。

机缘巧合发现了 csrf 的校验位置,总算是通了

定位代码位置

CTFd/__init__.py 文件下,观察如下代码片段

        init_request_processors(app)init_template_filters(app)init_template_globals(app)# Importing here allows tests to use sensible names (e.g. api instead of api_bp)from CTFd.admin import adminfrom CTFd.api import apifrom CTFd.auth import authfrom CTFd.challenges import challengesfrom CTFd.errors import render_errorfrom CTFd.events import eventsfrom CTFd.matches import matchesfrom CTFd.scoreboard import scoreboardfrom CTFd.share import socialfrom CTFd.teams import teamsfrom CTFd.users import usersfrom CTFd.views import viewsfrom CTFd.writeup import writeupapp.register_blueprint(views)app.register_blueprint(teams)app.register_blueprint(users)app.register_blueprint(matches)app.register_blueprint(challenges)

大概能猜出来 csrf 校验应该是在注册蓝图之前初始化的,也就是 init_request_processors。进去后发现一堆 @app.before_request 的装饰器,感觉对了。往下翻,查询 403 找到

@app.before_requestdef csrf():try:func = app.view_functions[request.endpoint]except KeyError:abort(404)if hasattr(func, "_bypass_csrf"):returnif request.headers.get("Authorization"):returnif not session.get("nonce"):session["nonce"] = generate_nonce()if request.method not in ("GET", "HEAD", "OPTIONS", "TRACE"):if request.content_type == "application/json":if session["nonce"] != request.headers.get("CSRF-Token"):abort(403)if request.content_type != "application/json":if session["nonce"] != request.form.get("nonce"):abort(403)

bingo。原来只有 json 的 csrf token 是放在 header 里的,难怪 403 了。

相关文章:

  • Java 中 AQS 的实现原理
  • 深入理解设计模式之原型模式(Prototype Pattern)
  • 复现nn-Unet模型 实验报告
  • 【我的创作纪念日】512
  • 编程日志5.3
  • Day21打卡—常见降维算法
  • 免安装 + 快速响应Photoshop CS6 精简版低配置电脑修图
  • Linux PCI 驱动开发指南
  • AI日报 · 2025年05月11日|传闻 OpenAI 考虑推出 ChatGPT “永久”订阅模式
  • 【React中useRef钩子详解】
  • 【数据结构入门训练DAY-31】组合的输出
  • 【音视频工具】MP4BOX使用
  • k8s 资源对比总结
  • 通过 Azure DevOps 探索 Helm 和 Azure AKS
  • istio in action之应用弹性与容错机制
  • 理解页内碎片与页外碎片:分页存储管理的关键问题
  • 长短期记忆网络(LSTM)深度解析:从理论到实践的全方位指南
  • 23、DeepSeek-V2论文笔记
  • LangGraph框架中针对MCP协议的变更-20250510
  • YOLOv2框架深度解析
  • 联合国秘书长欢迎中美经贸高层会谈成果
  • 某博主遭勒索后自杀系自导自演,成都警方立案调查
  • 网信部门曝光网络谣言典型案例,“AI预测彩票号码百分百中奖”等在列
  • 马上评丨摆摊要交芙蓉王?对吃拿卡要必须零容忍
  • 《新时代的中国国家安全》白皮书(全文)
  • 2025年度十大IP!IP SH荣膺文化综合类TOP10