【问题标题】:How to tell where the user is coming from?如何判断用户来自哪里?
【发布时间】:2009-10-26 21:03:18
【问题描述】:

是否有可靠的方法来确定用户在 ASP.NET 应用程序中的来源?我们有一个从两个不同位置链接到的 Web 应用程序。这两个链接位于不同的域中,它们需要在此应用程序中指定某些用户权限。这是我迄今为止尝试过的......

  • 使用Request.UrlReferrer(即Referer HTTP 标头)。这总是返回一个空字符串。我相信这是因为超链接使用 Javascript 来启动弹出窗口。根据我的研究,用户代理在标准超链接上提供了这个 HTTP 标头。 Javascript 弹出窗口是另一回事(显然)。

  • 一个简单的查询字符串来指示引用者。这不是一个真正的选择,因为我们需要一些不太容易绕过的东西(更安全)。

有什么想法吗?我知道,在总体方案中,这可能会有更好的整体设计/结构。请不要发布建议我重新设计所有内容的答案,因为这不是一种选择。

【问题讨论】:

  • 您的网络服务器设置是什么?认证类型?匿名访问等?

标签: asp.net web-applications http-referer


【解决方案1】:

没有可靠的方法来判断用户来自哪里,这不仅是 ASP.NET 的限制,而且是所有 Web 应用程序的一般限制。网址引荐来源网址很容易被欺骗,因此不可靠。我认为最好的选择可能是一些加密的 url 参数,或者如果您愿意,可以使用 cookie。

所以两个页面应该就公共私钥达成一致。

  1. Page1 将使用密钥加密其地址并将其传递给 Page2
  2. Page2 将检查此参数是否存在并尝试使用用于加密的相同私钥对其进行解密
  3. 如果成功,则意味着 Page2 将能够确定谁调用了它,如果没有,则数据已被篡改

【讨论】:

  • 这看起来像是最后一根稻草。是时候开始了!感谢您的帮助。
【解决方案2】:

如果浏览器没有像您描述的那样传递引荐来源网址或使用查询字符串,则无法知道。

【讨论】:

    【解决方案3】:

    另一种选择是在 ASP.NET 应用程序上有两个不同的登录页面。登陆页面可以设置安全选项,然后重定向到一个公共主页。这比查询字符串选项安全一点。

    或者,您可以在从您的 ASP.NET 应用程序站点提取的引用站点上放置一个 1x1 像素的图像。引用者应该被传递给脚本,然后您可以在用户机器上设置一个 cookie,然后您可以在他们访问应用主页时引用该 cookie。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2011-06-10
      • 2022-01-11
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多