目的:
├── core
│ ├── common.php(常用的公用方法)
│ ├── controller.php (控制器基類)
│ └── redisservice.php (redis操作類)
├── config.php (redis以及是否開啟關閉介面校驗的配置項)
├── login.php (登入獲取token入口)
└── user.php(獲取使用者資訊,執行整個介面校驗流程)
/** * @desc 公用方法
* class common
*/class common
echo json_encode($outdata);
die();
}/***
* @desc 建立token
* @param $uid
*/public static function createtoken($uid)
/*** @desc 獲取配置資訊
* @param $type 配置資訊的型別,為空獲取所有配置資訊
*/public static function getconfig($type='')else
return ;}}
}
<?php
namespace core;
/* *@desc redis類操作檔案
**/class redisservice
if(isset($config['auth']))
$this->redis->select($this->dbid);
}/**
*@desc 得到例項化的物件
***/
public static function getinstance($config)
return self::$_instance;
}/**
*@desc 防止轉殖
**/private function __clone(){}
/**@desc 設定字串型別的值,以及失效時間
**/public function set($key,$value=0,$timeout=0)
$res = $this->redis->set($key,$value);
if($timeout)
return $res;
}/**
*@desc 獲取字串型別的值
**/public function get($key)
}
<?php
namespace core;
use core\common;
use core\redisservice;
/***
* @desc 控制器基類
* class controller
* @package core
*/class controller
}/**
* @desc 校驗token的有效性
*/private function checktoken()
$this->token = $_post['token'];
$key = "token:".$this->token;
$mid = $this->redis->get($key);
if(!$mid)
$this->mid = $mid;
}/**
* @desc 校驗簽名
*/private function checksign()
$this->sign = $_get['sign'];
$postparams = $_post;
$params = ;
foreach($postparams as $k=>$v)
sort($params);
$apiserect = $this->_config['apiserect'];
$str = sprintf("%s%s%s", $apiserect, implode('', $params), $apiserect);
if ( md5($str) != $this->sign )
}/**
* @desc nonce校驗預防介面重放
*/private function checknonce()
$this->nonce = $_post['nonce'];
$noncekey = sprintf("sign:%s:nonce:%s", $this->sign, $this->nonce);
$nonv = $this->redis->get($noncekey);
if ( !empty($nonv)) else }}
<?php
return [
//redis的配置
'redis' => [
'host' => 'localhost',
'port' => '6379',
'auth' => '123456',
'db_id' => 0,//redis的第幾個資料庫倉庫
],//是否開啟介面校驗,true開啟,false,關閉
'checkapi'=>true,
//加密sign的鹽值
'apiserect'=>'test_jwt'
];
<?php
/** * @desc 自動載入類庫
*/spl_autoload_register(function($classname));
use core\common;
use core\redisservice;
if(!isset($_post['username']) || !isset($_post['pwd']) )
$username = $_post['username'];
$pwd = $_post['pwd'];
if($username!='admin' || $pwd!='123456' )
//建立token並存入redis,token對應的值為使用者的id
$config = common::getconfig('redis');
$redis = redisservice::getinstance($config);
//假設使用者id為2
$uid = 2;
$token = common::createtoken($uid);
$key = "token:".$token;
$redis->set($key,$uid,3600);
$data['token'] = $token;
common::outjson(0,'登入成功',$data);
<?php
/** * @desc 自動載入類庫
*/spl_autoload_register(function($classname));
use core\controller;
use core\common;
class usercontroller extends controllerelse
}}//獲取使用者資訊
$user = new usercontroller();
$user->getuser();
簡要描述:請求url:請求方式:引數:
引數名必選
型別說明
username
是string
使用者名稱pwd
是string
密碼返回示例
}
簡要描述:請求url:請求方式:引數:
引數名必選
型別說明
token
是string
token
mid是
int使用者id
nonce
是string
防止使用者重放字串 md5加密串
timestamp
是int
當前時間戳
返回示例
}
安全解決方案
專案收集的思路 乙個是關注網際網路企業 團隊的安全開源專案,經企業內部實踐,這些最佳實踐值得借鑑。另乙個是來自企業安全能力建設的需求,根據需求分類,如waf hids git監控等。這個收集是乙個長期的過程,我在github建立了乙個專案,專門用來收集一些優秀的甲方安全專案。專案內容 根據企業安全能...
php介面加密終極解決方案
1.客戶端向伺服器端發起ssl連線請求 2.伺服器把rsa公鑰傳送給客戶端,並且伺服器端儲存著唯一的rsa私鑰 3.客戶端用公鑰對雙方通訊的對稱des秘鑰進行加密,並傳送給伺服器端 4.伺服器利用自己唯一的rsa私鑰對客戶端發來的對稱aes秘鑰進行解密,在此過程中,中間方無法對其解密 即使是客戶端也...
VC介面解決方案
vc介面解決方案 關鍵字 vc 簡介 vc採用delphi裡邊成熟的介面元件vclskin,vclskin有原始碼,有一百多個,將它做成dll來用,效果相當不錯。二 效果預覽 例項中的效果如下圖 效果預覽 三 呼叫方法 建立vc工程skintest,vc的建立就不具體介紹了,新增 如下 宣告 hmo...