PHP+Vue實現(xiàn)前后端加密的輕量級方案分享
在做項目的時候,我遇到一個需求:前后端需要傳輸一些敏感數(shù)據(jù)。
雖然 HTTPS 已經(jīng)可以保證傳輸安全,但在某些場景下,我還是希望能再加一層保護:
- 防止接口被隨便模擬調(diào)用
- 就算數(shù)據(jù)被截獲,也看不懂里面的內(nèi)容
- 就算用劫持的數(shù)據(jù)請求,也不進行響應(yīng)
我最開始也去找過現(xiàn)成的方案,確實有一些成熟的實現(xiàn)。
但問題是——它們的功能太多、體系太重,而我的需求其實很單純,只需要“在請求上套一層加解密”。
所以與其硬拗那些復(fù)雜的框架,不如自己寫一個更輕量的版本。
我的解決方式
于是,我就寫了一個前后端配套的小工具:
- 前端:Vue 環(huán)境下的 npm 包
- 后端:PHP Composer 庫
核心思路是:
- 前端自動加密請求體
- 后端自動解密請求體
- 開發(fā)者幾乎不需要關(guān)心加解密細節(jié),就像在用普通的請求一樣
- 內(nèi)置 AES-128-CBC 加密、簽名機制、防重放攻擊
- 允許一定的時間誤差,避免前后端時鐘不一致
用起來的樣子
前端示例:
通過 npm install hejunjie-encrypted-request 引用
import { encryptRequest, EncryptOptions } from "hejunjie-encrypted-request";
const options: EncryptOptions = {
appKey: "your-app-key", // 簽名密鑰,用于接口簽名校驗(32位字母或數(shù)字)
aesKey: "your-aes-key", // AES 加密的密鑰(16位)
aesIv: "your-aes-iv", // AES 加密的初始化向量(16位)
token: "optional-token", // 可選的認證令牌,PHP 端可用于用戶驗證
};
// 請求數(shù)據(jù)
const data = { name: "張三" };
// 生成密文
const encrypted = encryptRequest(data, options);
// 發(fā)送請求
request.post("/api/user/info", encrypted)
.then(res => console.log(res));
后端示例:
通過 composer require hejunjie/encrypted-request 引用
use Hejunjie\EncryptedRequest\EncryptedRequestHandler;
$param = $_POST; // 自行獲取前端請求的參數(shù)
$handler = new EncryptedRequestHandler();
try {
$data = $handler->handle(
$param['en_data'] ?? '',
$param['timestamp'] ?? '',
$param['sign'] ?? ''
);
} catch (\Hejunjie\EncryptedRequest\Exceptions\SignatureException $e) {
echo "簽名錯誤: " . $e->getMessage();
} catch (\Hejunjie\EncryptedRequest\Exceptions\TimestampException $e) {
echo "時間戳錯誤: " . $e->getMessage();
} catch (\Hejunjie\EncryptedRequest\Exceptions\DecryptionException $e) {
echo "解密錯誤: " . $e->getMessage();
}
print_r($data); // ['name' => '張三']
整體就是“即插即用”,加密解密幾乎是無感的。
意義在哪里
這個方案不是什么替代 HTTPS 的黑科技,它更像是一個“小插件”:
- HTTPS 解決傳輸安全
- 我這套方案解決“再多一層殼”的需求
適合那些 對安全性有點額外要求,但又不想引入復(fù)雜框架 的項目。
到此這篇關(guān)于PHP+Vue實現(xiàn)前后端加密的輕量級方案分享的文章就介紹到這了,更多相關(guān)PHP Vue加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP單例模式模擬Java Bean實現(xiàn)方法示例
這篇文章主要介紹了PHP單例模式模擬Java Bean實現(xiàn)方法,涉及php面向?qū)ο蟪绦蛟O(shè)計相關(guān)操作技巧,需要的朋友可以參考下2018-12-12
php連接mysql之mysql_connect()與mysqli_connect()的區(qū)別
本擴展自 PHP 5.5.0 起已廢棄,并在將來會被移除。應(yīng)使用 MySQLi 或 PDO_MySQL 擴展來替換之,這里就為大家分享一下mysql_connect()與mysqli_connect()的區(qū)別,需要的朋友可以參考下2020-07-07
php 調(diào)用ffmpeg獲取視頻信息的簡單實現(xiàn)
下面小編就為大家?guī)硪黄猵hp 調(diào)用ffmpeg獲取視頻信息的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
PHP實現(xiàn)數(shù)據(jù)庫統(tǒng)計時間戳按天分組輸出數(shù)據(jù)的方法
這篇文章主要介紹了PHP實現(xiàn)數(shù)據(jù)庫統(tǒng)計時間戳按天分組輸出數(shù)據(jù)的方法,涉及php基于時間的運算與數(shù)據(jù)庫查詢相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
PHP面向?qū)ο蟪绦蛟O(shè)計子類擴展父類(子類重新載入父類)操作詳解
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計子類擴展父類(子類重新載入父類)操作,涉及php面向?qū)ο蠓椒ㄖ貙懪c擴展相關(guān)操作技巧,需要的朋友可以參考下2019-06-06

