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

时间:2015-04-13 09:21:07

标签: escaping sparql code-injection

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

ES6示例:

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

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

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

取决于三元组存储,如果要确保绝对所有可能的用户输入都不会丢失任何字符或多余的反斜杠,则可能需要一些额外的工作。输入\\u0022是一个很好的测试用例。如果不做任何修改就可以了,那您就安全了。