NodeJS操作符空格漏洞

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得 JavaScript 可以脱离浏览器在服务器端运行。Node.js 利用事件驱动、非阻塞 I/O 模型等技术提高了性能,从而在开发领域得到广泛应用,比如Web服务应用(尤其是非阻塞的能力在I/O密集型应用上的应用),微服务架构的独立服务和RESTful API的开发,甚至是基于Electron的桌面应用程序也采用了NodeJS。

多元的应用让JavaScript语言堪比世界上最好的开发语言PHP。

作为开发语言,NodeJS在开发的应用中也会存在诸多其他与语言弱相关的安全漏洞,其类型包括功能实现类、安全功能类以及环境配置类。其中,功能实现类又包含常见的安全漏洞类型,包括命令执行(使用eval()或require()引入)、序列化漏洞、文件上传等等,以及NodeJS特有的供应链安全类漏洞,比如恶意的npm包的引入。

 除此之外,还有一种是NodeJS语法本身特有的漏洞,即操作符空格漏洞。比如下方的示例代码:

const session = require('express-session');const express = require('express');const app = express();

app.get('/secret', (req, res, next) => {    if(req.session.guestǃ=true) {        res.send("secret_string");    } else {       res.send("Not available to guests");    }})

读到这里可以先暂停,仔细探究上述代码中的安全漏洞所在。这段代码曾经被我们作为多次招聘的题目,但遗憾的是没有人能够最终识别到正确的漏洞位置。

答案揭晓:

漏洞位置在于上述代码中的这行代码:

if(req.session.guestǃ=true) {

如果乍一看不太理解,我们可以先看理解下漏洞原理。

在这行代码中,req.session.guest!=true没有留空格,导致req.session的对象guest!是赋值操作,判断语句始终为真。

图片

漏洞原理非常简单,理解之后便很容易可以找到对应的修复方法,即采用强类型的操作符来做判断。

图片

许多复杂的安全漏洞也如上述示例,如魔术一般,在揭示谜底之前显得尤为惊人和壮观,但了解谜底、恍然大悟之后,之后每每遇见同类手法便又显得索然无味。但与魔术不同的是,这样的“谜底”可以帮助开发人员和安全人员一次次避免可能导致的安全风险或安全漏洞。

 

作者:repoog

2024年4月22日    

洞源实验室 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/563910.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

社区奶柜:您门前的新鲜便利店

社区奶柜:您门前的新鲜便利店 在快节奏的现代生活中,社区奶柜应运而生,为城市居民提供了极大的便利。这些位于住宅区的自助售卖设备,24小时提供新鲜的乳制品,让您的日常生活更加简单方便。 社区奶柜不仅能够确保提供…

前端代码常见的安全缺陷(一)

目录 1、使用不安全的target blank 问题描述: 修复建议: 2、Javascript 代码劫持 问题描述: 修复建议: 示例: 3、跨站请求伪造 问题描述: 修复建议: 4、遗留的调试代码 问题描述&am…

uniapp:小白1分钟学会使用webSocket(可无脑复制)

uni.connectSocket() uni.$emit页面通信 项目中使用uni.connectSocket()创建webSocket的总结,代码可无脑复制,直接使用。 1、main.js 引入vuex import store from ./store; Vue.prototype.$store store;vuex中封装webSocket 2、vuex的:index…

快速排序题目SelectK问题(力扣75.颜色分类、力扣215.数组中的第K个最大元素、面试题17.14最小K个数)

力扣75.颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sor…

C语言(二维数组)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏,据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后,在1975年传入美国,1976年leslieH.Autl博士甚至还出版了一本名为The…

狗都不学系列——虚拟机的基本使用

前言 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 简单来讲就是我们可以通过虚拟机来安装各种不同的操作系统进行体验。 这次主…

SQL约束

文章目录 约束约束的分类:按照约束的作用效果不同唯一约束主键约束外键约束检查约束非空约束默认值约束 按照是否跟随列和字段属性来创建约束行级约束表级约束 创建约束创建唯一约束创建完表之后创建唯一约束创建表的同时创建唯一约束行级约束表级约束 创建主键约束…

记录一下hive启动metestore服务时报错

【背景说明】 之前hadoop有问题,把hadoop和MySQL删了重装,hive没有动,然后启hive的metastore服务的时候,显示找不到metastore数据库 【报错】 Caused by: java.lang.reflect.InvocationTargetExceptionat sun.reflect.Generated…

完成学校官网页面制作

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>教务系统</title> <style> .wap{ margin:0 auto; width:955px; } .top{ height:150px; padding-left:85px; …

内旋风铣也挺有意思,不够还没搞透

内旋风铣&#xff0c;这一术语在机械制造业中并不陌生&#xff0c;它代表着一种高效且精确的加工方法。这一技术的名称“内旋风铣”便揭示了其两大核心特点&#xff1a;一是“内”&#xff0c;指的是在工件内部进行加工&#xff0c;通常涉及到难以触及的复杂曲面&#xff1b;二…

FebHost:CC域名商业和非商业使用的区别

在当今互联网的世界中&#xff0c;域名的选择不仅关乎一个网站的在线身份&#xff0c;更与其背后的商业策略紧密相连。.cc 顶级域&#xff08;TLD&#xff09;作为众多选择之一&#xff0c;其使用方式可分为商业和非商业两大类。 商业用途&#xff1a;当提及.cc域名的商业用途…

Windows安装ElasticsSearch详细指南(亲测)

一、安装jdk ElasticSearch是基于lucence开发的&#xff0c;也就是运行需要java jdk支持。所以要先安装JAVA环境。 由于ElasticSearch 5.x 往后依赖于JDK 1.8的&#xff0c;所以现在我们下载JDK 1.8或者更高版本。 下载JDK1.8,下载完成后安装。 二、安装ElasticSearch 1.El…

【UE5.1 C++】VS2022下载安装

目录 步骤 一、Visual Studio下载安装 二、Visual Studio Integration Tool插件安装 先看一下UE和VS的兼容性 &#xff08;虚幻5&#xff1a;为虚幻引擎C项目设置Visual Studio开发环境&#xff09; &#xff08;虚幻4&#xff1a;设置虚幻引擎的Visual Studio&#xff0…

OJ:寻找独一无二的数

目录 &#x1f3dd;1.问题描述&#xff1a; &#x1f3dd;2.分析问题&#xff1a; &#x1f3dd;3.最终代码&#xff1a; &#x1f3dd;1.问题描述&#xff1a; &#x1f3dd;2.分析问题&#xff1a; 先看看下面的代码的结果是多少&#xff1f; #include<stdio.h> in…

宝塔面板国际版aaPanel 精简版安装

宝塔面板国际版aaPanel 精简版安装 很多人都知道宝塔面板&#xff0c;但不知道宝塔面板还有英文版&#xff0c;宝塔面板英文版不是单纯的宝塔面板的翻译&#xff0c;而是根据老外的使用习惯及国外的网络环境做了一定的优化&#xff0c; 比如&#xff1a;去掉了手机号验证、去…

论文笔记;LargeST: A Benchmark Dataset for Large-ScaleTraffic Forecasting

Neurips 2023 1 intro 目前交通预测数据集的问题 规模小&#xff0c;通常只包含数百个节点和边在时间覆盖范围上存在严重不足&#xff0c;通常不超过6个月单个节点的元数据不足 ——> 提出了一个新的基准数据集LargeST 广泛的图大小&#xff0c;包括加利福尼亚州的8,600个…

向量的求导

参考&#xff1a; 向量的求导 向量内积求导

基于Vue3的openlayers地图显示

基于Vue3的openlayers地图显示 &#xff08;1&#xff09;接着上一篇将讲&#xff0c;在components文件夹下创建BaseMap.vue文件夹 &#xff08;2&#xff09;在App.vue文件里面引入BaseMap.vue文件&#xff0c;如下代码所示&#xff1a; &#xff08;3&#xff09;在BaseMa…

Rust异步编程简介

Rust异步编程简介 计算机已经尽可能快了。加快程序速度的一种方法是并行或并发执行操作。这两个术语之间有细微的区别。并行执行意味着我们同时在两个不同的 CPU 上执行两个不同的任务。并发执行意味着单个 CPU 通过交错执行这些任务&#xff0c;同时在多个任务上取得进展。 R…