Thinkphp在应用接口开发过程中的通信安全证书
如果编写的接口没有安全证书就可以直接访问,那么对我们网站来说代表着非常高的安全风险。有些黑客可以直接使用你的界面,操作数据库的后果是不可估量的。那么我们如何才能进行有效的安全审计呢?这里我使用了微信开发中的access_token机制,让前端开发工程师app通过发送appid和appsecert来获取token。服务器缓存token7200秒。如果客户端每次都直接请求token,token每次都会恢复。因此,我们建议客户端也缓存它。客户端可以判断本地token是否存在。如果存在,则可以直接使用token作为参数来访问API。服务器判断token的有效性并返回相应信息。客户端缓存如果token失败,只需再次请求token即可。差不多就是这个想法。我在下面提供了完整的推荐代码。如果有更好的方法,请指教。
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public$appid = 'dmm888';
public$appsecret = '';
publicfunction index(){
$this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>[ 您现在访问的是Home模块的Index控制器 ]</div><script type="text/javascript" charset="UTF-8"></script>','utf-8');
}
publicfunction test(){
if(!isset($_GET['token'])){
$this->apiReturn(4001,'invalid token');
}elseif(!S($_GET['token'])){
$this->apiReturn(4001,'invalid token');
}
$data = array(
'id'=>2,
'username'=>'明之暗夜',
'info'=>array('age'=>24,'address'=>'学府路','url'=>'')
);
if($data){
$this->apiReturn(200,'读取用户信息成功',$data,xml);
}
}
publicfunction getToken(){
$ori_str = S($this->appid.'_'.$this->appsecret); //这里appid和appsecret我写固定了,实际是通过客户端获取 所以这里我们可以做很多 比如判断appid和appsecret有效性等if($ori_str){ //重新获取就把以前的token删除
S($ori_str,null);
}
//这里是token产生的机制 您也可以自己定义$nonce = $this->createNoncestr(32);
$tmpArr = array($nonce,$this->appid,$this->appsecret);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
// echo $tmpStr;
//这里做了缓存 'a'=>b 和'b'=>a格式的缓存
S($this->appid.'_'.$this->appsecret,$tmpStr,7200);
S($tmpStr,$this->appid.'_'.$this->appsecret,7200);
}
/**
* 作用:产生随机字符串,不长于32位
*/function createNoncestr( $length = 32 )
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return$str;
}
}具体验证方法不用我写了。这样,我们只需要将appid和appsecret提供给应用的前端开发人员,并告诉他们如何使用即可。token是唯一的信物。只有token有效,可以向下执行,以确保安全。您可以获得一些保修
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
