1

我正在构建一个需要使用 php 服务进行身份验证的 android 应用程序。我目前的方法是当用户最初登录时,使用 uniqid() 生成一个唯一的 id。然后这个 uid 连同他们的用户名一起存储在数据库的一个表中。然后用户被传回这个 uid。

随后对服务器的所有进一步请求将发送 uid 及其用户名,然后将在数据库中检查以验证用户。

这种方法可以吗?还是我错过了他们的巨大安全漏洞?

4

1 回答 1

1

这里有几个问题。因为一个uniqid()几乎完全由时间戳组成,并且非常可预测。而不是只是重新发明轮子,您应该只使用 PHP 的session_start(). 如果由于某种原因您不能使用 PHP 的会话,则使用session_id().

其他问题,如果您的应用程序遭受 sql 注入攻击,那么攻击者可以将会话 ID 从数据库中提取出来并登录。密码散列的原因是为了在数据库被破坏后减缓攻击者的速度,如果攻击者拥有会话 ID,那么他不必破解密码散列即可登录。(您正在对密码进行哈希处理...)一种选择是aes_encrypt()在存储的会话 ID 上使用 MySQL。

于 2012-07-31T15:55:58.750 回答