PHP+Vue實(shí)現(xiàn)前后端加密的輕量級方案分享
在做項(xiàng)目的時(shí)候,我遇到一個(gè)需求:前后端需要傳輸一些敏感數(shù)據(jù)。
雖然 HTTPS 已經(jīng)可以保證傳輸安全,但在某些場景下,我還是希望能再加一層保護(hù):
- 防止接口被隨便模擬調(diào)用
- 就算數(shù)據(jù)被截獲,也看不懂里面的內(nèi)容
- 就算用劫持的數(shù)據(jù)請求,也不進(jìn)行響應(yīng)
我最開始也去找過現(xiàn)成的方案,確實(shí)有一些成熟的實(shí)現(xiàn)。
但問題是——它們的功能太多、體系太重,而我的需求其實(shí)很單純,只需要“在請求上套一層加解密”。
所以與其硬拗那些復(fù)雜的框架,不如自己寫一個(gè)更輕量的版本。
我的解決方式
于是,我就寫了一個(gè)前后端配套的小工具:
- 前端:Vue 環(huán)境下的 npm 包
- 后端:PHP Composer 庫
核心思路是:
- 前端自動(dòng)加密請求體
- 后端自動(dòng)解密請求體
- 開發(fā)者幾乎不需要關(guān)心加解密細(xì)節(jié),就像在用普通的請求一樣
- 內(nèi)置 AES-128-CBC 加密、簽名機(jī)制、防重放攻擊
- 允許一定的時(shí)間誤差,避免前后端時(shí)鐘不一致
用起來的樣子
前端示例:
通過 npm install hejunjie-encrypted-request 引用
import { encryptRequest, EncryptOptions } from "hejunjie-encrypted-request";
const options: EncryptOptions = {
appKey: "your-app-key", // 簽名密鑰,用于接口簽名校驗(yàn)(32位字母或數(shù)字)
aesKey: "your-aes-key", // AES 加密的密鑰(16位)
aesIv: "your-aes-iv", // AES 加密的初始化向量(16位)
token: "optional-token", // 可選的認(rèn)證令牌,PHP 端可用于用戶驗(yàn)證
};
// 請求數(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 "簽名錯(cuò)誤: " . $e->getMessage();
} catch (\Hejunjie\EncryptedRequest\Exceptions\TimestampException $e) {
echo "時(shí)間戳錯(cuò)誤: " . $e->getMessage();
} catch (\Hejunjie\EncryptedRequest\Exceptions\DecryptionException $e) {
echo "解密錯(cuò)誤: " . $e->getMessage();
}
print_r($data); // ['name' => '張三']
整體就是“即插即用”,加密解密幾乎是無感的。
意義在哪里
這個(gè)方案不是什么替代 HTTPS 的黑科技,它更像是一個(gè)“小插件”:
- HTTPS 解決傳輸安全
- 我這套方案解決“再多一層殼”的需求
適合那些 對安全性有點(diǎn)額外要求,但又不想引入復(fù)雜框架 的項(xiàng)目。
到此這篇關(guān)于PHP+Vue實(shí)現(xiàn)前后端加密的輕量級方案分享的文章就介紹到這了,更多相關(guān)PHP Vue加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP foreach引用變量導(dǎo)致的問題及其解決方案
解析smarty 截取字符串函數(shù) truncate的用法介紹
php下通過curl抓取yahoo boss 搜索結(jié)果的實(shí)現(xiàn)代碼

