用Google手机令牌打造PHP登录安全

#1 jake

近日密码安全成为了热门话题,作为站长的开发者们,都需要去考虑如何令自己开发的网站更加安全。
手机令牌二次登录技术,是在常规的用户登录方式外,再加入手机令牌软件,来达到二次登录保证安全。

也就是:用户密码 + 用户手机 才能登录网站或使用服务,缺一不可。

手机令牌技术在腾讯QQ等多个大网站都有实现,腾讯的手机令牌介绍:http://aq.qq.com/v2/safe_school/token_1.shtml

那么当我们没有大网站的条件可以开发一个手机程序作为令牌的情况下,如何实现手机令牌呢?

我们可以通过开放算法的Google Authenticator软件来实现,Google Authenticator(简称GA)是Google提供的免费、开放算法、无需联网的手机令牌软件。

本贴提供了GA的PHP实现扩展类:Google2FA.zip

以下是手机令牌的使用过程

一、用户设置手机令牌:

1. 当用户登录你的网站后,可以选择或强制要求要设置手机令牌(腾讯QQ手机令牌是可选的)。

2. 用户需要下载Google Authenticator软件到手机上(很遗憾,目前GA只支持Android和IPhone、Ipad),
Android版Google Authenticator 市场下载地址:https://market.android.com/details?id=com.google.android.apps.authenticator
iOS版Google Authenticator AppStore下载地址:http://itunes.apple.com/cn/app/google-authenticator/id388497605?mt=8

3. 网站会生成一串密钥或者密钥的二维码。(稍候会介绍如何用我们的Google2FA生成密钥和二维码)
4. 用户打开手机的Google Authenticator软件,输入密钥或者扫描二维码
5. 手机会提示成功并开始生成二次登录码(截图是英文,但是真实软件是中文的)


google-authenticator-android3.gif

6. 用户这时候需要用二次登录码再次验证,通过验证后,密钥写入用户数据库记录内。

二、用户登录

1. 当用户下次登录时,在验证了用户名和密码后,网站检测用户已经设置了二次登录,则强制需要用户使用GA进行二次登录验证。
2. 用户拿出手机并打开Google Authenticator软件,将Google Authenticator软件生成的二次登录码填到网站验证输入框内。
3. 网站检测用户输入的二次登录码,会将其和数据库内的密钥共同验证。
4. 验证通过用户即可登录成功。

以下是本贴的代码Google2FA类的使用

1. 放到扩展目录下
2. 生成密钥的方法:spClass('Google2FA')->make_key();
3. 验证密钥的方法:spClass('Google2FA')->check_key(密钥, 用户输入的二次登录码)
4. 用二维码的提供密钥方法:

二维码扩展类:http://www.speedphp.com/bbs/thread-2170-1-1.html
生成二维码密钥供GA扫描:spClass('QRcode')->img('otpauth://totp/'.用户名.'?secret='.密钥);
当GA扫描了上面的二维码后,会自动在GA内生成二次登录码。

2011-12-25 11:10:01

#2 ynyjyz

领教了!

2011-12-25 11:22:55

#3 拓文

很好,很实用。

2011-12-25 14:13:30

#4 fosf

:sleepy:
觉得好麻烦

2011-12-25 16:45:56

#5 汽车人变形

做个记号。Mark

2011-12-25 19:26:18

#6 lhabc

厉害!以后项目中又有多一个吹牛的东西了

2012-01-04 09:39:44

#7 smseo

记录一下

2013-03-16 14:47:52