网站在服务器端识别没有 cookie 和 IP 的用户



我目前正在通过 ASP.NET MVC 5框架开发在线商店网站,但以下内容让我很烦恼

要求和方法

其中一个要求是服务器应假定在客户端禁用 cookie 功能,因此我们决定为每个用户生成一个 GUID(如果不存在有效的 GUID(,将 GUID 追加到每个超链接,并使用检索到的 GUID 作为 UID,而不是使用 cookie/会话来标识用户。

情况

此时系统运行良好,直到我们向其添加验证。我们希望避免客户端 A 从客户端 B 窃取 GUID(这很容易,因为 GUID 在 URL 中可见,而 SSL 对此无能为力(,然后客户端 A 使用客户端 B GUID 将商品添加到购物车中,并等待客户端 B 付款(如果客户端 B 查看购物车或送货地址,请忽略(。

问题

为了避免上述黑客攻击,我们所做的是从HTTP请求标头中添加一些信息,例如用户IP,用户代理,接受语言等...我们会验证每个请求上的信息,如果更改任何信息,则 GUID 视为无效。

问题是我们发现我们地区的一些 ISP 将通过不同的 IP 发送每个请求,因此用户将在每个页面/请求上获得不同的 GUID。

如果没有IP作为标识符的一部分,它似乎并不那么安全,我们正在寻找其他一些解决方法来保护我们的客户,我已经做了一些研究,以下是一些可能的解决方案:

  • 使用 ETAG,但是我不太了解,但它似乎不太适合我们的项目(在 MVC 操作中,我们只能知道这是否是请求页面的客户端的第一次访问,如果有效的客户端访问新页面(例如 ConfirmOrder(将被视为无效(
  • 通过在请求标头中包含身份信息来使用基本授权,但是为了增加用户体验,我们希望不要求用户输入用户名/pwd,但似乎我们无法从服务器端分配默认身份。

欢迎任何解决方案/建议/线索,感谢您的时间

您是否可以使用 cookie 并且仅在 cookie 失败时回退到 GUID + 硬验证?

或者,您可以将每个请求作为 AJAX 请求执行,只需将整个页面替换为答案,并通过history.pushState()更新 URL(减去 GUID(。这也称为PJAX。但是当不允许cookie时,JavaScript也可能被阻止。

我还看到应用程序将每个请求都作为 POST 执行,从而隐藏了每个参数。但这也使用户更难重新加载或通过后退按钮导航。

最新更新