2011-02-01 62 views
3

我有一个网站为更大的应用程序的用户提供帮助信息。直到最近,我的帮助网站和主要应用程序都在企业防火墙后面。现在主应用程序已经移到防火墙之外,我也必须移动我的帮助站点。单向站点到站点身份验证(PHP/Apache)

我唯一的安全要求是只有当用户点击主应用程序中的“帮助”链接时,才能进入我的帮助网站。 (很明显,公司不希望他们再次输入他们的凭证。)我不需要在站点之间来回交换信息。

我看过$ _SERVER ['HTTP_REFERER'](不安全),Oauth和OpenID(这看起来像是矫枉过正)。我想知道如果答案在于单向SSL认证(主要应用程序有一个证书),但我在这里有点失落。

所以问题是:做到这一点最简单的方法是什么,在Apache和PHP方面看起来如何?

非常感谢您的任何建议!

回答

1

帮助链接可能包含一个标记字符串。当用户点击链接时,帮助系统会查看该令牌并向您的应用程序发出Web服务调用,询问该令牌是否有效。如果令牌有效,则Web服务以肯定响应方式响应并且帮助站点让用户进入。您可以让令牌仅在该用户登录时有效。此外,您可以将客户端的IP地址编码为该URL并验证尝试进入帮助系统的人是否来自相同的IP地址。所以像这样:

  1. 你有一个链接,以帮助令牌:HTTP://help.yoursite.com/?token= <唯一id> &客户端= MD5(<客户端IP>)
  2. 用户点击该链接,将他们带到help.yoursite.com。
  3. help.yoursite.com检查md5(<客户端IP>)是否与url的客户端参数匹配。如果是这样,它的可能是同一个人,而不是恶搞。
  4. help.yoursite.com然后向yoursite.com发出Web服务调用,询问该客户端IP的唯一标识是否有效。
  5. yoursite.com检查它是否有效并返回是或否,并且可能登录人员的用户名,以便help.yoursite.com将具有登录人员的用户名。
  6. help.yoursite.com接受响应并让用户进入或不进入。

这样你确保客户端是一样的,并且他们已经登录到其他网站。你和你的help.yoursite之间的沟通必须是安全的。它比oauth简单得多,甚至有点类似于协议,但它并不像整体那样安全。还有其他方法,但这取决于你愿意接受多少风险。

+0

这太好了。将尝试一下。非常感谢你! – 2011-02-02 10:10:39

0

取决于两个网站的独立程度。如果他们共享私人数据(数据库或某个文件空间)的访问权限,那么您可以考虑在它们之间传递一个随机值。否则,如果您可以使用time + salt方法,它只允许那些具有相同salt /算法的用户生成有效的URL。

中号 =主要网站
^h =帮助网站
ķ =它们之间传递密钥值(以纯文本格式是罚款)

答:服务器时间+盐:

XMITM哈希时间(四舍五入为 - 最接近t en分钟标记)+一些随机值(盐)使K。并将K附加到帮助URL(更好的是帮助请求是POST,所以K对用户不可见)。

RCV^h完成使用相同的算法相同的散列,如果它的散列相匹配的供应ķ则访问。否则H显示一个空白页面(或许为了安全起见,他们希望网站的详细信息保密)或错误消息(更多风险,但对合法用户有帮助)。

REQ:同一台服务器上的两个站点或时间上合理同步的服务器上的两个站点 - 由于10分钟量化,无需完美同步。重要的是,两台服务器的盐值是相同的,并且不能公开访问(如果第三方曾经发现它的风险,它也可以更新)。

安全:盐是从来没有过的两个服务器之间的纯文本,而是因为只有通过了关键的工作了一段时间,甚至有人嗅探值(或复制出来源的M个)的能只能暂时访问。您需要四舍五入到最接近的n分钟标记,以便(a)给页面访问者提供合理的时间请求帮助(b),因为请求和检查相距少量时间;(c)因为如果网站在不同的服务器上的时间不一样。安全来自于保持盐和时间计算算法的私密性。

:在^h您可能需要测试的ķ两个值允许风口浪尖情况下四舍五入导致中号^h到不同的时间(因为不同的时间或因延迟在处理)

B:数据库/文件密钥:

XMITMK生成一个随机值,并将它和一个到期时间存储在数据库表或文件中,其中H可以访问。再次中号附着ķ(未超时)到GETPOST请求ħ

RCV^h检查对存储的值的列表中的值,如果发现没有超时则访问。

REQ:这两个站点都可以访问共享文件存储或数据库。数据库表或文件将需要存储多个随机值。无论是中号^h应该清理过期的项目(无论是作为他们的操作代码的一部分,或计划任务[cron作业]可以设置定期完成此)

安全:虽然K以纯文本形式存在,没有必要了解它 - 再次,嗅探该值或从某处将其从源复制出来只会临时授予对H的访问权限。

总体

根据您是用户的击球超时,或使用“发现”键就可以使用AJAX来产生价值的帮助按钮被点击时,保持超时非常未经授权的来源如何宽容低(17秒?)

相关问题