我想做一些类似Google / Facebook在这篇文章中所做的事情: Why does Google prepend while(1); to their JSON responses?
使用rails应用中的Rack中间件,将while(1);
添加到脚本和json帖子的开头。通过这种方式,我们可以返回执行ajax GET请求(可能会或可能不会在响应中嵌入authenticityity_token或敏感数据)。
我们还有一个不需要使用它的API,所以我想一些匹配中间件没有启动的URL。
有人能指出我正确的方向这个代码可能是什么样子?谢谢!
答案 0 :(得分: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"]
上添加其他条件以进行网址匹配。
将它添加到Rails的中间件堆栈是样板。