没有用户名/密码的身份验证?

没有用户名/密码的身份验证?

问题描述:

我们正在构建一个PHP多租户应用程序。每个公司的帐户将在其自己的子域abcorp.example.com上运行。该应用程序允许公司编写和发布内容(常见问题解答等)供客户阅读。没有用户名/密码的身份验证?

他们会告诉他们的客户访问:abcorp.example.com/以阅读内容。或者他们会在其安全的Web应用程序中链接到该URL。

然而,这些公司可能不希望任何人通过去阅读的内容,以abcorp.example.com/

所以,我的问题是有没有办法提供一些基本的认证没有进入的用户名和密码认证。我在想某种隐藏记号的加入超链接或类似的

我的目标了一句:

  1. 如果用户直接在浏览器中键入abcorp.example.com/,他们不会能够看到的网页,因为他们不认证或通过令牌英寸

  2. 避免使用的用户名和密码

另一种选择是推荐URL身份验证

+0

您是否在现实世界中有一个多租户SAAS应用程序的示例? – allnightgrocery 2011-02-26 20:23:22

您可以使用基本散列法,在系统和每个公司系统(每个公司的不同密钥并且未公开发布)上存储共享秘密密码或“密钥”,然后您将秘密密码与子域在链接中包含摘要作为参数。然后,通过在您身边运行相同的算法并与摘要进行比较来验证它。

链接可能看起来像

abc.example.com/?d=b5939ca22f5dcf345b4000641995478c5910dbd1607b1bdadcbf4a8618a95211

其中摘要是:

$d = hash('sha256', $secret_password.$subdomain); 

或包括引用者:

$d = hash('sha256', ($secret_password.$subdomain.$_SERVER['HTTP_REFERER']));

要克服的障碍是确保每个公司都可以根据公司特定的关键/算法支持这些链接的正确生成 - 并且每个公司都有所不同,因此一家公司不能为其他公司生成链接。

它比没有验证或公共共享令牌更好,但我确信它仍然存在漏洞。

+0

如果一家公司收藏/窃取了另一家公司的URL?那么所有这些都是没有用的。 – stillstanding 2015-03-05 10:17:10

+0

需要注意的一点是,当令牌位于这样的URL中时,它们可能会被记录到Web服务器的日志中。这可能会让你容易泄漏令牌 – 2015-03-11 09:06:41

当然,如果有人将令牌公开,它将打开访问任何发现它的人。

我想每个公司可以使用一个共享的令牌链接到他们的网页,例如:

abccorp.example.com/?t=4rrfwr23rwads3

每个令牌可以存储在一个文件或数据库。

当有人请求一个页面时,它会检查存储在服务器上的$ _GET ['t']的值。如果匹配,则加载页面的其余部分。当然,这个变量将不得不在整个网站中进行,并且包含在每个链接中。

再一次,这不会很安全。一个暴露的令牌可以让整个世界访问该网站。

您的“隐藏令牌”的想法基本上是sessions的工作方式。会话可用于识别用户(即跟踪用户在浏览网站时的行为),并且通过将会话ID传递到链接中或存储在cookie中来实现。

但是,使用没有任何其他类型认证的会话本质上是不安全的!当您公开验证和跟踪用户本身的方式时,用户可以修改或伪造他们的身份验证。例如,用户可以更改为会话ID传递的值或更改存储在cookie中的值。

请阅读关于sessions and security的PHP手册部分。

您也可以使用客户端IP地址作为令牌,让不同的IP地址访问系统的不同(部分/实例)。但是,这种做法并不是很安全,因为(1)你无法知道客户端PC是谁,(2)IP地址可能被欺骗。也许你可以开发额外的规格;只允许IP地址在办公时间内访问,或者检查客户端浏览器(用户代理),并根据客户端正式使用的用户代理进行检查。

+0

感谢大家的帮助! – user635800 2011-02-27 22:41:50

+0

您可以通过upvoting评论来显示您的欣赏。 – Pr0no 2012-02-13 10:00:04