介面的安全性主要圍繞在Token、Timestamp和Sign三個機制展開設計,確保介面的資料不會被竄改和重複呼叫,以下具體來看:
(1)Token授權機制:(Token是客戶端存取服務端的憑證)--使用者使用使用者名稱密碼登入後伺服器給客戶端回傳一個Token (通常是UUID),並將Token-UserId以鍵值對的形式存放在快取伺服器中。服務端接收到請求後進行Token驗證,如果Token不存在,表示請求無效。 (推薦學習:PHP程式設計從入門到精通)
(2)時間戳逾時機制:(簽章機制保證了資料不會被竄改)使用者每次請求都帶著目前時間的時間戳timestamp,服務端接收到timestamp後跟當前時間進行比對,如果時間差大於一定時間(例如5分鐘),則認為該請求失效。時間戳超時機制是防禦DOS攻擊的有效手段。
(3)簽章機制:將 Token 與 時間戳 加上其他請求參數再用MD5或SHA-1演算法(可視情況加點鹽分)加密,加密後的資料就是本次請求的簽名sign,服務端接收到請求後以相同的演算法得到簽名,並跟當前的簽名進行比對,如果不一樣,說明參數被更改過,直接返回錯誤標識。
/** * @desc 接受参数处理 */ private function dealParam(){ //接受header参数--系统参数 $systemParam=getAllHeadersParam(); //接受body数据--业务参数(json格式) $data=file_get_contents('php://input'); //读取配置文件中的私钥信息 $api_apiKey=C('api_apiKey'); $privatekey=$api_apiKey[$systemParam['token']]; $arr['token'] =$systemParam['token']; //服务端分配的标识(不同客户端需使用不同的标识) $arr['timestamp']=$systemParam['timestamp']; //时间戳,UTC时间,以北京时间东八区(+8)为准 $arr['version'] =$systemParam['version']; //版本号 $arr['sign'] =$systemParam['sign']; //签名 $arr['source'] =$systemParam['source']; //来源(0-安卓/1-IOS/2-H5/3-PC/4-php/5-java) $arr['data'] =json_decode($data,true); //业务参数json格式 $arr['method'] =$data['method']; //访问接口,格式:模型名.方法名 return $arr; }
/* * @desc 获取所有以HTTP开头的header参数 * @return array */ private function getAllHeadersParam(){ $headers = array(); foreach($_SERVER as $key=>$value){ if(substr($key, 0, 5)==='HTTP_'){ $key = substr($key, 5); $key = str_replace('_', ' ', $key); $key = str_replace(' ', '-', $key); $key = strtolower($key); $headers[$key] = $value; } } return $headers; }
/* * @desc 签名校验 * @param $token string 服务端分配的标识(不同客户端需使用不同的标识) * @param $timestamp string 时间戳,UTC时间,以北京时间东八区(+8)为准 * @param $version string 版本号 * @param $sign string 签名 * @param $source int 来源(0-安卓/1-IOS/2-H5/3-PC/4-php/5-java) * @param $privatekey string 私钥 * @param $data 业务参数json格式 * @return bool */ private function checkAuth($token,$timestamp,$version,$sign,$source,$privatekey,$data){ //参数判断 if(empty($token)){ E('token不能为空!'); } if(empty($timestamp)){ E('时间戳不能为空!'); } if(empty($version)){ E('版本号不能为空!'); } if(empty($data)){ E('业务参数不能为空!'); } if(empty($source) && $source<>'0'){ E('来源不能为空!'); } if(empty($sign)){ E('签名不能为空!'); } if(empty($privatekey)){ E('私钥不能为空!'); } //时间校验 $expire_second=C('expire_second',null,10); $timestamp_t=$timestamp+$expire_second; if($timestamp_t<time()){ E('请求已经过期!'); } $public= D('public'); $datas=$this->original; //系统参数 $paramArr=array( 'token'=>$token, 'timestamp'=>$timestamp, 'version'=>$version, 'source'=>$source, 'data'=>$data, ); //按规则拼接为字符串 $str = $this->createSign($paramArr,$this->privatekey); if($str != $this->sign){ E('验签错误!'); } return true; }
以上是php接口怎麼保證安全性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。