最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析node應(yīng)用的timing-attack安全漏洞

 更新時(shí)間:2018年02月28日 14:05:03   投稿:laozhang  
本篇文章給大家通過(guò)原理的原因分析了node應(yīng)用的timing-attack安全漏洞問(wèn)題,有興趣的朋友閱讀參考下。

前言

假如你在項(xiàng)目中遇到過(guò) eslint 報(bào)錯(cuò) Potential timing attack ,不可忽視!這是一個(gè)涉及到安全的問(wèn)題:時(shí)序攻擊。
eslint 報(bào)錯(cuò)原因

首先eslint引入了一個(gè)叫做eslint-plugin-security的插件,這個(gè)插件有助于識(shí)別出潛在的安全問(wèn)題,但同時(shí)也會(huì)產(chǎn)生誤報(bào)的問(wèn)題,附上插件 源碼地址

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 出錯(cuò)誤
 }

首先這個(gè)插件會(huì)判斷本次的運(yùn)算符是否為 ==、===、!=、!==其中一種,其次檢查標(biāo)識(shí)符(字段名)是否包含特殊字符串password、secret、api、apiKey、token、auth、pass、hash,如果同時(shí)滿(mǎn)足二者情況,eslint 就會(huì)編譯報(bào)錯(cuò) Potential timing attack。

攻擊定義

timing attack:時(shí)序攻擊,屬于側(cè)信道攻擊 / 旁路攻擊,側(cè)信道攻擊指的是利用信道外的信息,比如加解密的數(shù)據(jù)、數(shù)據(jù)比較時(shí)間、密文傳輸?shù)牧髁亢屯緩竭M(jìn)行攻擊的方式,相當(dāng)于是“旁敲側(cè)擊”。

攻擊點(diǎn)

首先講講js比較兩個(gè)字符串大小的原理:

  • 判斷字符串長(zhǎng)度是否為0,如果為0,就可以直接比較出結(jié)果;反之,進(jìn)入到第二步。
  • 字符串是由一個(gè)個(gè)字符組成,通過(guò)每個(gè)字符的charCode進(jìn)行比較。
  • 在第二步中,只要出現(xiàn)一個(gè)字符不同,就 return false,剩余的字符不再做比較。

單個(gè)字符的比較是很快的,攻擊者可以細(xì)化測(cè)量時(shí)間精度到微秒,通過(guò)響應(yīng)時(shí)間的差異推算出是從哪一個(gè)字符開(kāi)始不用的,這樣一次次實(shí)驗(yàn)或者用 Python 寫(xiě)個(gè)腳本去跑,就可以試出正確的密碼,密碼破解的難度也降低了不少。

容易受攻擊的寫(xiě)法

if (user.password === password) {
  return { state: true }; // 登錄成功
 }

防御措施

每次不同的輸入會(huì)造成處理時(shí)間的不同。為了防止它,我們需要使字符串比較花費(fèi)相同的時(shí)間量,無(wú)論輸入的密碼是什么。
不容易受攻擊的寫(xiě)法

系統(tǒng)中每一個(gè)密碼的長(zhǎng)度是固定的,每次比較密碼是否相同時(shí),使用正確密碼的長(zhǎng)度作為比較次數(shù),使用異或比較每一個(gè)字符的 Unicode 編碼是否相等,并且把每一次的比較結(jié)果存放到一個(gè)數(shù)組中,最后再判斷數(shù)組的每一個(gè)元素是否為0(為 0 表示兩個(gè)字符相同)。

 // psdReceived 為用戶(hù)輸入密碼;
 // psdDb 為系統(tǒng)中存儲(chǔ)的正確用戶(hù)密碼
 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 這個(gè) npm 模塊來(lái)解決這個(gè)問(wèn)題

import cryptiles from 'cryptiles';

......
return cryptiles.fixedTimeCimparison(passwordFromDb, passwordReceived);

相關(guān)文章

  • nodejs結(jié)合Socket.IO實(shí)現(xiàn)websocket即時(shí)通訊

    nodejs結(jié)合Socket.IO實(shí)現(xiàn)websocket即時(shí)通訊

    websocket 是一種網(wǎng)絡(luò)通信協(xié)議,一般用來(lái)進(jìn)行實(shí)時(shí)通信會(huì)使用到。本文主要介紹了nodejs結(jié)合Socket.IO實(shí)現(xiàn)websocket即時(shí)通訊 ,感興趣的可以了解一下
    2021-11-11
  • 使用Node.js搭建Vue項(xiàng)目的詳細(xì)步驟

    使用Node.js搭建Vue項(xiàng)目的詳細(xì)步驟

    Vue.js 是一款流行的 JavaScript 框架,而 Node.js 提供了一個(gè)強(qiáng)大的運(yùn)行環(huán)境,兩者的結(jié)合使得開(kāi)發(fā)者可以輕松構(gòu)建現(xiàn)代化的前端項(xiàng)目,本文將介紹如何使用 Node.js 搭建一個(gè)基本的 Vue 項(xiàng)目,需要的朋友可以參考下
    2023-12-12
  • 在Node.js應(yīng)用中使用Redis的方法簡(jiǎn)介

    在Node.js應(yīng)用中使用Redis的方法簡(jiǎn)介

    這篇文章主要介紹了在Node.js應(yīng)用中使用Redis的方法,最簡(jiǎn)單的數(shù)據(jù)讀寫(xiě)操作相關(guān),需要的朋友可以參考下
    2015-06-06
  • 如何刪除所有node_modules和package-lock配置文件

    如何刪除所有node_modules和package-lock配置文件

    這篇文章主要介紹了如何刪除所有node_modules和package-lock配置文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Node.js中的HTTP請(qǐng)求與響應(yīng)詳解

    Node.js中的HTTP請(qǐng)求與響應(yīng)詳解

    本文詳細(xì)講解了Node.js中的HTTP請(qǐng)求與響應(yīng),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Node.js的包詳細(xì)介紹

    Node.js的包詳細(xì)介紹

    這篇文章主要介紹了Node.js的包詳細(xì)介紹,Node.js的包是一個(gè)目錄,其中包含JSON格式的包說(shuō)明文件package.json,Node.js的包基本遵循CommonJS規(guī)范,需要的朋友可以參考下
    2015-01-01
  • Node.js實(shí)現(xiàn)鏈?zhǔn)交卣{(diào)

    Node.js實(shí)現(xiàn)鏈?zhǔn)交卣{(diào)

    這篇文章介紹了Node.js實(shí)現(xiàn)鏈?zhǔn)交卣{(diào)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • node.js cookie-parser之parser.js

    node.js cookie-parser之parser.js

    這篇文章主要介紹node.js cookie-parser之parser.js,講解的比較詳細(xì),需要的朋友可以參考下。
    2016-06-06
  • 詳解nodejs中的異步迭代器

    詳解nodejs中的異步迭代器

    這篇文章主要介紹了nodejs中的異步迭代器,對(duì)異步感興趣的同學(xué),可以參考下
    2021-05-05
  • nodejs文件夾深層復(fù)制功能

    nodejs文件夾深層復(fù)制功能

    這篇文章主要介紹了nodejs文件夾深層復(fù)制功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

营口市| 平度市| 浮梁县| 宝山区| 青铜峡市| 广东省| 习水县| 阿城市| 乌苏市| 平阳县| 新丰县| 龙里县| 蕉岭县| 德钦县| 武隆县| 陕西省| 红原县| 平江县| 扶绥县| 贵港市| 浙江省| 新和县| 柯坪县| 灵川县| 鄯善县| 桑植县| 化隆| 理塘县| 钦州市| 绥滨县| 丹寨县| 政和县| 霍州市| 筠连县| 高密市| 洛扎县| 建平县| 阿勒泰市| 察隅县| 兰坪| 石嘴山市|