标准正则表达式,以防止SPARQL注入?

问题描述 投票:2回答:1

我正在使用scala开发RESTful API,将SPARQL查询发送到triplestore。当用户定义的参数(HTTP get请求中的URL参数)直接放入SPARQL时(例如,在全文搜索中),我读了一篇关于SPARQL注入威胁的article

我看到了一些对我没用的Jena特定解决方案(使用它的Java API)。

是否有某种标准的正则表达式搜索和替换模式来逃避应该集成在SPARQL查询中的字符串中的恶意字符?

escaping sparql code-injection
1个回答
0
投票

如果用户输入进入查询中的字符串文字:

  1. 使用三重引用形式:"""..."""'''...'''
  2. 使用反斜杠在用户输入中添加任何反斜杠,单引号或双引号

ES6示例:

const escapeForTurtle: s => s.replace(/(["'\\])/g, '\\$1')

const query = `SELECT * { ?x :name """${escapeForTurtle(name)}""" }`

这足以防止异常用户输入的注入和语法错误。

如果您想确保绝对每个可能的用户输入到达商店而没有任何丢失的字符或额外的反斜杠,则可能需要一些额外的工作,这取决于三重存储。输入\\u0022是一个很好的测试用例。如果这种情况没有经过修改,那么你应该安全无虞。

© www.soinside.com 2019 - 2024. All rights reserved.