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

时间:2015-01-16 22:53:55

标签: spring sql-injection spring-data-mongodb nosql

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

我使用的是使用MongoOperations对象的Dao模式。

由于我在RDBMS和JPA方面有很多经验,所以我们通常使用setParameter来处理转义并避免SQL注入。

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

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

谢谢大家。

2 个答案:

答案 0 :(得分:1)

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

  

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

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

基本是验证您的请求是否正确转义y或更多。

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

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

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

答案 1 :(得分:0)

在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);
}