使用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  !item); }

登录后复制

三方包推荐

也可以使用 cryptiles 这个 npm 模块来解决这个问题

import cryptiles from 'cryptiles';......return cryptiles.fixedTimeCimparison(passwordFromDb, passwordReceived);

登录后复制

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

NodeJS父进程与子进程资源共享原理与实现方法

vue中实现图片和文件上传的示例代码

vue axios 表单提交上传图片的实例

以上就是使用node应用中timing-attack存在哪些安全漏洞的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2750403.html

(0)
上一篇 2025年3月8日 05:35:34
下一篇 2025年3月8日 05:35:42

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎样利用node做出可读流动模式

    这次给大家带来怎样利用node做出可读流动模式,利用node做出可读流动模式的注意事项有哪些,下面就是实战案例,一起来看一下。 node的可读流基于事件 可读流之流动模式,这种流动模式会有一个”开关”,每次当&#82…

    2025年3月8日
    200
  • 使用node.js如何创建子进程(详细教程)

    之前看多进程这一章节时发现这块东西挺多,写process模块的时候也有提到,今天下午午休醒来静下心来好好的看了一遍,发现也不是太难理解。所以下面这篇文章主要给大家介绍了关于利用node.js如何创建子进程的相关资料,需要的朋友可以参考下。 …

    编程技术 2025年3月8日
    200
  • 如何在NodeJS项目中使用ES6

    本篇文章主要介绍了详解如何在nodejs项目中优雅的使用es6,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 NodeJs最近的版本都开始支持ES6(ES2015)的新特性了,设置已经支持了async/await这样的更高级的特性。只…

    编程技术 2025年3月8日
    200
  • 关于nodejs+mongodb+vue前后台配置ueditor的代码

    本篇文章主要介绍了nodejs+mongodb+vue前后台配置ueditor的示例代码,内容挺不错的,现在分享给大家,也给大家做个参考。 笔者在做一个个人博客项目的时候需要一个富文本框输入组件与后台进行交互,但是官方配置里面没有关于nod…

    2025年3月8日
    200
  • NodeJs form-data格式传输文件的方法

    这篇文章主要介绍了nodejs form-data格式传输文件的方法,内容挺不错的,现在分享给大家,也给大家做个参考。 本文介绍了Node Js 使用KOA处理form-data格式传输过来的文件,分享给大家。具体如下: 使用koa有一段时…

    编程技术 2025年3月8日
    200
  • 关于node.js中fs.stat与fs.fstat的区别

    fs.stat和fs.fstat他们都是用来获取文件的状态信息,下面这篇文章主要给大家介绍了关于node.js中fs.stat与fs.fstat区别的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。…

    编程技术 2025年3月8日
    200
  • node-mysql中防止SQL注入的方法

    大家都知道sql注入对于网站或者服务器来讲都是一个非常危险的问题,如果这一方面没处理好的话网站可能随时给注入了,所以这篇文章就给大家总结了node-mysql中防止sql注入的几种常用做法,有需要的朋友们可以参考借鉴。 SQL注入简介 SQ…

    编程技术 2025年3月8日
    200
  • nodejs用ztree实现在两个div之间移动

    本文介绍了“node在两个p之间移动,用ztree实现”的方法,需要的朋友可以参考一下 实现思路: 1、ztree中节点是通过一个json的Array作为数据源、,所以直接操作json字符串,然后转为json对象数组。 2、然后用新构成的j…

    编程技术 2025年3月8日
    200
  • 关于Node.js连接postgreSQL并进行数据操作的介绍

    这篇文章就给大家介绍了关于node.js如何连接postgresql数据库,并进行数据操作的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。 自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选 前言…

    编程技术 2025年3月8日
    200
  • 如何用node批量压缩html页面?

    本篇文章给大家带来的内容是关于如何用node批量压缩html页面,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 最近在写一个用了layui的后台管理系统。因为某些原因,html,css,js都写在。html里,并且没有用到…

    2025年3月8日
    200

发表回复

登录后才能评论