7

假设我有一个带有名为/getdata接口的 asp.net mvc 3 应用程序,不同的用户通过我的 PC 客户端软件连接到服务器并使用此接口获取私有数据。不同的用户由他们自己加密良好的令牌来识别。在此处输入图像描述

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

所以我想知道这会不会发生:

(1) ClientB 通过 Web 代理向http://mysite.com/getdata发起一个 http 请求,其令牌位于 http 标头中。

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

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

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

(5) 几乎在ClientB 得到他的数据的同一时间,ClientA 开始了同样的请求,请求头中带有ClientA 的token。

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

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

  1. 图像中的scanario会发生吗?

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

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

4

1 回答 1

0

图像中的scanario会发生吗?

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

如果是,如何防止 Web 代理返回缓存数据?我无法修改PC客户端的程序,Web代理服务器不在我的控制范围内。

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

于 2013-01-18T08:49:42.653 回答