• 集合缓存优化实践 at 2019年01月31日

    还有为了复用cache_key,为以后缓存优化做准备,引入了cache_key_with_versioncache_version,代码已修改

  • 集合缓存优化实践 at 2019年01月31日

    这个优化主要解决的就是,当集合数据没有变化的时候,不需要查询数据库。 你可以试一下你的demo,即时集合数据中的数据没有任何变化,但是为了生成集合缓存键,他还会进行查询数据库。

  • 集合缓存优化实践 at 2019年01月28日

    怎么用?展示你的code

  • 集合缓存优化实践 at 2019年01月27日

    应该不会,即使缓存失效,也只会查询一次数据库。 相交优化前,好很多,优化前不论数据是否修改每次都会查询数据库。

  • 单人实在不能兼顾项目的速度和质量,只能发帖求助。@jdsh乍一看没认出来,简单师😀

  • 新项目在用

  • 看来遇到老人啦,现在主要是PHP,但是新项目让我来搞,就用Ruby啦😂 ,时间紧只能那趁手的来。

  • 自带点人气,好不容易来个1楼,怎么删除了😂

  • 觉着楼主记录最新的session_id,行的通的。

    通过旧的session_id找用户,这种后端主动登出,需要后端向前端交互,实时性高的话需要websocket。

    不过如果实时性要求不高的话,你可以通过在过滤器中判断只要与新的session不一致,就sign_out,做这种被动处理。

  • 发现

    通过源码跟踪,最终找到xml实体解析类:REXML::Entity ,没有找到对外部实体的引入处理逻辑。
    不考虑项目中猴子补丁因素的话,Hash.from_xml() 应该是没有xxe漏洞的。

    # location: ruby/lib/rexml/entity.rb
    def value
      if @value
        matches = @value.scan(PEREFERENCE_RE)
        rv = @value.clone
        if @parent
          sum = 0
          matches.each do |entity_reference|
            entity_value = @parent.entity( entity_reference[0] )
            if sum + entity_value.bytesize > Security.entity_expansion_text_limit
              raise "entity expansion has grown too large"
            else
              sum += entity_value.bytesize
            end
            rv.gsub!( /%#{entity_reference.join};/um, entity_value )
          end
        end
        return rv
      end
      nil
    end
    

    跟踪过程

    ruby: 2.3.3
    rails: 4.2.7.1

    • ActiveSupport::XMLConverter
    • ActiveSupport::XMLConverter
    • ActiveSupport::XmlMini
    • ActiveSupport::XmlMini_REXML
    • REXML::Document
    • ...
    • REXML::Entity