我是一个新手 - 使用带有MongoDB的spring。
我使用的是使用MongoOperations对象的Dao模式。
由于我在RDBMS和JPA方面有很多经验,所以我们通常使用setParameter来处理转义并避免SQL注入。
我想知道MongoDB春天是否有这样的想法。我找不到它,但我可能会遗漏一些东西。我不得不说我仍然不确定使用Mongo是否存在SQL注入风险。
另外,有没有办法在MongoDB中创建命名查询?
谢谢大家。
答案 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);
}