2009-10-26 105 views
1

有没有可靠的方法来确定用户来自ASP.NET应用程序的位置?我们有一个连接到两个不同位置的Web应用程序。这两个链接位于不同的域中,他们需要在此应用程序中指定某些用户权限。这是我迄今为止尝试过...如何判断用户来自哪里?

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

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

任何想法?我明白,在事物的宏伟计划中,这可能会有更好的总体设计/结构。请不要发表建议我重新设计一切的答案,因为这不是一种选择。

+0

什么是您的网络服务器设置?认证的类型?匿名访问等? – davek 2009-10-26 21:04:39

回答

5

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

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

  1. 第1页将使用密钥来加密其地址并把它传递到第2页
  2. 第二页会检查该参数的存在,并尝试与用于加密
  3. 如果相同的私钥进行解密这意味着Page2将能够确定是谁调用它,如果不是,数据已被篡改
+0

这看起来像是最后一根稻草。开始的时间!谢谢你的帮助。 – 2009-10-30 15:36:37

1

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

+0

我很害怕那个...... – 2009-10-26 21:16:26

0

另一种选择是在ASP.NET应用程序上有两个不同的登录页面。登陆页面可以设置安全选项,然后重定向到通用主页。这比querystring选项更安全一些。

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