精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用WebAssembly對前端API請求進行簽名

開發 前端
server端處理WebAPI請求的安全問題:請求重放 (eg. 月餅搶購場景中,程序員通過腳本直接訪問接口);參數篡改 (eg. 會話劫持場景中,將應該搶購到的月餅歸屬人改為自己);腳本攻擊 (eg. 綜合前兩種場景,使用技術手段構建的請求進行攻擊,如信息竊取,漏洞攻擊)等。

背景

server端處理WebAPI請求的安全問題:

  1. 請求重放 (eg. 月餅搶購場景中,程序員通過腳本直接訪問接口)
  2. 參數篡改 (eg. 會話劫持場景中,將應該搶購到的月餅歸屬人改為自己)
  3. 腳本攻擊 (eg. 綜合前兩種場景,使用技術手段構建的請求進行攻擊,如信息竊取,漏洞攻擊)
  4. 可信客戶端請求 (eg. 以上所有場景根因均為訪問客戶端不可信并不可證偽)

解決方案

  1. 對請求參數+cnonce (客戶端生成的一次性隨機字符串) 進行hash簽名
  2. 以secret作為鹽值
  3. 將簽名作為header值傳遞給server端
  4. server端在redis中查驗是否已有重復簽名,如有重復直接拒絕請求(防止請求重放)
  5. server端對簽名值進行校驗
  6. 校驗通過之后將該簽名值作為key值,存入redis

總體流程如下圖所示:

代碼示例

前端使用示例(TypeScript Vue3 版本):

  1. <script setup> 
  2. import { onMounted } from "vue"
  3. import initWasm, {sign} from "./pkg/sign.js"; // 通過wasm-pack打包生成的二進制包的入口文件 
  4. import { v4 as uuidv4 } from 'uuid'; // 此示例以生成的UUID作為cnonce隨機字符串 
  5.   
  6. onMounted(async () => { 
  7.     await initWasm() 
  8. }) 
  9.   
  10. const sendRequest = () => { 
  11.     const cnonce = uuidv4() 
  12.     const params: EncryptedParams = { 
  13.         name'John'
  14.         age: 23, 
  15.         breed: 'dog'
  16.         ts: Date.now() 
  17.     } 
  18.     const wasmSignature = sign(JSON.stringify(params), cnonce); 
  19.     ... 
  20.     axios.post(something); 
  21.   
  22. </script> 

 

簽名機制示例,server端接受到請求時,應該同時獲得簽名值以及cnonce一次性字符串,按照下面同樣的簽名順序進行簽名,比對前端傳入的簽名以及server端生成的簽名進行校驗:

  1. const encryptedSign = (message: string, cnonce: string): string => { 
  2.   const secret = 'XXXXXXX' // 該簽名鹽值可以自行生成,生成之后需要重新編譯rust應用,生成新的wasm包 
  3.   const hashDigest = sha256(`${cnonce}|${message}`) 
  4.   const hmacDigest = Base64.stringify(hmacSHA512(hashDigest.toString().toUpperCase(), secret)) 
  5.   return hmacDigest.toString().toUpperCase() 

簽名機制示例 (rust 版本): 

  1. extern crate wasm_bindgen; 
  2.   
  3. use ring::hmac; 
  4. use ring::digest::{Context, SHA256}; 
  5. use data_encoding::BASE64; 
  6. use data_encoding::HEXUPPER; 
  7. use wasm_bindgen::prelude::*; 
  8.   
  9. #[wasm_bindgen] 
  10. pub fn ron_weasley_sign (message: &str, cnonce: &str) -> String { 
  11.     const SECRET: &str = std::env!("SECRET"); 
  12.   
  13.     let mut context = Context::new(&SHA256); 
  14.     context.update(format!("{}|{}", cnonce, message).as_bytes()); 
  15.     let sha256_result = context.finish(); 
  16.     let sha256_result_str = format!("{}", HEXUPPER.encode(sha256_result.as_ref())); 
  17.   
  18.     let key = hmac::Key::new(hmac::HMAC_SHA512, SECRET.as_bytes()); 
  19.     let mac = hmac::sign(&key, sha256_result_str.as_bytes()); 
  20.     let b64_encoded_sig = BASE64.encode(mac.as_ref()); 
  21.     return b64_encoded_sig.to_uppercase(); 

構建rust源代碼,并生成對應的二進制包

首先在項目的github地址

https://github.com/swearer23/ron-weasley 下載源代碼

之后按照README文件的步驟安裝編譯環境(以*nix環境為例)

安裝cargo

由于我們使用cargo作為rust環境的管理器,所以第一步安裝cargo

安裝完成后在命令行輸入cargo -v 查看是否安裝成功

  1. cargo -v # 可能需要重新啟動終端 
  2. Rust's package manager 
  3.  
  4. USAGE: 
  5.     cargo [+toolchain] [OPTIONS] [SUBCOMMAND] 
  6.  
  7. OPTIONS: 
  8.     -V, --version                  Print version info and exit 
  9.         --list                     List installed commands 
  10.         --explain <CODE>           Run `rustc --explain CODE` 
  11.     -v, --verbose                  Use verbose output (-vv very verbose/build.rs output) 
  12.     -q, --quiet                    No output printed to stdout 
  13.         --color <WHEN>             Coloring: auto, always, never 
  14.         --frozen                   Require Cargo.lock and cache are up to date 
  15.         --locked                   Require Cargo.lock is up to date 
  16.         --offline                  Run without accessing the network 
  17.         --config <KEY=VALUE>...    Override a configuration value (unstable) 
  18.     -Z <FLAG>...                   Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for details 
  19.     -h, --help                     Prints help information 
  20.  
  21. Some common cargo commands are (see all commands with --list): 
  22.     build, b    Compile the current package 
  23.     check, c    Analyze the current package and report errors, but don't build object files 
  24.     clean       Remove the target directory 
  25.     doc, d      Build this package's and its dependencies' documentation 
  26.     new         Create a new cargo package 
  27.     init        Create a new cargo package in an existing directory 
  28.     run, r      Run a binary or example of the local package 
  29.     test, t     Run the tests 
  30.     bench       Run the benchmarks 
  31.     update      Update dependencies listed in Cargo.lock 
  32.     search      Search registry for crates 
  33.     publish     Package and upload this package to the registry 
  34.     install     Install a Rust binaryDefault location is $HOME/.cargo/bin 
  35.     uninstall   Uninstall a Rust binary 
  36.  
  37. See 'cargo help <command>' for more information on a specific command. 

安裝wasm-pack

要構建二進制包,需要一個額外工具 wasm-pack。它會幫助我們把代碼編譯成 WebAssembly 并構建出適用于web環境的wasm包。使用下面的命令可以下載并安裝:

  1. cargo install wasm-pack 

編譯wasm

wasm-pack安裝成功后,執行下面的命令以編譯wasm包

  1. SECRET= wasm-pack build --target=web --release 

<your-secret>替換為你的簽名鹽值

第一次構建和編譯時間會比較長,需要下載依賴的rust庫并編譯,請耐心等待

如果速度仍然很慢,建議更換cargo國內源

更換 cargo 源

在你的cargo文件夾下新建 config 文件

macos中,文件夾地址在 ~/.cargo 

  1. cd ~/.cargo 
  2. touch config 

然后編輯config文件,添加如下內容: 

  1. [source.crates-io] 
  2. registry = "https://github.com/rust-lang/crates.io-index" 
  3. replace-with = 'ustc' 
  4. [source.ustc] 
  5. registry = "git://mirrors.ustc.edu.cn/crates.io-index" 

即可更換為ustc的源

集成

執行wasm-pack命令打包會得到一個名為pkg的文件夾,位于項目的根目錄下

將其放入要使用的前端項目中,即可以像上面代碼示例章節所描述的方式進行集成和調用

附錄

  • rust 項目地址:https://github.com/swearer23/ron-weasley
  • vue3 調用方式示例項目地址:https://github.com/swearer23/harry-porter (內含有secret=123456的wasm包,可以用于示例)

 

 

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2023-12-12 07:30:54

IstioWasm前端

2024-10-18 08:17:36

2021-08-30 14:23:05

BlazorHTTP請求

2020-11-09 11:10:56

前端api緩存

2017-02-24 09:30:17

iOS簽名代碼

2023-10-27 10:16:17

前端項目Rust

2020-11-03 08:12:20

WebAssemblyAPI

2019-09-12 18:10:38

HTTPieAPI測試Python

2022-06-02 08:01:11

云原生工具

2024-09-30 09:25:29

2018-07-30 13:29:04

WebAssemblyGo語言

2021-05-09 22:48:40

SQL數據庫變量

2021-06-15 20:59:14

Kubernetes調試容器

2022-08-15 15:16:20

機器學習圖片深度學習

2021-03-05 00:06:12

Docker容器內存

2009-10-22 09:32:51

ghostlinux系統備份

2023-07-13 11:24:14

SQL優化賦值

2021-09-27 16:39:10

PythonGif壓縮

2020-03-27 20:22:53

數據集裝箱網絡

2023-12-06 07:14:28

前端API中間件
點贊
收藏

51CTO技術棧公眾號

国产精品欧美一区二区三区奶水 | 少妇伦子伦精品无吗| 菠萝蜜视频国产在线播放| 丁香网亚洲国际| 97久久超碰福利国产精品…| 免费看黄色av| 亚洲一区二区三区在线免费| 色av一区二区| 女人床在线观看| 极品白浆推特女神在线观看| 国产麻豆午夜三级精品| 欧美与欧洲交xxxx免费观看| 天天综合天天做| 激情综合网五月| 欧美电影免费观看完整版| 男人天堂成人在线| 男女在线视频| 国产欧美日本一区视频| 国产91亚洲精品一区二区三区| 精品无码一区二区三区的天堂| 99精品美女| 亚洲日本欧美中文幕| 日本精品一二三| 国产精品99久久久久久董美香| 亚洲国产aⅴ天堂久久| 亚洲一二区在线| 亚州精品国产精品乱码不99按摩| 国产一区二三区| 国产精品久久77777| 国产一级二级三级| 99成人在线视频| 影音先锋日韩有码| 色呦呦一区二区| 韩国女主播一区二区三区| 69p69国产精品| 亚洲熟妇国产熟妇肥婆| av在线官网| 国产精品视频第一区| 裸模一区二区三区免费| 男人天堂网在线视频| 国产精品1区2区| 91网站在线看| 亚洲一卡二卡在线观看| 日韩高清不卡在线| 日本精品视频网站| 午夜毛片在线观看| 国产欧美日本| 欧美激情精品久久久久久| 久久精品日韩一区二区三区| 色偷偷888欧美精品久久久| 国产肉体xxxx裸体784大胆| 91久久精品无嫩草影院| 久热在线观看视频| 少妇无套高潮一二三区| 一区二区免费在线观看| 欧美美女一区二区三区| 成人蜜桃视频| av中文字幕免费| 精东粉嫩av免费一区二区三区| 国产精品久久久久久av福利| 日韩欧美在线字幕| 欧洲av一区二区嗯嗯嗯啊| 日韩一区二区高清视频| 制服丝袜在线播放| 精品美女视频| a天堂视频在线| 国产成人精品999在线观看| 日韩成人在线播放| 精品视频在线观看一区二区| 啦啦啦免费高清视频在线观看| 亚洲日韩成人| 国产91|九色| 精品久久久久久久久久久国产字幕| 亚洲在线网站| 国产精品黄视频| 91亚洲欧美激情| 成人午夜视频在线观看| 久久久久久九九| 国产黄在线观看免费观看不卡| 欧美国产日韩亚洲一区| 一区二区高清视频| 好久没做在线观看| 天天操天天综合网| 五月婷婷狠狠操| 欧美一级做a| 精品少妇一区二区三区免费观看| 无码任你躁久久久久久老妇| 国产成人3p视频免费观看| 色噜噜国产精品视频一区二区| 国产探花在线免费观看| 一区二区黄色| 成人高清视频观看www| 免费一级特黄毛片| 91精品国产91久久久久久吃药| 欧美图区在线视频| 亚洲精品高清视频| 二区三区四区高清视频在线观看| 亚洲日本一区二区| 玩弄中年熟妇正在播放| 成人1区2区| 欧美刺激午夜性久久久久久久| 亚洲护士老师的毛茸茸最新章节| 久久久久一区| 天堂久久av| 91xxx在线观看| 狠狠人妻久久久久久| 涩视频在线观看| 国产精品无码一区二区在线| 成人av免费在线看| xxxx.国产| 久久电影网站中文字幕| 国产精品日韩二区| 91高清在线| 五月婷婷色综合| 视频区 图片区 小说区| 国产99亚洲| 欧美极品少妇xxxxⅹ裸体艺术 | 人九九综合九九宗合| 国产精品自偷自拍| 国产欧美精品日韩区二区麻豆天美| 日韩专区第三页| 九九热这里有精品| 亚洲欧美国产精品va在线观看| 青青青在线视频| 美美哒免费高清在线观看视频一区二区 | 女人十八岁毛片| 成人一区二区三区中文字幕| 亚洲午夜精品久久久久久浪潮| 涩涩在线视频| 亚洲第一中文字幕在线观看| 性欧美videos| 久久99久久精品欧美| 日本在线观看不卡| 末成年女av片一区二区下载| 欧美刺激午夜性久久久久久久| 国产又粗又硬又长又爽| 男男成人高潮片免费网站| 久久久久资源| 一区二区三区四区日本视频| 亚洲国产成人在线播放| 久久久久成人网站| 国产精品一二三四五| 看全色黄大色大片| 国产精品igao视频网网址不卡日韩| 色哟哟入口国产精品| 无码人妻精品一区二区三区蜜桃91| 99国产一区二区三精品乱码| 国产午夜福利100集发布| 91精品入口| 久久久噜噜噜久久中文字免| wwwxxxx国产| 亚洲精品成人精品456| 五月天六月丁香| 自产国语精品视频| 91在线观看网站| 欧美videosex性极品hd| 精品日产卡一卡二卡麻豆| 久久久久久久久毛片| 国产毛片精品视频| 女人被男人躁得好爽免费视频| 538任你躁精品视频网免费| 欧美大胆a视频| www.中文字幕| 黑人巨大精品欧美一区二区免费| 在线免费观看a级片| 国产精品一区毛片| 日本一区二区三区四区在线观看 | 国产区在线观看| 日韩午夜三级在线| 日韩精品在线不卡| 久久精品一区蜜桃臀影院| 熟妇人妻无乱码中文字幕真矢织江| 国产剧情在线观看一区| 国产男女猛烈无遮挡91| 国产cdts系列另类在线观看| 欧美tk—视频vk| 69视频免费在线观看| 国产欧美一区二区精品久导航 | 成人一区二区三区中文字幕| 免费无码毛片一区二三区| 免费看av成人| 国产日本欧美在线观看| 欧美人与性动交α欧美精品图片| 日韩高清人体午夜| 中文字幕男人天堂| 一区二区三区中文字幕电影 | 欧美日韩播放| 国产一区视频在线播放| 丁香花高清在线观看完整版| 亚洲美女久久久| 国产熟女精品视频| 欧美日韩加勒比精品一区| 特级西西人体高清大胆| 夫妻av一区二区| 日韩福利视频在线| 亚洲午夜久久久久久尤物| 欧美一区二区三区四区夜夜大片 | 狠狠色狠狠色综合| 日本欧美视频在线观看| 波多野结衣在线观看一区二区| 亚洲综合大片69999| 欧美自拍电影| 色综合久久悠悠| av中文字幕一区二区三区| 欧美xingq一区二区| 中文无码精品一区二区三区| 亚洲国产精品嫩草影院| 人与动物性xxxx| 91视频国产观看| 日日夜夜精品视频免费观看| 久久一综合视频| 久久久99精品视频| 欧美日韩一二三四| 精品国产一区二区三区四区vr | 欧美一区三区四区| 无码日韩精品一区二区| 亚洲v精品v日韩v欧美v专区| 小早川怜子一区二区的演员表| 91在线视频观看| 日本精品一二三区| 看国产成人h片视频| 韩国日本美国免费毛片| 99成人免费视频| 欧美视频在线第一页| 国产精品毛片久久| 亚洲精品高清视频| 在线一级成人| 精品国产综合| 欧美a一欧美| 国产精品入口免费| 亚洲午夜免费| 亚洲一区二区三区毛片| 四虎国产精品永久在线国在线| 国产91精品在线播放| 国产ktv在线视频| 久久久久久欧美| 色yeye免费人成网站在线观看| 日韩在线观看免费高清| 亚洲视频tv| 日韩一区二区三区国产| 91青青在线视频| 中文字幕亚洲一区| 91在线看片| 日韩最新在线视频| 成人在线app| 美女精品久久久| 肉肉视频在线观看| 欧美一区二区三区人| 久久久久久亚洲精品不卡| 国产91视觉| 秋霞无码一区二区| 一级片久久久久| 国产精品一区二区黑人巨大| 欧美一级免费| 欧美成人免费观看| 欧美性videos| www.日韩不卡电影av| а√天堂中文在线资源bt在线 | 蜜臀av中文字幕| 亚洲第一福利视频| 日日躁夜夜躁白天躁晚上躁91| 亚洲精品一区二区三区99| 天堂av一区二区三区| 亚洲国产成人精品女人久久久| 外国精品视频在线观看| 亚洲第一免费网站| 日av在线播放| 中文字幕精品久久久久| 麻豆传媒在线观看| 欧美福利视频在线观看| а√在线中文网新版地址在线| 91精品国产色综合| 日韩成人影音| 91老司机精品视频| 国产精品对白| 欧美最大成人综合网| 日韩欧美高清在线播放| 中文字幕色呦呦| 国产精品免费看| a在线观看免费视频| 国产成a人亚洲| 无码人妻精品一区二区三应用大全| 久久久www免费人成精品| 日韩免费av一区| 亚洲超碰精品一区二区| 羞羞色院91蜜桃| 日韩欧美国产系列| 日本五码在线| 欧美xxxx综合视频| 樱花草涩涩www在线播放| 国产精品久久一区主播| 亚洲va欧美va人人爽成人影院| 狠狠色狠狠色综合人人| 日韩中文在线电影| 日韩日韩日韩日韩日韩| 欧美96一区二区免费视频| 无码人妻丰满熟妇区毛片蜜桃精品| 91亚洲精品乱码久久久久久蜜桃| 懂色av粉嫩av蜜臀av一区二区三区| 亚洲一区二区三区不卡国产欧美| 人妻丰满熟妇av无码区| 日韩一级免费一区| 国产69精品久久app免费版| 欧美精品制服第一页| 欧美影视资讯| 狠狠色综合欧美激情| 亚洲免费二区| 国产福利影院在线观看| www.欧美日韩| 中文字幕人妻一区二| 在线观看亚洲精品视频| 日韩中文字幕免费在线观看| 色老头一区二区三区在线观看| 正在播放日韩精品| 爱情岛论坛亚洲入口| 日韩欧美大片| 手机在线看福利| 久久精品在线观看| 日韩精品国产一区二区| 69p69国产精品| 3d成人动漫在线| 欧美在线国产精品| 盗摄牛牛av影视一区二区| 色综合影院在线观看| 亚洲一区国产一区| 久久久男人的天堂| 亚洲激情校园春色| 97人妻一区二区精品免费视频 | 欧美在线观看视频一区| www.日本久久久久com.| 毛片在线导航| 91丝袜美腿美女视频网站| 操欧美老女人| 激情网站五月天| 91色视频在线| 天天综合网久久综合网| 亚洲国产精品悠悠久久琪琪| 日本动漫同人动漫在线观看| 91精品视频网站| 91日韩欧美| 三上悠亚在线一区| 欧美国产在线观看| 免费视频网站在线观看入口| 亚洲精品自拍第一页| 欧美男男tv网站在线播放| 国产三区二区一区久久| 伊人蜜桃色噜噜激情综合| 波多野结衣三级视频| 亚洲美女淫视频| 精品欧美在线观看| 欧美高清在线观看| 99久久香蕉| 欧美日韩在线一| 国产亚洲制服色| 中文字幕网址在线| 久久久精品999| 日韩在线网址| 男人和女人啪啪网站| 久久亚洲一区二区三区四区| 少妇太紧太爽又黄又硬又爽| 亚洲欧美资源在线| 亚洲精品粉嫩美女一区| 亚洲一区免费看| 国产老女人精品毛片久久| 久久久久久久久久综合| 亚洲精品久久久久久久久久久 | 国产成人精品视频| 日韩久久久久| 亚洲av无码久久精品色欲| 亚洲v中文字幕| 国产一二三区在线视频| 国产深夜精品福利| 欧美激情综合| 免费a级黄色片| 欧美日韩一区 二区 三区 久久精品| 国产精品剧情| 国产一区二区高清不卡| 石原莉奈一区二区三区在线观看| 九九热久久免费视频| 欧美成人精品1314www| 女人高潮被爽到呻吟在线观看| 日韩精品久久久| 国产九九视频一区二区三区| 日本免费观看视| 日韩在线高清视频| 9l亚洲国产成人精品一区二三| 国产免费成人在线| 中文字幕一区二区三区四区| 黄色av中文字幕| 国产精品久久久久久久久久小说| 中文字幕一区二区三区久久网站| 变态另类丨国产精品| 欧美欧美欧美欧美| 98色花堂精品视频在线观看| 亚洲ai欧洲av| 不卡的av电影在线观看| 这里只有久久精品视频| 欧美激情综合色综合啪啪五月| 欧美精品一区二区三区精品| 9191在线视频|