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

漏洞知识点《Tornado框架中RequestHandler的对象》

Tornado框架中RequestHandler的所有对象

['SUPPORTED_METHODS', '_INVALID_HEADER_CHAR_RE',
'__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', '_break_cycles',
'_clear_representation_headers', '_convert_header_value', '_decode_xsrf_token',
'_execute', '_get_argument', '_get_arguments', '_get_raw_xsrf_token', '_handle_request_exception', 
'_initialize', '_log', '_remove_control_chars_regex', '_request_summary', '_stream_request_body', 
'_template_loader_lock', '_template_loaders', '_transforms', '_ui_method', '_ui_module', 
'_unimplemented_method', 'add_header', 'check_etag_header', 'check_xsrf_cookie', 'clear', 
'clear_all_cookies', 'clear_cookie', 'clear_header', 'compute_etag', 'cookies', 'create_signed_value', 
'create_template_loader', 'current_user', 'data_received', 'decode_argument', 'delete', 'detach', 'finish', 'flush', 'get', 'get_argument', 'get_arguments', 'get_body_argument', 'get_body_arguments', 'get_browser_locale', 'get_cookie', 'get_current_user', 
'get_login_url', 'get_query_argument', 'get_query_arguments', 'get_secure_cookie', 
'get_secure_cookie_key_version', 'get_status', 'get_template_namespace', 'get_template_path', 
'get_user_locale', 'head', 'initialize', 'locale', 'log_exception', 'on_connection_close', 'on_finish', 
'options', 'patch', 'path_args', 'path_kwargs', 'post', 'prepare', 'put', 'redirect', 'render', 
'render_embed_css', 'render_embed_js', 'render_linked_css', 'render_linked_js', 'render_string', 
'require_setting', 'reverse_url', 'send_error', 'set_cookie', 'set_default_headers', 'set_etag_header', 
'set_header', 'set_secure_cookie', 'set_status', 'settings', 'static_url', 'write', 
'write_error', 'xsrf_form_html', 'xsrf_token']

核心方法分类及功能解析

一、请求生命周期方法
  1. 初始化阶段

    • initialize():接收路由参数(如数据库连接),需开发者自定义初始化逻辑。例如,路由中传递的字典参数会通过此方法注入。
    • prepare():在HTTP方法(如get())前调用,适合执行权限校验或数据预加载。可在此处调用finish()提前终止请求。
  2. HTTP方法处理

    • get()/post()/put()/delete():需开发者重写以实现业务逻辑,对应HTTP动词的请求处理。
    • head()/options()/patch():支持其他HTTP方法的扩展处理。
  3. 请求结束阶段

    • on_finish():响应完成后触发,用于资源清理或日志记录,不可修改响应内容。
    • finish(chunk=None):显式结束响应,异步场景必须调用,支持多次写入后统一发送。
二、参数与数据处理
  1. 参数获取

    • get_argument(name):从URL或Body中获取单个参数(优先Body),默认去空格。
    • get_arguments(name):返回同名参数的列表(适用于多选参数)。
    • get_query_argument(name):仅从URL查询字符串获取参数。
    • get_body_argument(name):仅从请求体(如表单)获取参数。
    • decode_argument(value):处理URL或参数的编码转换(如Unicode解码)。
  2. 文件与元数据

    • request.files:获取上传文件列表(字典形式,包含filenamecontent_type等)。
    • request.remote_ip:客户端IP地址;request.method:HTTP请求方法。
三、响应控制与输出
  1. 状态与头信息

    • set_status(code, reason):设置HTTP状态码及描述(如404, "Not Found")。
    • set_header(name, value):设置响应头(覆盖同名头);add_header(name, value):追加多值头。
    • clear_header(name):删除已设置的响应头。
  2. 内容输出

    • write(chunk):向响应体写入字符串、字节或字典(字典自动转JSON)。
    • flush():立即发送缓冲区内容,适用于流式响应。
    • redirect(url):重定向到指定URL,支持permanent参数设置301/302状态。
  3. 模板渲染

    • render(template_name, **kwargs):渲染模板文件并输出结果,支持动态参数传递。
    • render_string():返回渲染后的字符串,用于二次处理。
四、Cookie与安全
  1. Cookie管理

    • get_cookie(name):读取Cookie值;set_cookie(name, value):设置常规Cookie。
    • get_secure_cookie(name):读取签名Cookie;set_secure_cookie(name, value):设置加密Cookie。
    • clear_all_cookies():清除所有Cookie。
  2. 安全机制

    • check_xsrf_cookie():验证CSRF令牌,防止跨站请求伪造。
    • xsrf_form_html:生成隐藏的CSRF令牌字段,需嵌入表单。
五、异步与扩展功能
  1. 异步处理

    • data_received(chunk):处理流式请求体数据,需配合@stream_request_body装饰器。
    • on_connection_close():客户端断开连接时触发,用于清理异步任务。
  2. 路由与上下文

    • reverse_url(name):通过路由名称生成URL(需在路由中定义name参数)。
    • settings:访问应用级配置(如debug模式、cookie_secret)。
六、错误处理与日志
  1. 异常处理

    • write_error(status_code, **kwargs):自定义错误页面,可重写以美化输出。
    • send_error(status_code):触发错误响应并调用write_error
  2. 日志记录

    • log_exception(typ, value, tb):记录异常信息到日志系统。
    • _request_summary():生成请求摘要(如GET /path),用于日志输出。
七、特殊属性与内部方法
  • request:获取HTTPServerRequest对象,包含完整的请求元数据(如headerspath等)。
  • SUPPORTED_METHODS:定义支持的HTTP方法列表(可扩展如PROPFIND)。
  • path_args/path_kwargs:从URL正则捕获的参数(如/user/(\d+)中的数字)。

SSTI(服务器端模板注入)相关的核心方法及属性

一、敏感配置与全局变量访问
  1. handler.settings

    • 作用:指向Application.settings,包含应用级配置(如cookie_secret、数据库连接参数等)。
    • 利用场景
      • 注入{{handler.settings}}可直接获取cookie_secret,用于签名Cookie或生成文件哈希(如护网杯2018题目中的md5(cookie_secret + filename))。
      • 示例Payload:
        {{handler.settings}}  # 返回包含cookie_secret的字典
        
  2. handler.__init__.__globals__

    • 作用:访问RequestHandler构造函数中的全局命名空间,暴露内置函数(如eval__import__)。
    • 利用场景
      • 通过链式调用执行系统命令:
        {{handler.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}}
        
二、参数注入与数据获取
  1. handler.get_argument(name) / handler.get_arguments(name)

    • 作用:从URL查询或请求体中获取参数值,默认去空格。
    • 利用场景
      • 若参数未过滤直接渲染到模板中,可构造恶意输入触发SSTI:
        {{eval(handler.get_argument('payload'))}}  # 传递?payload=__import__("os").system("id")
        
      • 常用于绕过过滤,动态传递攻击载荷。
  2. handler.decode_argument(value)

    • 作用:解码URL或参数中的编码值(如Unicode转义)。
    • 利用场景
      • 绕过字符过滤,例如用\u006f代替字母o
        {{handler.decode_argument("\u006f\u0073").popen("ls").read()}}
        
三、Cookie与安全机制操作
  1. handler.get_secure_cookie(name)

    • 作用:读取加密的Cookie值,依赖cookie_secret签名验证。
    • 利用场景
      • cookie_secret泄露(通过handler.settings),可伪造管理员Cookie:
        {{handler.settings['cookie_secret']}}  # 获取密钥后伪造签名
        
  2. handler.set_secure_cookie(name, value)

    • 作用:设置加密Cookie,需配合cookie_secret使用。
    • 风险点:若攻击者能控制cookie_secret,可篡改任意Cookie。
四、模板渲染与执行控制
  1. handler.render(template_name, **kwargs)

    • 作用:渲染模板文件并输出结果。
    • 漏洞场景
      • 用户输入直接嵌入模板(如render_string(user_input)),导致任意代码执行。
      • 示例漏洞代码:
        self.render("template.html", content=user_input)  # user_input含{{恶意代码}}
        
  2. handler.write(content)

    • 作用:向响应体写入内容,支持字符串或字典(自动转JSON)。
    • 风险点:若未转义用户输入,可能触发XSS或模板注入。
五、特殊属性与沙箱逃逸
  1. handler.request

    • 作用:包含请求元数据(如methodheadersremote_ip)。
    • 利用场景
      • 结合request.method动态获取参数名:
        {{eval(handler.get_argument(handler.request.method))}}  # 通过GET/POST传递载荷
        
  2. handler.application

    • 作用:关联的Application实例,可访问全局路由和配置。
    • 高级利用:篡改路由规则或配置参数,例如修改文件路径指向恶意资源。
六、防御与安全建议
  1. 输入过滤与转义:避免直接渲染用户输入,使用tornado.escape.xhtml_escape转义。
  2. 禁用调试模式:生产环境中设置debug=False,防止敏感信息泄露。
  3. 限制模板作用域:通过autoescape配置强制转义模板变量,或使用沙箱环境。
  4. 密钥管理:保护cookie_secret,避免通过handler.settings泄露。

相关文章:

  • 英语词性--连词
  • Model Context Protocol - Prompts
  • 智慧楼宇:科技编织的未来生活图景
  • dart学习记录3(函数)
  • 三.ffmpeg对yuv的操作
  • SSH连接中断原因分析(SSH断开、SSH中断、SSH连接断开、远程断开、远程中断)(带宽不足、网络抖动与丢包、CPU资源耗尽、内存不足、磁盘I/O瓶颈)
  • 解锁物联网高效开发,Synaptics SYN43756E Wi-Fi 6E 芯片登场
  • 打造无缝智慧照明场景,涂鸦智能全新发布蓝牙Mesh照明解决方案
  • AI Agent系列(六) -基于ReAct架构搭建LLM Agent(Deepseek)
  • C语言中的函数
  • 动平衡仿真程序设计
  • SpringSecurity——如何获取当前登录用户的信息
  • jekins启动失败排查
  • matrix-breakout-2-morpheus通关攻略
  • 蓝桥杯 - 中等 - 新手引导
  • Oracle数据库与MySQL数据库的全面对比分析
  • SpringBoot对接DeepSeek
  • 模板方法设计模式在事件处理中的应用
  • JavaScript 金额运算精度丢失问题及解决方案
  • 【LLMs篇】05:RMSNorm
  • 黑灰产工作室为境外诈骗集团养号引流,冒充美女与男性裸聊后敲诈勒索
  • 墨西哥宣布就“墨西哥湾”更名一事起诉谷歌
  • 2025年上海市模范集体、劳动模范和先进工作者名单揭晓
  • 稳住外贸基本盘,这个中部大省出手了
  • 47本笔记、2341场讲座,一位普通上海老人的阅读史
  • 新华时评:直播间里“家人”成“韭菜”,得好好管!