防止SPARQL注入的标准正则表达式



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

我看到了一些耶拿特定的解决方案(使用其Java API),这些解决方案对我没有用。

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

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

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

ES6 示例:

const escapeForTurtle: s => s.replace(/(["'\])/g, '\$1')
const query = `SELECT * { ?x :name """${escapeForTurtle(name)}""" }`

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

根据三重存储,如果要确保绝对每个可能的用户输入都到达存储中,并且没有任何丢失字符或额外的反斜杠,则可能需要一些额外的工作。输入\u0022是一个很好的测试用例。如果这在没有修改的情况下通过,你应该是安全的。

最新更新