Php 安全跨域身份验证表单

Php 安全跨域身份验证表单,php,security,cross-domain,forms-authentication,Php,Security,Cross Domain,Forms Authentication,我有一个服务器'a'。您有一个服务器“B”。服务器“A”希望向服务器“B”提供登录表单(用户名和密码) 我如何实现服务器“B”无法查看/截获用户填写的内容的场景?凭据必须以安全的方式到达服务器“a”,而不会被拦截 可能吗 这里有一个更好的例子: 服务器A向服务器B提供服务,服务器B向拥有服务器A密码的用户提供服务。在某些情况下,用户必须在服务器A中进行身份验证,但登录表单将显示在服务器的B页面中。我明白了吗?服务器B无法读取这些凭据 业务逻辑是服务器A有许多客户端,服务器A将允许第三方为服务器的

我有一个服务器'a'。您有一个服务器“B”。服务器“A”希望向服务器“B”提供登录表单(用户名和密码)

我如何实现服务器“B”无法查看/截获用户填写的内容的场景?凭据必须以安全的方式到达服务器“a”,而不会被拦截

可能吗

这里有一个更好的例子:

服务器A向服务器B提供服务,服务器B向拥有服务器A密码的用户提供服务。在某些情况下,用户必须在服务器A中进行身份验证,但登录表单将显示在服务器的B页面中。我明白了吗?服务器B无法读取这些凭据

业务逻辑是服务器A有许多客户端,服务器A将允许第三方为服务器的A客户端开发应用程序。拥有主密码的是服务器A,而服务器B无法访问/读取/拦截这些凭据。在服务器B上验证客户端的方式是通过嵌入服务器B中的登录表单(我无法将用户重定向到服务器a。用户必须停留在服务器的B页面上)

问题是:

在服务器B中嵌入表单的更好方法是什么


服务器B是否可以运行JavaScript,以便在提交之前读取用户的凭据?

从您的问题中可以看出,您似乎试图通过服务器B传递敏感数据,但B不是最终目的地。即使B是目的地(或来源),答案仍然相同

实现这一点的方法是使用HTTPS/TLS/SSL。这将使用A的公共证书对数据进行加密,这样数据只能由A的私钥解密,而A只有一个私钥

这还提供了向客户端验证用户身份的附加好处。提供了一个用A的私钥签名的证书。只有A的公钥才能正确解密,从而证明只有A才能生成该证书(或者有人偷了它,但我们假设情况并非如此)

编辑:

要做到这一点,让B为页面提供服务,但不能读取其数据,让B为web页面提供服务,在客户端使用Javascript加密数据,并使用A的公钥(B可以将其包含在页面中)。即使B拥有A的公钥,它也无法解密由JS加密的数据。它只能将其传递给A

编辑:

只要所有的加密都是在客户端使用A的公钥完成的,那么除了A之外的任何一方都无法读取数据,因为只有A的私钥才能解密数据。使用此方法,您可以拥有任意多的中介机构,而无需承担风险*

*当然,这是假设一个具有足够熵和长度的RSA密钥对被认为是安全的。最小1024位,最好是2048位

另一次(也是最后一次)编辑:2013年5月9日

很抱歉这么多的编辑,但是你的问题让我很困惑。我想我现在明白你的要求了

在我之前的文章中,我做了一个重要的假设,即服务器B是可信的,不会恶意尝试获取用户的凭据。我这样做是因为,正如哈弗在评论中提到的那样,如果B的可信度有限,允许B收集用户的凭据是非常不明智和不安全的。此外,我做这个假设是因为使用第三方托管您的web应用程序是一项常见的任务,例如Heroku、Amazon等,它们不会恶意(如果他们这样做了,他们将损失大量业务,而且他们几乎没有什么可以获得的。此外,如果你发现安全违规行为,你需要有人负责。因此他们可以信任,否则你一开始就不会使用他们)。我现在假设您没有使用像他们这样的第三方来源,因为情况显然是这样

如果B可能是恶意的,那么无论您如何处理客户端代码,B都可以更改它并截获凭据。只要B可以被信任不修改您的客户端代码,那么我以前的建议就行了。但是,考虑到B的可信度有限的新信息,这样做是不明智的实施我先前的建议

通过不信任的第三方认证用户的服务是一项非常危险的尝试,正如贝宝花费了一个API所花费的钱所表明的那样。但是,如果你必须这么做,那么你需要非常小心,并考虑实现。 如果你必须通过第三方,那么一个类似于上面评论中提到的@halfer的解决方案就是最好的选择,IMO

[P] 呃,你应该点击B中的某个东西,它会重定向到A,得到 从您的站点获得用户权限,并使用 身份验证令牌。这有你不鼓励的好处 用户不应在网站中输入其主密码 绝对信任

使用HTTPS/TLS/SSL将用户重定向到您的站点。这可以保护用户的凭据,还可以向用户验证您的身份,这样他们就不太可能受到欺骗攻击。然后,您可以向第三方提供足够随机的令牌以用作身份验证

但是,请理解,即使使用此解决方案,仍然存在重大风险。如果B想要攻击您的用户,B仍然可以通过直接要求他们提供登录凭据来轻松欺骗部分用户。这可能会对大多数不懂安全的用户起作用