我们正在尝试防止应用程序中的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 );
我希望结果集应该为空。
答案 0 :(得分:1)
addWhere(s,p,o)方法检查每个对象(s,p或o)的类型。对于字符串,它调用org.apache.jena.sparql.util.NodeFactoryExtra
方法public static Node parseNode(String nodeString, PrefixMap pmap)
方法。这意味着字符串
这意味着QueryBuilder或UpdateBuilders中都没有注入风险。