首页 > 编程语言 >【NodeJs安全】探索

【NodeJs安全】探索

时间:2025-01-07 18:57:50浏览次数:1  
标签:req const 探索 NodeJs res app express 安全 download

免责声明

"本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"

一、NodeJS 基础

NodeJS是一个开源的、跨平台的运行时环境,有了它,开发人员可以使用 JavaScript 创建各种服务器端工具和应用程序。此运行时要用于浏览器上下文之外(即可以直接运行于计算机或服务器操作系统上)。

二、常见框架

Express 是最流行的 Node 框架,是许多其它流行 Node 框架的底层库。虽然 Express 本身是极简风格的,但是开发人员通过创建各类兼容的中间件包解决了几乎所有的 web 开发问题。这些库可以实现 cookie、会话、用户登录、URL 参数、POST 数据、安全头等功能。

特点:

为不同 URL 路径中使用不同 HTTP 动词的请求(路由)编写处理程序。

集成了「视图」渲染引擎,以便通过将数据插入模板来生成响应。

设置常见 Web 应用设置,比如用于连接的端口,以及渲染响应模板的位置。

在请求处理管道的任何位置添加额外的请求处理「中间件」。

三、Node 环境

3.1 基础环境

下载地址:

https://nodejs.org/en/

从 HelloWorld 程序开始

const http = require('http');
http.createServer((req, res)=>{
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end("Hello World\n");
}).listen(80);

3.2 Express 环境简介

安装:

npm install express

从 HelloWorld 程序开始

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

app.get('/hello', (req, res) => {
  res.send("Hello World");
});

app.listen(80, () => {
  console.log("listen on 80");
});

四、Express 及其组件

4.1 路由模块

路由的作用就是解析 URL,调用对应的控制器(的方法,并传递参数)。

客户端的请求是以 URL 的形式传递给服务器的。传统 WEB 开发中,URL 对应服务器上某个目录下的某个文件。MVC 开发则改变了这种对应关系,WEB 服务器会截获所有请求,不做资源存在性检查,直接转发给网站的路由程序。

路由器再调用相关的控制器。控制器调用相关的服务,并返回视图对象。路由器再从视图对象中提取生成好的网页代码返回给 Web 服务器,最终返回给客户端。

【举例】

download.js

const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  res.send('download page');
});

router.get('/docs', (req, res) => {
  res.send('download page docs');
});
module.exports = router;

main.js

const express = require('express');
const app = express();
const download = require(__dirname + "/download.js");

app.use('/download', download);
app.get('/', (req, res) => {
    res.send("Hello World");
});
app.get('/news', (req, res) => {
    res.send("news page");
});
app.listen(80, () => {
    console.log('listen on 80');
});

app.use 表示对所有路由,和所有方法都调用中间函数

app.get (’/’)表示对 get 方法开头的 URL 调用中间函数

app.use(’/download’) 表示对 /download 头的所有,调用中间函数。

4.2 中间件

中间件在 Express 应用中得到了广泛使用。大多数应用会使用第三方中间件来简化常见的 web 开发任务,比如 cookie、会话、用户身份验证、访问请求 POST 和 JSON 数据,日志记录、压缩 HTTP 响应等等。

一些中间件的引入顺序很重要(例如,如果会话中间件依赖于 cookie 中间件,则必须先添加 cookie 处理器)。绝大多数情况下要先调用中间件后设置路由,否则路由处理器将无法访问中间件的功能。morgan 是一个日志记录的中间件。

const express = require('express');
const app = express();
const download = require(__dirname + "/download.js");
const logger = require("morgan");
app.use(logger('dev'));

app.listen(80, () => {
    console.log('listen on 80');
});

app.use('/download', download);

app.get('/', (req, res) => {
    res.send("Hello World");
});
app.get('/news', (req, res) => {
    res.send("news page");
});

中间件和路由函数是按照声明顺序调用的

4.3 渲染

PUG 模板引擎是一款健壮、灵活、功能丰富的 HTML 模板引擎专门为 Node 平台开发。 PUG 是由 Jade 改名而来。

Pug 通过缩进(表示标签间的嵌套关系)的方式来编写代码的过程,在编译的过程中,不需要考虑标签是否闭合的问题。

pugDemo

const express = require('express');
const app = express();
const path = require("path");

app.listen(80, () => {
    console.log("listening on 80");
});

app.set("views", path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.get('/', function(req, res) {
    res.render('index', {title: 'Hello', message: 'hello world pug engine'})
})

views/index.pug

html
    head
        title=title
    body
        h1=message

五、 威胁分析

5.1 常见漏洞

代码执行命令执行XSSSQL 注入SSRF文件上传

nodejs 对一些经典 web 漏洞,有一定防护,有的漏洞在其他语言中不明显。但在 nodejs 中比较突出。

require 链劫持(软件投毒),正则表达式拒绝服务(ReDoS),不安全的包。

5.2 代码审计

1、 项目结构

2、 审计依赖

nsp 是检测包依赖的工具,被收购后,在 npm >= 6.0.0,使用如下指令:

npm audit
npm audit fix

3、 不安全的对象直接引用

function isAdmin(req, res, next) {
  if(req.user.role == "admin") // 检测账号用户是否是 admin
    return next();
  // 如果不是,报错
  res.redirect('/403');
}
app.get('/admin', isAdmin, function(req, res) {
  res.send('secret');
});

4、 敏感信息泄露

app.use(function(err, req, res, next) {
  res.status(500).send(err.stack);
})

5、 未经验证的重定向和转发

app.use('/redirect', function(req, res) {
  request(req.query.url, function(error, response, body){
    if(err) {
      return res.send(body);
    }
  })
})

六、常见问题

6.1 XSS

sudo docker pull registry.cn-shanghai.aliyuncs.com/yhskc/chatsys:latest
sudo docker run -d -p 0.0.0.0:32888:80 registry.cn-shanghai.aliyuncs.com/yhskc/chatsys

6.2 Pug XSS

练习一

采用了转义的方式进行输出,因此无法绕过

练习二

采用未转义的方式,因此直接采用常规 payload 即可

练习三

<script> 标签中,因此直接采用行内闭合后拼接的方式可以 XSS,payload:1;alert(1)

练习四

仍然是未转义模式,直接拼接即可

利用 JSFuck 绕过滤

[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()

原创 Vipersec SecretTeam安全团队

标签:req,const,探索,NodeJs,res,app,express,安全,download
From: https://www.cnblogs.com/o-O-oO/p/18658067

相关文章

  • 城市生命线安全管理:数据要素整合与场景应用实践
    城市生命线工程是确保城市正常运行和居民安全生活的关键基础设施,涉及供水、排水、燃气、电力等多个方面。随着信息技术的发展,特别是大数据、物联网、人工智能等技术的应用,城市生命线数据要素与场景应用的深度融合成为提升城市治理能力的重要途径。数据要素的重要性......
  • 网络安全协议详解
    引言网络安全协议是保护网络通信安全的核心技术之一,通过加密、认证、数据完整性校验等手段确保信息在传输过程中的保密性、完整性和真实性。本文将详解常见的网络安全协议,包括其基本原理、工作机制以及实际应用场景,为大家提供一个深入了解网络安全协议的指南。常见网络......
  • 探索智能驾驶的未来:运输车辆安全驾驶行为分析
    在当今快速发展的科技时代,智能驾驶技术正逐渐改变我们的出行方式。其中,运输车辆的安全驾驶行为分析成为了一个重要的研究领域。今天,我们就来探讨一下这一领域的最新进展和应用前景。一、智能驾驶技术的兴起智能驾驶技术的发展,离不开大数据、人工智能等前沿技术的推动。通过传......
  • Creo许可证安全策略与管理建议
    在工程设计领域,Creo软件以其卓越的性能和广泛的应用范围而备受青睐。然而,随着软件使用的普及,许可证安全问题也日益凸显。为了确保您的Creo许可证安全无虞,本文将为您详细介绍Creo许可证的安全策略与管理建议。一、Creo许可证安全策略的重要性保护知识产权:Creo许可证是企业的重要......
  • 03、MySQL安全管理和特性解析(DBA运维专用)
     03、MySQL安全管理和特性解析本节主要讲MySQL的安全管理、角色使用、特定场景下的数据库对象、各版本特性以及存储引擎目录 03、MySQL安全管理和特性解析1、用户和权限管理2、MySQL角色管理3、MySQL密码管理4、用户资源限制5、忘记root密码处理办法6、SQLMO......
  • Linux文件系统的安全保障---Overlayroot!
    `overlayroot` 是一种使用 OverlayFS 实现的功能,可将根文件系统挂载为只读,并通过一个临时的写层实现对文件系统的修改。这种方法非常适合嵌入式设备或需要保持系统文件完整性和安全性的场景。下文以 RK3568 平台为例,介绍制作 overlayroot 的详细步骤。​1. 制作精简文......
  • 未系安全带智能监测摄像机
    未系安全带智能监测摄像机在现代安全管理中发挥着至关重要的作用。这些先进设备不仅仅是简单的监视工具,更是通过整合高级技术来提升工作效率和安全性,特别是在需要高度警惕的作业环境中尤为突出。首先,这些智能监测摄像机配备了精准的视觉识别技术,能够实时监测工人是否正确佩戴安......
  • 实力上榜 | 蚁景科技入选《2024中国网络安全行业全景册(第七版)》
    2024年12月31日,FreeBuf咨询正式发布《CCSIP(ChinaCyberSecurityIndustryPanorama)2024中国网络安全行业全景册(第七版)》。本次全景册分为七大逻辑层、20个一级分类、110个二级分类,收录网络安全行业近300家厂商。  在此次发布的全景册中,蚁景科技凭借在网络安全人才培养、竞......
  • 学霸带你游戏化探索 Python 类与对象
    面向对象编程:实践与应用在现代编程中,面向对象编程(OOP)成为了主流方法论,尤其是在游戏开发领域,OOP的优势得到了广泛应用。从《我的世界》到《巫师3》,面向对象的设计模式使得开发者能够更高效地组织代码、管理复杂的游戏世界及其动态元素。通过类、对象以及继承等概念,程序员可以......
  • AppDomainManager注入是一种针对.NET应用程序的高级攻击技术,攻击者通过操控AppDomain
    什么是APPDomainManager注入?APPDomainManager注入通常涉及到利用**应用程序域(AppDomain)**来执行恶意操作,特别是在.NET环境下。要理解这个概念,我们需要了解几个关键术语:AppDomain:在.NET应用程序中,AppDomain是一个隔离的执行环境,它允许多个应用程序或应用程序的不同部分在同一进......