Безопасен ли критерий в Spring Data Mongo db для инъекций? - PullRequest
0 голосов
/ 09 июня 2019

Я хотел бы представить API, который позволяет возможность запрашивать данные другого компонента, который находится в mongodb.В соответствии с этим, этот API будет иметь параметры, содержащие имена полей и значения.

Как предотвратить инъекции NoSQL для ff:

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

1 Ответ

0 голосов
/ 12 июля 2019

В 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
...