Jena SelectBuilder是否阻止sparql注入?

Jena SelectBuilder是否阻止sparql注入?,jena,Jena,我们试图在应用程序中防止sparql注入攻击。为了生成sparql查询,我们使用了ApacheJean查询生成器类(org.apache.jena.arq.querybuilder)。 这足以防止注射攻击吗 我们尝试注入多个三元组而不是文本,查询不会返回任何数据。那么这是否意味着查询生成器类会阻止注入 String username="admin\". ?subject ?p ?o . ?subject <urn:publicid:property;name> \"admin";

我们试图在应用程序中防止sparql注入攻击。为了生成sparql查询,我们使用了ApacheJean查询生成器类(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 );
String username=“admin\”?主题?p?o?主题\“管理”;
SelectBuilder sb=new SelectBuilder().addVar(“*”).addWhere(“?s”,RDF.type,Namespace.USER\u META\u type)
.addWhere(“?s”,Namespace.USER\u名称,用户名);
我希望结果集应该是空的,因为发生了同样的事情。

addWhere(s,p,o)方法检查每个对象(s,p,o)的类型。对于字符串,它调用
org.apache.jena.sparql.util.NodeFactoryExtra
方法
公共静态节点parseNode(字符串nodeString,PrefixMap pmap)
方法。这意味着

  • 以“开头”转换为URI
  • 以“\”开头的节点将转换为匿名节点
  • 以“或”开头是字符串
  • 以“?”开头的节点转换为变量类型节点
  • 仅包含数字和“.”将转换为数字文字节点类型
  • 格式为prefix:localName,其中prefix位于前缀映射中,localName是有效的localName,则会转换为URI
  • 所有其他值都作为字符串返回
这意味着QueryBuilder或UpdateBuilder中都没有注入风险