spring for mongodb转义参数以避免SQL注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring for mongodb转义参数以避免SQL注入相关的知识,希望对你有一定的参考价值。

我是一个新手 - 使用带有MongoDB的spring。

我正在使用一个使用MongoOperations对象的Dao模式。

由于我在RDBMS和JPA方面有很多经验,我们通常使用setParameter,它也会考虑转义和避免SQL注入。

我想知道MongoDB春天是否有这样的想法。我找不到它,但我可能会遗漏一些东西。我不得不说我仍然不确定使用Mongo是否存在SQL注入风险。

另外,有没有办法在MongoDB中创建命名查询?

谢谢你们。

答案

有一些非常类似于SQL注入的东西是NOSQL注入。 特殊字符不同但概念是相同的:用户可以控制/修改/破坏请求。

然而,即使这些数据库不使用传统的SQL语法,它们仍然可能容易受到注入攻击。因为这些NoSQL注入攻击可以在过程语言中执行,而不是在声明性SQL语言中执行,所以潜在的影响比传统的SQL注入更大

有一种方法可以验证,here is an OWASP page可以帮助您测试。

基本是验证您的请求是否正确地逃脱了' " ; { }以及更多。

似乎spring数据mongodb正确地逃脱了那些,但我不知道它是否完全安全。

至于命名查询,我认为this answer是正确的,它们不存在,但如果你有一个存储库,你仍然有一个@Query注释。

而且因为您使用自定义存储库并不意味着您也不能使用存储库接口,Spring数据允许您在不实现它的情况下实现repostiroy,see here

另一答案

Mongo中没有SQL注入这样的东西,因为Mongo根本不使用SQL语言。

Spring Data MongoDB中没有命名查询的概念,而是使用@Query注释您的存储库方法:

public interface PersonRepository extends MongoRepository<Person, String>

  @Query(value="{ 'firstname' : ?0 }", fields="{ 'firstname' : 1, 'lastname' : 1}")
  List<Person> findByThePersonsFirstname(String firstname);
}

以上是关于spring for mongodb转义参数以避免SQL注入的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Spring Security 以避免 405 Method Not Allowed for PUT request from Angular?

JavaScript 函数参数中的单引号转义

如何避免使用 Spring-Boot 下载嵌入式 MongoDb

如何在spring数据mongodb中聚合一个嵌套对象并避免PropertyReferenceException?

for 循环内的 async.waterfall 转义 for 循环

Grafana:通过转义 $ 避免变量插值