使用node應用程式中timing-attack存在哪些安全漏洞
這篇文章給大家通過原理的原因分析了node應用的timing-attack安全漏洞問題,有興趣的朋友閱讀參考下。
前言
假如你在專案中遇過 eslint 報錯 Potential timing attack ,不可忽視!這是一個涉及安全的問題:時序攻擊。
eslint 報錯原因
首先eslint引入了一個叫做eslint-plugin-security的插件,這個插件有助於識別出潛在的安全問題,但同時也會產生誤報的問題,附上插件源碼位址。
var keywords = '((' + [ 'password', 'secret', 'api', 'apiKey', 'token', 'auth', 'pass', 'hash' ].join(')|(') + '))'; var re = new RegExp('^' + keywords + '$', 'im'); function containsKeyword (node) { if (node.type === 'Identifier') { if (re.test(node.name)) return true; } return } if (node.test.operator === '==' || node.test.operator === '===' || node.test.operator === '!=' || node.test.operator === '!==') { // 在这里 console 出错误 }
首先這個外掛程式會判斷本次的運算子是否為 ==、===、! =、! ==其中一種,其次檢查標識符(字段名)是否包含特殊字串password、secret、api、apiKey、token、auth、pass、hash,如果同時滿足二者情況,eslint 就會編譯報錯Potential timing attack 。
攻擊定義
timing attack:時序攻擊,屬於側通道攻擊/ 旁路攻擊,側通道攻擊指的是利用通道外的信息,例如加解密的資料、資料比較時間、密文傳輸的流量和途徑進行攻擊的方式,相當於是「旁敲側擊」。
攻擊點
先講講js比較兩個字串大小的原理:
判斷字串長度是否為0,如果為0,就可以直接比較出結果;反之,進入到第二步。
字串是由一個字元組成,透過每個字元的charCode進行比較。
在第二步驟中,只要出現一個字元不同,就 return false,剩餘的字元就不再做比較。
單一字元的比較是很快的,攻擊者可以細化測量時間精度到微秒,透過回應時間的差異推導出是從哪一個字元開始不用的,這樣一次次實驗或用Python 寫個腳本去跑,就可以試出正確的密碼,密碼破解的難度也降低了不少。
容易受攻擊的寫法
if (user.password === password) { return { state: true }; // 登录成功 }
#防禦措施
每次不同的輸入都會造成處理時間的差異。為了防止它,我們需要使字串比較花費相同的時間量,無論輸入的密碼是什麼。
不容易受攻擊的寫法
系統中每一個密碼的長度是固定的,每次比較密碼是否相同時,使用正確密碼的長度作為比較次數,使用異或比較每一個字符的Unicode 編碼是否相等,並且把每一次的比較結果存放到一個數組中,最後再判斷數組的每一個元素是否為0(為0 表示兩個字元相同)。
// psdReceived 为用户输入密码; // psdDb 为系统中存储的正确用户密码 const correctUser = (psdDb, psdReceived) => { const state = []; for (let i = 0; i < psdDb.length; ++i) { if (!psdReceived[i]) { state.push(false); } else { state.push(psdReceived.charCodeAt(i) ^ psdDb.charCodeAt(i)); } } return state.length !== 0 && state.every(item => !item); }
三方包推薦
也可以使用 cryptiles 這個 npm 模組來解決這個問題
import cryptiles from 'cryptiles'; ...... return cryptiles.fixedTimeCimparison(passwordFromDb, passwordReceived);
上面是我整理給大家的,希望今後會對大家有幫助。
相關文章:
#以上是使用node應用程式中timing-attack存在哪些安全漏洞的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

nvm刪除node的方法:1、下載「nvm-setup.zip」並將其安裝在C碟;2、設定環境變量,並透過「nvm -v」指令查看版本號;3、使用「nvm install」指令安裝node;4、透過「nvm uninstall」指令刪除已安裝的node即可。

怎麼處理文件上傳?以下這篇文章為大家介紹一下node專案中如何使用express來處理文件的上傳,希望對大家有幫助!

這段時間在開發一個騰訊文檔全品類通用的HTML 動態服務,為了方便各品類接入的生成與部署,也順應上雲的趨勢,考慮使用Docker 的方式來固定服務內容,統一進行製品版本的管理。這篇文章就將我在服務 Docker 化的過程中累積起來的優化經驗分享出來,供大家參考。

PiNetwork節點詳解及安裝指南本文將詳細介紹PiNetwork生態系統中的關鍵角色——Pi節點,並提供安裝和配置的完整步驟。 Pi節點在PiNetwork區塊鏈測試網推出後,成為眾多先鋒積極參與測試的重要環節,為即將到來的主網發布做準備。如果您還不了解PiNetwork,請參考Pi幣是什麼?上市價格多少? Pi用途、挖礦及安全性分析。什麼是PiNetwork? PiNetwork項目始於2019年,擁有其專屬加密貨幣Pi幣。該項目旨在創建一個人人可參與

這篇文章跟大家分享Node的進程管理工具“pm2”,聊聊為什麼需要pm2、安裝和使用pm2的方法,希望對大家有幫助!

npm node gyp失敗是因為“node-gyp.js”跟“Node.js”版本不匹配,其解決辦法:1、透過“npm cache clean -f”清除node快取;2、透過“npm install -g n”安裝n模組;3、透過「n v12.21.0」指令安裝「node v12.21.0」版本即可。

如何用pkg打包nodejs可執行檔?以下這篇文章跟大家介紹一下使用pkg將Node專案打包為執行檔的方法,希望對大家有幫助!

身份驗證是任何網路應用程式中最重要的部分之一。本教程討論基於令牌的身份驗證系統以及它們與傳統登入系統的差異。在本教程結束時,您將看到一個用Angular和Node.js編寫的完整工作演示。傳統身份驗證系統在繼續基於令牌的身份驗證系統之前,讓我們先來看看傳統的身份驗證系統。使用者在登入表單中提供使用者名稱和密碼,然後點擊登入。發出請求後,透過查詢資料庫在後端驗證使用者。如果請求有效,則使用從資料庫中獲取的使用者資訊建立會話,然後在回應頭中傳回會話訊息,以便將會話ID儲存在瀏覽器中。提供用於存取應用程式中受
