1

我想做一些类似于 Google/Facebook 在这篇文章中所做的事情: 为什么 Google 会在 while(1) 之前添加;到他们的 JSON 响应?

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

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

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

4

1 回答 1

2

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

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

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"]来进行 url 匹配。

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

于 2013-07-23T08:46:00.340 回答