NodeJS實(shí)現(xiàn)客戶端js加密
思路:
- 服務(wù)端渲染業(yè)務(wù)代碼js =>
- 前后端約定加密算法 =>
- 業(yè)務(wù)代碼進(jìn)行簽名 =>
- 客戶端解密業(yè)務(wù)代碼 =>
- eval 執(zhí)行
Node 路由示例:
/** * 請(qǐng)自定義 restful API 這里以 GET 為例 * @param {req} * @param {res} * @return {next()} */ //var util = require('utility'); exports.encryption = function(req, res){ //GET var name = req.query.name , jsStr // 用于 服務(wù)端渲染的 js 腳本 , doc = { n : '支持請(qǐng)求參數(shù)', }; // isSafe : 常規(guī)安全字符判斷 if (fun.isSafe(name)) doc['n'] = name; /////////////////需要加密的js 業(yè)務(wù)代碼 start///////////////////// jsStr = function(n){ alert('開始執(zhí)行業(yè)務(wù)代碼~') // 變量 N 可以是某些 之前需要 服務(wù)端渲染的 信息 // 比如 自產(chǎn) 的 url 之類 function sayHello(s){ alert('您輸入了: '+s); } sayHello(n); // } //////////////////需要加密的js 業(yè)務(wù)代碼 end//////////////////// jsStr = '('+jsStr.toString()+')("'+( name ? doc.n : '默認(rèn)的')+'")'; var key = util.md5('highsea90'+Date.now()) var resStr = myFromCharCode(key, jsStr); res.render('cm/eval',{ title : 'js 加密 demo', charCode : escape(myFromCharCode.toString()), data : escape(resStr), key : key }) }; /** * @param {m}密鑰 * @param {text}文本 * @return {last}加密文本 */ function myFromCharCode (m, text){ var last = ''; for (var i = 0 , l = text.length; i < l; i++) { for (var j = 0, k = m.length; j < k; j++) { var key = m.charCodeAt(j) , text2 = text.charCodeAt(i) ^ key } last += String.fromCharCode(text2); } return last; }
客戶端 頁(yè)面示例:
<!DOCTYPE html> <html> <head> <title><%=title%></title> </head> <body> <script type="text/javascript"> // 執(zhí)行 約定的 加密算法 eval(unescape("<%=charCode%>")); // 服務(wù)端加密后的 字符串 用約定的 算法進(jìn)行解密 var str = myFromCharCode("<%=key%>", unescape("<%=data%>")); // 執(zhí)行業(yè)務(wù)代碼 eval(str); </script> </body> </html>
代碼演示
一個(gè)小錄像:
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- 獲取本機(jī)IP地址的實(shí)例(JavaScript / Node.js)
- nodejs獲取本機(jī)內(nèi)網(wǎng)和外網(wǎng)ip地址的實(shí)現(xiàn)代碼
- 詳解node HTTP請(qǐng)求客戶端 - Request
- nodejs socket服務(wù)端和客戶端簡(jiǎn)單通信功能
- Node.js中的http請(qǐng)求客戶端示例(request client)
- 使用node.js 獲取客戶端信息代碼分享
- nodejs socket實(shí)現(xiàn)的服務(wù)端和客戶端功能示例
- nodejs(officegen)+vue(axios)在客戶端導(dǎo)出word文檔的方法
- nodejs簡(jiǎn)單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能示例
- node.js中express模塊創(chuàng)建服務(wù)器和http模塊客戶端發(fā)請(qǐng)求
- 解決Node.js mysql客戶端不支持認(rèn)證協(xié)議引發(fā)的問(wèn)題
- node獲取客戶端ip功能簡(jiǎn)單示例
相關(guān)文章
關(guān)于npm install過(guò)程失敗的幾種處理方式
這篇文章主要介紹了關(guān)于npm install過(guò)程失敗的幾種處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06socket.io斷線重連的幾種場(chǎng)景及處理方法
Socket.IO是一個(gè)庫(kù),可用于在瀏覽器和服務(wù)器之間進(jìn)行實(shí)時(shí),雙向和基于事件的通信,下面這篇文章主要給大家介紹了關(guān)于socket.io斷線重連的幾種場(chǎng)景及處理方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03微信小程序搭載node.js服務(wù)器的簡(jiǎn)單教程
小程序是一種全新的連接用戶與服務(wù)的方式,它可以在微信內(nèi)被便捷地獲取和傳播,同時(shí)具有出色的使用體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于微信小程序搭載node.js服務(wù)器的簡(jiǎn)單教程,需要的朋友可以參考下2022-12-12node.js+jQuery實(shí)現(xiàn)用戶登錄注冊(cè)AJAX交互
本篇文章主要介紹了用Node.js當(dāng)作后臺(tái)、jQuery寫前臺(tái)AJAX代碼實(shí)現(xiàn)用戶登錄和注冊(cè)的功能的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04NPM配置私服構(gòu)建內(nèi)網(wǎng)中央倉(cāng)庫(kù)過(guò)程詳解
這篇文章主要為大家介紹了NPM配置私服構(gòu)建內(nèi)網(wǎng)中央倉(cāng)庫(kù)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Nodejs把接收?qǐng)D片base64格式保存為文件存儲(chǔ)到服務(wù)器上
這篇文章主要介紹了Nodejs把接收?qǐng)D片base64格式保存為文件存儲(chǔ)到服務(wù)器上,文中代碼較簡(jiǎn)短,需要的朋友可以參考下2018-09-09使用Fetch API執(zhí)行GraphQL查詢和變體問(wèn)題
這篇文章主要介紹了使用Fetch API執(zhí)行GraphQL查詢和變體問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04