我有一些遵循基本模式的 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 服务。
这让我摸不着头脑,因为我们的大多数方法都遵循这种静态参数模式,但它们也倾向于返回唯一数据。这让我想知道我是否只是返回状态以及一些我可能通过此安全测试的随机数据,但这似乎不正确。解决这个问题的最佳方法是什么?