是否可以在其他网站上进行身份验证?

时间:2010-03-17 18:37:41

标签: asp.net security cookies httpwebrequest forms-authentication

如果我在#1网站上,并且在网站#1和网站#1上的网站#2输入我的用户名/密码,则在网站#2上输入httpwebrequest并发布到登录页面。如果我然后导航到网站#2,我应该登录吗?

网站#2使用formauthentication,我调用网站#2上的httpHandler,并通过查询字符串传递用户名/密码。

这应该有用吗?

6 个答案:

答案 0 :(得分:1)

您要做的是Single Signon。您正在这样做的方式,将值从一个站点发布到另一个站点,可能不会起作用,因为您使用的是黑客可能用来欺骗用户共享其登录信息的相同技术。它被称为cross-site request forgery攻击。 IIS配置为不允许这样做。

通常,您需要一个两个站点用来共享登录信息的中央身份验证系统。这可以通过多种方式完成,包括基于共享数据库的登录系统。谷歌“asp.net单点登录”获得更多创意。

答案 1 :(得分:1)

网站#1和#2是否希望用户进行单点登录? 如果是这样,请阅读单点登录。这是一个比这里可以解决的更大的项目。 Wrox上有一本好书: http://www.amazon.com/Professional-ASP-NET-Security-Membership-Management/dp/0764596985/ref=cm_lmf_tit_10

或者我们在想象一些险恶的东西?
如果我们想象一些险恶的东西,那么邪恶网站#1将收集凭据,然后在服务器端自动化浏览器以开始检查网站#2是否使用相同的密码和用户组合。然后,服务器将具有经过身份验证的会话。这不会给访问站点#1的用户提供auth cookie,服务器上的HttpWebRequest对象将获得auth cookie。网站#2无法真正做任何事情来防止这种情况,因为来自一台计算机的浏览器请求看起来与另一台计算机的浏览器请求非常相似精心设计的攻击会欺骗浏览器请求的所有元素,使其看起来像是来自浏览器而不是初始的HttpWebRequest对象,甚至可能无法设置用户代理。

网站#2应该停止使用密码和用户ID,或者如果他们担心这一点,则使用2因子ID,或者执行需要javascript登录的操作,因为欺骗正在执行javascript的浏览器比欺骗刚刚发送的浏览器更难并接收http请求和响应。

答案 2 :(得分:1)

尝试在站点之间自动进行身份验证时存在太多安全问题。需要有两个站点都属于的中央安全提供商,以便安全地完成切换。

我们使用CA的Siteminder进行跨站点身份验证。实际上,Web 1在siteminder服务器上创建唯一的会话ID,并将任何凭据和信息传递给它。 Siteminder调用web2并通过会话变量传递信息。 Web 2从会话中检索数据并使用它。还有更多的事情要发生,但这就是它的正义。

要做这样的事情,我会强烈考虑使用开箱即用的解决方案,因为通常编码自定义安全性通常不足

答案 3 :(得分:0)

这可能有效,具体取决于网站#2上的安全措施。对于安全的网站,这将失败。

我建议完全基于良好的安全性和良好的编码/设计实践来反对这一点。

如果您不清楚哪种安全措施可以阻止这种情况,您应该自学,这样您就可以在自己的网站上防止出现同样的问题。见http://www.owasp.org/index.php/Top_10_2007

答案 4 :(得分:0)

虽然这可以在某些情况下完成,但是以带有POST参数的HTTP请求的形式,一旦您浏览到站点#2,就不会对您进行身份验证。

这是因为,一般来说,这些网站会在您的终端存储一个cookie,这些都是基于域的,这意味着即使您抓住并自己从网站#1存储它,Cookie名称也不会与网站#2匹配

此外,站点#2可能不容易进行身份验证,这通常是开发人员意识到的安全问题。这也可以被认为是XSS的尝试。

如果您只是为自己做这件事,我建议LastPass并将大部分信息保存在其中。

请重新考虑您的目标以及如何实现目标,这不是方法。

编辑:链接文字。

答案 5 :(得分:0)

由于您的两个站点都在使用FormsAuthentication,因此您可以轻松配置它们以共享FormsAuthentication加密方案。

这将允许您自动执行Cross Application Authentication:)