如何判断用户来自哪里?

时间:2009-10-26 21:03:19

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

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

因此两个页面都应该就共同的私钥达成一致。

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

答案 1 :(得分:1)

如果没有浏览器传递引用者或使用您描述的查询字符串,则无法知道。

答案 2 :(得分:0)

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

或者,您可以在从ASP.NET应用程序站点提取的引用网站上放置1x1像素图像。应该将引荐来源传递给脚本,然后您可以在用户计算机上设置一个cookie,然后您可以在它们点击应用主页时引用它。