我想公开一个api,它允许查询mongodb中另一个组件的数据。与此相符,该api将具有包含字段名称和值的参数。
如何防止ff进行NoSQL注入:
Criteria.where(dbFieldName).is(name);
dynamicQuery.addCriteria(nameCriteria);
答案 0 :(得分:-1)
由于Mongo根本不使用SQL语言,因此在MongoDB中没有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