【问题标题】:Testing filepicker.io security using Ruby使用 Ruby 测试 filepicker.io 的安全性
【发布时间】:2012-11-27 06:26:55
【问题描述】:

我正在尝试构建一个可以让我行使 FilePicker.io 安全性的测试。代码运行为:

ruby test.rb [file handle]

结果是我可以附加到 FilePicker URL 的查询字符串。我很确定我的政策得到了正确阅读,但我的签名没有。有人可以告诉我我做错了什么吗?代码如下:

require 'rubygems'
require 'base64'
require 'cgi'
require 'openssl'
require 'json'

handle = ARGV[0]
expiry = Time::now.to_i + 3600
policy = {:handle=>handle, :expiry=>expiry, :call=>["pick","read", "stat"]}.to_json
puts policy
puts "\n"
secret = 'SECRET'
encoded_policy = CGI.escape(Base64.encode64(policy))
signature = OpenSSL::HMAC.hexdigest('sha256', secret, encoded_policy)
puts "?signature=#{signature}&policy=#{encoded_policy}"

【问题讨论】:

    标签: ruby filepicker.io


    【解决方案1】:

    诀窍是使用 Base64.urlsafe_encode64 而不是 CGI.escape:

    require 'rubygems'
    require 'base64'
    require 'cgi'
    require 'openssl'
    require 'json'
    
    handle = ARGV[0]
    expiry = Time::now.to_i + 3600
    policy = {:handle=>handle, :expiry=>expiry}.to_json
    puts policy
    puts "\n"
    secret = 'SECRET'
    encoded_policy = Base64.urlsafe_encode64(policy)
    signature = OpenSSL::HMAC.hexdigest('sha256', secret, encoded_policy)
    puts "?signature=#{signature}&policy=#{encoded_policy}"
    

    使用 Filepicker.io 文档中的到期、句柄和机密的示例值进行测试时,它返回与 python 示例相同的值。

    【讨论】:

    • 对不起,我没有说清楚我当时在 Ruby 1.8 中,所以我无权访问该方法。我确实通过删除 CGI.escape 和 gsubbing 换行来解决了这个问题。我不确定严格来说这是否正确,但它确实有效。
    【解决方案2】:

    我在我的 Ruby 1.8 环境中通过删除 CGI.escape 和 gsubbing 换行解决了这个问题:

     Base64.encode64(policy).gsub("\n","")
    

    elevenarms 的答案对于 Ruby 1.9 用户来说是最好的,但是对于 Ruby 1.8,你必须做一些像上面那样有点笨拙的事情。尽管如此,我还是会接受他的回答,因为这些天我们中的大多数人已经或即将进入 1.9。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2016-01-02
      • 1970-01-01
      • 2015-09-19
      相关资源
      最近更新 更多