【问题标题】:Is Criteria in Spring Data Mongo db injection safe?Spring Data Mongo db 注入中的标准是否安全?
【发布时间】:2019-10-24 04:35:03
【问题描述】:

我想公开一个 api,允许查询另一个组件的数据,该数据在 mongodb 中。与此一致,该 api 将具有包含字段名称和值的参数。

如何防止 ff 的 NoSQL 注入:

   Criteria.where(dbFieldName).is(name);
   dynamicQuery.addCriteria(nameCriteria);

【问题讨论】:

    标签: spring security spring-security spring-data spring-data-mongodb


    【解决方案1】:

    MongoDB 中不存在 SQL 注入这种东西,因为 Mongo 根本不使用 SQL 语言。

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

    public interface EmployeeRepository extends MongoRepository<Employee, String>
    
      @Query(value="{ 'firstname' : ?0 }", fields="{ 'firstname' : 1, 'lastname' : 1}")
      List<Employee> findByEmployeeFirstName(String firstname);
    }
    

    如果您不这样做并且仅使用参数化/命名查询,那么您是安全的。

    只有在这样的 SQL/JPQL 字符串中内联用户控制的变量时才有可能

    String sql = "SELECT u FROM Employee u WHERE id=" + id
    

    【讨论】:

    • 使用 Criteria 对象是在 Spring Data MongoDB 中构建自定义查询的另一种方式。在示例代码中,我问如果我传递可能来自用户的 name 变量,Criteria obj 是否有一些机制来防止任何 NoSQL 注入。
    • 对不起,我的意思是 dbFieldName 变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2018-07-29
    相关资源
    最近更新 更多