2017-08-30 50 views
-1

我有一个网站,如果用户使用其Active Directory密码成功进行身份验证,就会将用户登录。许多浏览器都可以保存密码。 我想要做什么,只要求密码中的某些字符...就像银行系统一样。PHP AD身份验证仅使用密码中的3个随机字符

即。请输入您的密码中的字符2 5和7。

是否有可能在PHP中做到这一点?我谷歌搜索,但我不相信我知道这个词搜索。

任何指向正确方向的指针都会收到。 谢谢。

+0

密码是一个字符串。阅读更多关于PHP的[字符串](http://php.net/language.types.string)。关注指针部分[“按字符访问和修改字符串”](http://php.net/manual/en/language.types.string.php#language.types.string.substr) – axiac

+0

。我已经阅读并已知道这些信息。我想要做的是用来自PHP的LDAP请求进行身份验证,但不确定LDAP/AD甚至会允许这种身份验证。 – Jack

+0

我相当确信这对于LDAP或AD来说是不可能的。为了支持用户使用某些特定字符登录其密码(假设您没有将密码存储为纯文本),您需要存储每个密码的哈希值,并根据这些密码验证请求的字符。 – iainn

回答

2

这可以在PHP中完成,而不是在AD中,但它会最有可能危及您的用户密码

您必须分别保存并安全地散列每个密码字符,以便您可以将给定的字符与保存的单字符散列进行比较。

应该这样做,即使用户密码的长度也不会受到影响(即使它们大多数来自空字符,也可以节省多达n散列)。

尽管你会这么做,但散列单个字符对安全来说是一场灾难,因为即使使用通常安全的散列算法,单个字符的蛮力破解也会眨眼。

鉴于您的用户通过Active Directory(LDAP,我猜?)进行身份验证,我不会说这是一种合理的方法,因为您对密码知识有限,它们的更改(能够重新计算哈希)等。

+0

非常感谢我的问题的详细和有用的答案。也许我会结合这两者并继续通常的AD身份验证,但同时设置了二级密码,我可以使用上述方法。非常感谢。 – Jack