在使用SPARQL查询时,如何保护运行Sesame triplestore的系统免受注入?

在使用SPARQL查询时,如何保护运行Sesame triplestore的系统免受注入?,sparql,code-injection,sesame,Sparql,Code Injection,Sesame,标题说明了一切。有什么东西与SQL的预处理语句等价吗?假设您使用的是RDF4J的最新版本,而不是Sesame 为了防止由于注入而导致的漏洞,一种简单的方法是使用,并使用QuerysetBinding将实际用户输入值注入到查询中。例如: //一些要注入的输入关键字 字符串关键字=foobar; TupleQuery query=con.preparettuplequery 前缀ex: +选择?文档,其中{?文档ex:keyword?关键字。}; //注入输入关键字 query.setBinding

标题说明了一切。有什么东西与SQL的预处理语句等价吗?

假设您使用的是RDF4J的最新版本,而不是Sesame

为了防止由于注入而导致的漏洞,一种简单的方法是使用,并使用QuerysetBinding将实际用户输入值注入到查询中。例如:

//一些要注入的输入关键字 字符串关键字=foobar; TupleQuery query=con.preparettuplequery 前缀ex: +选择?文档,其中{?文档ex:keyword?关键字。}; //注入输入关键字 query.setBindingkeyword、factory.createLiteralkeyword; //执行查询 TupleQueryResult结果=query.evaluate; 为了实现更高级的控制,RDF4J还提供了一个用于在Java中创建SPARQL查询的流畅API。例如:

字符串关键字=foobar; 前缀ex=SparqlBuilder.prefixex,Rdf。irihttp://example.org/; Variable document=SparqlBuilder.vardocument; SelectQuery=querys.SELECT.prefixex.selectdocument .whereGraphPatterns.tpdocument,ex.irikeyword,Rdf.literalOfkeyword;
并非如此。有一些引擎,比如我的雇主的,为只读、读写等提供不同特权的端点,这些特权可能因用户而异。Virtuoso还支持SQL中的SPARQL,因此您可以在SQL中进行所有查询,这允许您在客户机工具中使用准备好的语句,该工具可以通过ODBC、JDBC、dotNET等进行连接。。。。复杂的答案,但这是一个复杂的谜题!在Apache中,Jena和QueryBuilder支持这一点。但仅来自Java代码afaik。在RDF4J中,还有一种准备查询的方法:-我不能说是否完成了内部注入测试。Jeen Broekstra很可能很快会给你答案,这里不是SPARQL的完整解决方案,查询和更新是不同的语言。查询端点将只接受查询。注入查询的更新将是一个语法错误。@AndyS所以最坏的情况是我的服务器引发了一些异常?任意注入查询会使查询非常非常慢。可能发生系统异常,例如内存不足。注入更新操作将导致HTTP响应400个错误请求-这是一个错误的语法查询。