Предотвращает ли SelectBuilder инъекцию sparql? - PullRequest
0 голосов
/ 25 июня 2019

Мы пытаемся предотвратить атаки sparql-инъекциями в нашем приложении. Для генерации sparql-запросов мы использовали классы построителя запросов apache jean (org.apache.jena.arq.querybuilder).Достаточно ли этого для предотвращения атак с использованием инъекций?

Мы попытались внедрить несколько тройок вместо литералов, запрос не возвращает никаких данных.Значит ли это, что классы построителя запросов предотвращают внедрение?

String username="admin\". ?subject ?p ?o . ?subject <urn:publicid:property;name> \"admin";

SelectBuilder sb = new SelectBuilder().addVar( "*" ).addWhere( "?s", RDF.type, Namespace.USER_META_TYPE )
                .addWhere( "?s", Namespace.USER_NAME, username );

Я ожидаю, что результирующий набор должен быть пустым, то же самое произошло.

1 Ответ

1 голос
/ 25 июня 2019

Метод addWhere (s, p, o) проверяет тип каждого объекта (s, p или o). В случае строк он вызывает метод org.apache.jena.sparql.util.NodeFactoryExtra метод public static Node parseNode(String nodeString, PrefixMap pmap). Это означает, что строки, которые

  • начинаются с '<', а с '> преобразуются в URI.
  • начинаются с "_:" и преобразуются в анонимные узлы.
  • начинаются с "или" - это строки
  • начинаться с "?" преобразуются в узлы переменного типа.
  • содержит только цифры и '.' преобразуются в числовые литеральные типы узлов.
  • имеют префикс формы: localName, где префикс находится в карте префиксов, а localName является допустимым localName, преобразуются в URI.
  • Все остальные значения возвращаются в виде строк.

Это означает, что нет риска инъекции ни в QueryBuilder, ни в UpdateBuilders.

...