[英]How to protect my system, which runs the Sesame triplestore, from injections when querying using SPARQL?
标题说明了一切。 是否有与 SQL 的预处理语句等效的东西?
(假设您使用的是最新版本的 RDF4J,而不是 Sesame)
为了防止由于注入导致的漏洞,一个简单的方法是使用准备好的查询,并使用Query#setBinding
将实际的用户输入值注入到您的查询中。 例如:
// some input keyword to inject
String keyword = "foobar";
TupleQuery query = con.prepareTupleQuery(
"PREFIX ex: <htt://example.org/> "
+ "SELECT ?document WHERE { ?document ex:keyword ?keyword . }");
// inject the input keyword
query.setBinding("keyword", factory.createLiteral(keyword));
// execute the query
TupleQueryResult result = query.evaluate();
对于更高级的控制,RDF4J 还有一个SparqlBuilder ,一个流利的 API 用于在 Java 中创建 SPARQL 查询,用于此目的。 例如:
String keyword = "foobar";
Prefix ex = SparqlBuilder.prefix("ex", Rdf.iri("http://example.org/"));
Variable document = SparqlBuilder.var("document");
SelectQuery query = Queries.SELECT().prefix(ex).select(document)
.where(GraphPatterns.tp(document, ex.iri("keyword"), Rdf.literalOf(keyword));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.