SelectBuilder是否可以防止sparql注入?

时间:2019-06-25 12:05:54

标签: apache jena

我们正在尝试防止应用程序中的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 个答案:

答案 0 :(得分:1)

addWhere(s,p,o)方法检查每个对象(s,p或o)的类型。对于字符串,它调用org.apache.jena.sparql.util.NodeFactoryExtra方法public static Node parseNode(String nodeString, PrefixMap pmap)方法。这意味着字符串

  • 以'<'开头,并以'>转换为URI。
  • 以“ _:”开头的文件将转换为匿名节点。
  • 以“或”开头的是字符串
  • 以“?”开头转换为变量类型节点。
  • 仅包含数字和“。”转换为数字文字节点类型。
  • 格式为prefix:localName,其中前缀在前缀映射中,并且localName是有效的localName,将转换为URI。
  • 所有其他值都以字符串形式返回。

这意味着QueryBuilder或UpdateBuilders中都没有注入风险。