当前位置: 首页 > news >正文

NoSQL注入攻击如何防范

一些常见的 MongoDB 中的 NoSQL 注入攻击如下所示。

 1. 基本的 NoSQL 注入攻击
#### 示例
假设有以下代码,用于查找特定用户:
```javascript
let username = req.body.username; // 假设来自用户输入
db.collection('users').find({ username: username });
```
如果攻击者输入 `username` 为 `{"$ne": null}`,这样就会找到所有用户,因为 `$ne` 操作符代表“不是”条件。

这样就有可能查出所有的用户。

以下在订单表中,本来想查某个用户的订单,就有可能被人查所有的用户订单。

db.orders.find({ name: {"$ne": null} })

如何有效的防止,NoSQL注入攻击。 以下是一个比较好的方案。

使用Java ORM Bee.

ORM Bee  互联网新时代的Java ORM框架,支持Sharding;JDBC,Android,HarmonyOS;支持多种关系型数据库,还支持NoSQL的Cassandra,Mongodb等;更快、更简单、更自动,开发速度快,运行快,更智能!

以下直接上源码。

1. pom.xml

		<dependency>
			<groupId>org.teasoft</groupId>
			<artifactId>bee-all</artifactId>
			<version>${bee.version}</version>
		</dependency>

//bee.version 可以是: 2.4.2

   <dependency>
		<groupId>org.mongodb</groupId>
		<artifactId>mongodb-driver-sync</artifactId>
		<version>4.6.1</version>
		<scope>provided</scope>
	</dependency> 

2. 添加数据库配置(bee.properties)

#bee.db.dbName=MongoDB
bee.db.url = mongodb://localhost:27017/bee/
bee.db.username = 
bee.db.password = 

3. 写一个Java类测试

package org.teasoft.exam.bee.mongodb;

import java.util.List;

import org.teasoft.bee.osql.api.SuidRich;
import org.teasoft.exam.bee.mongodb.entity.Orders;
import org.teasoft.exam.comm.Printer;
import org.teasoft.honey.osql.shortcut.BF;

public class MongodbBugTest {
	public static void main(String[] args) {
		test();
	}

	public static void test() {
		SuidRich suidRich = BF.getSuidRich();
		Orders orders=new Orders();
//		orders.setName("mongodb6");
		String str="{\"$ne\": null}";
		System.out.println(str);
		orders.setName(str);
		
		List<Orders> list;
		list=suidRich.select(orders);
		System.err.println(list.size());
		Printer.printList(list);
		
	}
}

4. 打印日志

[INFO] [Bee] db.orders.find({"name": "{\"$ne\": null}"})
[INFO] [Bee]  | <--  select rows: 0

可以看到,没有查询到记录。成功防止注入。

源码地址:

https://github.com/automvc/bee

https://gitee.com/automvc/bee

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

相关文章:

  • 什么是完全前向保密(PFS)?
  • Redis底层数据结构
  • 【行业解决方案篇五】【DeepSeek智慧城市:交通流量预测系统】
  • 《解锁光量子制备:开启量子科技新时代》:此文为AI自动生成
  • C++ 继承,多态
  • 原生input修改input:-internal-autofill-selected自动填入携带的背景色
  • 计算机毕业设计SpringBoot+Vue.jst0甘肃非物质文化网站(源码+LW文档+PPT+讲解)
  • DevEco Studio常用快捷键以及如何跟AndroidStudio的保持同步
  • 【llm落地】从零到一,用DeepSeek打造智能BI工具:自然语言驱动数据洞察
  • 数据结构:基数排序(c++实现)
  • 树形DP(树形背包+换根DP)
  • 交流异步电动机PI双闭环SVPWM矢量控制Simulink
  • 【Redis原理】底层数据结构 五种数据类型
  • 分布式服务监控
  • 使用大语言模型对接OA系统,实现会议室预定功能
  • 【SpringBoot】✈️本地集成支付宝支付功能
  • Redhat及其衍生系统安装python
  • 如何使用wolfsll库生成证书?
  • Xcode如何高效的一键重命名某个关键字
  • SOME/IP--协议英文原文讲解12(完结)
  • 【Git版本控制器】第四弹——分支管理,合并冲突,--no-ff,git stash
  • 大语言模型(LLM)提示词(Prompt)高阶撰写指南
  • 《论面向对象的建模及应用》审题技巧 - 系统架构设计师
  • Onvif协议NVR开发方案指南
  • SQL笔记#数据更新
  • [AI] [ComfyUI]理解ComyUI的基本原理及其图像生成技术
  • 深度学习技术全景图:从基础架构到工业落地的超级进化指南
  • flex布局自定义一行几栏,靠左对齐===grid布局
  • 三维空间中直线的多种表示方法
  • Python 基本语法的详细解释