没有用户名/密码的认证?

时间:2011-02-26 18:57:19

标签: php authentication

我们正在构建一个PHP多租户应用程序。每个公司的帐户都将在他们自己的子域abcorp.example.com上运行。该应用程序允许公司编写和发布内容(常见问题等)供其客户阅读。

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

然而,这些公司可能不希望任何人阅读内容,只需访问abcorp.example.com/

所以,我的问题是有没有办法提供一些基本的身份验证,而无需进入用户名和密码身份验证。我正在考虑添加到超链接中的某种隐藏令牌或类似的东西

我的目标:

  1. 如果用户直接在浏览器中输入abcorp.example.com/,他们将无法看到该网页,因为他们未对该网页进行身份验证或传递。

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

  3. 另一种选择是引用URL身份验证

5 个答案:

答案 0 :(得分:1)

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

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

abccorp.example.com/?t=4rrfwr23rwads3

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

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

同样,这不会很安全。暴露的令牌可以访问整个世界的网站。

答案 1 :(得分:1)

您的“隐藏令牌”理念必然是sessions工作的方式。会话可用于标识用户(即,跟踪用户浏览网站时所执行的操作),并且propagated可以通过在链接中传递会话ID或将其存储在cookie中来sessions and security

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

请阅读{{3}}上的PHP手册部分。

答案 2 :(得分:0)

您还可以使用客户端IP地址作为令牌,为不同的IP地址提供对系统的不同(部分/实例)的访问。但是获得,这不是很安全,因为(1)你无法知道谁是客户端PC背后的人和(2)IP地址可能被欺骗。也许你可以开发其他规格;仅在办公时间内访问IP地址,或检查客户端浏览器(用户代理)并根据客户端正式使用的用户代理进行检查。

答案 3 :(得分:0)

答案 4 :(得分:-2)

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

链接可能类似​​于

abc.example.com/?d=b5939ca22f5dcf345b4000641995478c5910dbd1607b1bdadcbf4a8618a95211

摘要是:

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

或包括引用者:

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

克服的障碍是确保每家公司都能够根据公司特定的密钥/算法支持正确生成这些链接 - 并且每家公司都有所不同,因此一家公司无法为另一家公司生成链接。 / p>

这比没有身份验证或完全没有验证的公共共享令牌更好,但我确定它仍然存在漏洞。