我的网站为用户提供创建帐户并使用Facebook登录。用户表包含:userId(如果用户创建自己的帐户,则generated by $userId = uniqid(rand(), true;
)。密码,盐,电子邮件,加入日期。
第一个问题:
我不确定我在Facebook上做的事情是否安全。现在我正在从Facebook获取用户ID,并使用xmlhttpRequest对象将其发送到服务器。然后服务器将其存储在用户 ID 下,并将其他列留空。
第二个问题:
脸书用户ID与uniquid(rand(), true)
生成的普通帐户的用户ID重叠的可能性是否很大
第三个问题:
使用客户端登录是否安全?我的意思是,即使是我的应用程序ID也会被用户看到。
第四个问题:为了判断该条目是Facebook帐户还是普通帐户,我是否应该在数据库中添加另一列,true=facebook帐户,false=普通帐户。还是我应该检查某个帐户的密码列是否为空?
以 thepointless.com 为例,每个用户都会获得一个自动递增的ID,包括Facebook用户。外部认证服务由username
识别,其中包含"非常规"用户的URL:
+----------+------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+-------------------+----------------+
| user_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(255) | YES | UNI | NULL | |
| password | varchar(255) | YES | | NULL | |
| created | timestamp | NO | | CURRENT_TIMESTAMP | |
| userdata | mediumtext | YES | | NULL | |
| admin | tinyint(1) | YES | | 0 | |
| name | varchar(765) | YES | | NULL | |
+----------+------------------+------+-----+-------------------+----------------+
Facebook用户的用户名是其图形数据的URL,例如http://graph.facebook.com/8643372
。在您的系统中,没有必要指向真实的东西,只要它标识域和外部[唯一] ID。在这种情况下,用户的公共图形对象是一个简短的、可预测的 URL。
普通用户不得在其用户名前面加上 http
或 https
前缀。password
留空。userdata
存储第三方身份验证服务提供的 JSON 或 XML。
服务器端逻辑通常不应信任完全客户端登录。但是,对 JavaScript 发起的登录进行服务器端验证通常并不困难。而且没有理由不信任,至少在初步的基础上,客户端上完全是客户端身份验证。
据我所知,没有必要对你的应用程序ID保密。这是需要隐藏的"应用机密"。