php介面資料安全解決方案(一)

2022-03-12 02:40:29 字數 4580 閱讀 9101

目的:

├── 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...