代理服务器缓存对私有数据有危险吗?

时间:2013-01-15 02:36:22

标签: c# asp.net-mvc security cache-control webproxy

假设我有一个名为 / getdata 的接口的asp.net mvc 3应用程序,不同的用户通过我的PC客户端软件连接到服务器并使用此接口获取私有数据。不同的用户由他们自己的加密密钥标识。enter image description here

现在问题是ClientA告诉我们他得到了另一个用户的数据。从ClientA的日志中我们发现他得到了ClientB(但他们彼此不认识,他们不能共享帐户)。我查看了我的Web应用程序的代码,但没有找到任何机会混合他们的数据。

所以我想知道会发生这种情况:

(1)ClientB通过Web代理在http标头中启动对 http://mysite.com/getdata 的http请求。

(2)Web代理访问我的Web服务器,获取ClientB的数据。

(3)我的网络服务器批准请求并返回ClientB的数据,因为一切都是正确的。

(4)ClientB获取他的数据并正确显示

(5)在ClientB获取数据后几乎同一时间,ClientA启动相同的请求,标题中包含ClientA的令牌。

(6)Web代理找到ClientA请求的URL与ClientB相同,结果仍在缓存中,然后返回ClientB的数据。然后ClientA获取另一个数据。

在我的网络应用程序界面中,我刚开始设置所有响应no-cache,max-age = 0等等,以防止客户端缓存。我的问题是:

  1. 图像中的scanario可以发生吗?

  2. 如果是,我如何阻止Web代理返回缓存数据?我无法修改PC客户端的程序,并且Web代理服务器不受我的控制。

  3. 如果不是,A获取B数据的可能原因是什么?

1 个答案:

答案 0 :(得分:0)

  

图像中的scanario可以发生吗?

是的,如果客户端使用GET动词访问/getdata端点,则可以这样做。

  

如果是,我如何阻止Web代理返回缓存数据?我无法修改PC客户端的程序,并且Web代理服务器不受我的控制。

使用[NoCache]属性修饰为GetData端点提供服务的控制器操作,以确保没有数据缓存到下游。