我正在使用scala开发一个RESTful API,它将SPARQL查询发送到三元组。当用户定义的参数(HTTP get请求中的URL参数)被直接放入SPARQL时(例如,在全文搜索中),我读了一个关于SPARQL注入威胁的article。
我看到了一些对我没用的Jena特定解决方案(使用它的Java API)。
是否存在某种标准的正则表达式搜索和替换模式以逃避应该集成在SPARQL查询中的字符串中的恶意字符?
答案 0 :(得分:0)
如果用户输入进入查询中的字符串文字:
"""..."""
或'''...'''
ES6示例:
const escapeForTurtle: s => s.replace(/(["'\\])/g, '\\$1')
const query = `SELECT * { ?x :name """${escapeForTurtle(name)}""" }`
这足以防止异常用户输入造成注入和语法错误。
取决于三元组存储,如果要确保绝对所有可能的用户输入都不会丢失任何字符或多余的反斜杠,则可能需要一些额外的工作。输入\\u0022
是一个很好的测试用例。如果不做任何修改就可以了,那您就安全了。