Yubikey PHP验证

看到Wooyun社区有大牛代购Yubikey,发现国内没有太多技术资料,于是买了一块玩玩。Yubikey形似U盘,中间为凹进去的,带有一个绿色的小指示灯,在接入电脑USB的情况下轻触圆点1S,会模仿键盘自动输入密匙,密匙采用OTP(on time password,一次一密)是不可能被破解的,输入的密匙调用Yubico的API进行验证。该设备可以配合YubiRADIUS用于VPN授权,wordpress授权,系统登录,远程桌面登录。更多的可以根据API开发,Yubikey又将是一个高拓展度的创新设备。

Yubikey2

在实际使用中,发现该设备在PHP方面应用代码不够成熟,国内没有技术资料,国外托管在Github上的资料已经失效。于是根据Yubikey提供的Wordpress插件改写了一个Yubikey PHP验证模块。

<?php
/**
Written by Paul Allen Blog:http://2amsec.com
This is open source code,reproduced please retain the copyright,thanks!
**/
$yubico_api_id = "填写你的api_id";
$yubico_api_key = "填写你的api_key";
$otp=trim($_POST['otp']);
$keyid=substr($otp,0,12);
yubikey_verify_otp($otp,$yubico_api_id,$yubico_api_key);

function yubikey_verify_hmac($response,$yubico_api_key) {
$lines=explode("\n",$response);
foreach ($lines as $line) {
$lineparts=explode("=",$line,2);
$result[$lineparts[0]]=trim($lineparts[1]);
}
ksort($result);
$signatur=$result['h'];
unset($result['h']);
$datastring='';
foreach ($result as $key=>$value) {
$datastring!='' ? $datastring.="&" : $datastring.='';
$datastring.=$key."=".$value;

 

 

}
$hmac = base64_encode(hash_hmac('sha1',$datastring,base64_decode($yubico_

 

api_key), TRUE));
return $hmac==$signatur;
}

function yubikey_verify_otp($otp,$yubico_api_id,$yubico_api_key){
$url="http://api.yubico.com/wsapi/verify?id=".$yubico_api_id."&otp=".$otp;

$ch = curl_init($url);

 

 

curl_setopt($ch, CURLOPT_USERAGENT, "Wordpress Yubikey OTP login plugin");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = trim(curl_exec($ch));
curl_close($ch);

if (yubikey_verify_hmac($response,$yubico_api_key)) {
if(!preg_match("/status=([a-zA-Z0-9_]+)/", $response, $result)) {

 

 

return false;
}

 

 

if ($result[1]=='OK') {
return true;
}
}
return false;
}
?>

测试结果

yubi

点击这里得到你的API_ID,API_KEY

 

 

自写代码,转载请保留版权



无觅相关文章插件,快速提升流量

About webmaster

博主目前为学生,业余时间专注于分享互联网潮流资讯,前沿WEB技术,渗透技术,APT,XSS,RFID,SDR,GSM,RF等技术.此前对前端渗透有较深建树,建博旨在记录与发表前沿技术.感谢大家关注...

分享到:
No Response
Comment (0)
Trackback (0)
Leave a Reply

昵称*

邮箱*

网址

0

贴入百度统计、CNZZ、51啦、量子统计代码等等