【问题标题】:Rack middleware to to prepend while(1); to all ajax/json requests机架中间件要在 while(1) 之前添加;对所有 ajax/json 请求
【发布时间】:2013-07-23 07:19:23
【问题描述】:

我想做一些类似于 Google/Facebook 在这篇文章中所做的事情: Why does Google prepend while(1); to their JSON responses?

在 rails 应用程序中使用 Rack 中间件,将 while(1); 添加到脚本和 json 帖子的开头。这样我们就可以返回执行 ajax GET 请求(可能有也可能没有 authentity_token 或响应中嵌入的敏感数据)。

我们还有一个不需要使用它的 API,所以我在想一些 url 匹配中间件不启动的地方。

谁能指出正确的方向,这段代码可能是什么样的?谢谢!

【问题讨论】:

    标签: javascript ruby rack middleware


    【解决方案1】:

    我认为,有很多问题合二为一。

    中间件本身看起来是这样的(没有检查过,但感觉不错):

    class AntiHijackingMiddleware
     def call(env)
        status, headers, body = @app.call(env) # save initial state
    
        if env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest" && headers['Content-type'].to_s.include?("application/json")
            body = "while(1);"+body
            headers['Content-Length'] = Rack::Utils.bytesize(body.to_s).to_s
        end
    
        [status, headers, body]
     end
    end
    

    您可以在env["REQUEST_URI"] 上添加附加条件来进行网址匹配。

    将其添加到 Rails 的中间件堆栈是样板文件。

    【讨论】:

    • 有道理,谢谢!这将在它前面。客户也必须剥离它,对吗?我也看到了这个例子blag.7tonlnu.pl/blog/2012/09/27/json-hijacking-in-rails,但我不清楚jquery如何为任何ajax请求(除了json)剥离while(1)。但也许我错过了什么?再次感谢!
    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 2023-04-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多