• 单人实在不能兼顾项目的速度和质量,只能发帖求助。@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
  • 本地验证了一下没有问题,好像rails已经帮我们处理。

    xml_str = <<-END
    <?xml version="1.0"?>
    <!DOCTYPE test [
    <!ENTITY writer "Bill Gates">
    <!ENTITY copyright "Copyright W3School.com.cn">
    <!ENTITY xxe SYSTEM "/Users/somebody/test.txt">
    ]>
    
    <test>&writer;&copyright;&xxe;</test>
    END
    
    Hash.from_xml(xml_str)  # => {"test"=>"Bill GatesCopyright W3School.com.cn&xxe;"}
    

    坐等其他发现😀

  • 明白了 多谢。

    应该理解的问题,感觉官网上说的应该就是您说的那样@w7938940

    上传过程

    1. 生成随机对称秘钥进行文件加密
    2. 使用rsa对随机对称秘钥进行加密
    3. 上传加密过的随机对称秘钥和文件

    下载过程

    1. 获取文件的加密的随机对称秘钥
    2. 使用rsa进行解密对称秘钥,并使用它解密

    以实际结果来看

    应该是使用了rsa非对称加解密,解密速度确实很慢

    不知道有没有其他人使用过aws s3的非对称解密,不想再看源代码。

  • 你好,我是 PORO at 2017年11月11日

    👍 👍 👍 👍

  • 如何设置一个定时任务? at 2017年10月30日

    直接设置一下redis中内容的有效期为15分钟,是不是更好一点?超过15分钟后,重新加载一下