【发布时间】:2013-07-31 20:32:50
【问题描述】:
我有一些遵循基本模式的 ajax 请求:
function(visitorId, sessionId, ...parameters more specific to method call..)
访问者和会话 id 是服务器端随机生成的。访问者和会话 ID 始终用于在我们的软件中通过实时会话验证真正的访问者。一种带有签名的方法:
function(visitorId, sessionId, issueId)
返回当前客户问题的状态(打开、关闭、等待等),表示为 int。今天我被我们的一位客户的安全报告指出,这种特殊方法容易受到跨站点请求伪造的影响,因为
测试结果似乎表明存在漏洞,因为相同的请求以不同的方式发送了两次 会话,并收到相同的响应。这表明没有一个参数是动态的 (会话标识符仅在 cookie 中发送),因此该应用程序容易受到 CSRF 的攻击。
需要注意的几点:
如果重要的话,这些方法仅适用于 POST 请求。
我们软件中的“会话”与浏览器或 IIS 的会话无关。我们的软件是一个 Windows 服务,因此 IIS 可能会关闭,浏览器可能会关闭,并且我们会保留该会话,直到我们的内部会话跟踪器确定是时候摆脱它。
3.Ajax 请求被发送到 WCF 服务,然后将请求中继到我们的 Windows 服务。
这让我摸不着头脑,因为我们的大多数方法都遵循这种静态参数模式,但它们也倾向于返回唯一数据。这让我想知道我是否只是返回状态以及一些我可能通过此安全测试的随机数据,但这似乎不正确。解决这个问题的最佳方法是什么?
【问题讨论】: