使用 PHP 引用 Cypher 查询(转义字符串)
Quoting into Cypher queries using PHP (escaping a string)
我正在使用 PHP 和 neoxygen/neo4j-neoclient 构建图形数据库并寻找一种方法来转义字符串,以便我可以安全地将它们引用到 Cypher 查询中。
我知道 documentation on Cypher expressions,但我想知道是否有人已经用 PHP(或者其他语言,以便我可以将其移植到 PHP)编写了这样的转义函数?也许我可以使用已经存在的 PHP 转义函数,比如 MySQL?
编辑:
最后,如果有人正在寻找一种使用 sendCypherQueries 传递参数的方法,这里有一个例子:
$parameters = array(
'key'=>'example',
);
$client->sendCypherQuery("MERGE (node {key:{key}})", $paramteres);
这相当于一个 Cypher 查询:
MERGE (node {key:'example'})
您描述的潜在 "injection" 对于您未作为参数传递的所有变量都是可能的。
因此,对于 Cypher 和 NeoClient,请务必始终 将您的变量作为 sendCypherQuery
方法的第二个参数传递。
作为旁注,在 PHP 中,mysql_real_escape_string 自 PHP5.5.0 以来已过时,所以两年多以前了。
这就是为什么您将 PDO 用于 eg 并将变量也作为查询参数传递的原因。
{key}
语法已过时。使用 $key
代替:
$client->sendCypherQuery('MERGE (node { key: $key })', [ 'key' => 'example' ]);
我正在使用 PHP 和 neoxygen/neo4j-neoclient 构建图形数据库并寻找一种方法来转义字符串,以便我可以安全地将它们引用到 Cypher 查询中。 我知道 documentation on Cypher expressions,但我想知道是否有人已经用 PHP(或者其他语言,以便我可以将其移植到 PHP)编写了这样的转义函数?也许我可以使用已经存在的 PHP 转义函数,比如 MySQL?
编辑: 最后,如果有人正在寻找一种使用 sendCypherQueries 传递参数的方法,这里有一个例子:
$parameters = array(
'key'=>'example',
);
$client->sendCypherQuery("MERGE (node {key:{key}})", $paramteres);
这相当于一个 Cypher 查询:
MERGE (node {key:'example'})
您描述的潜在 "injection" 对于您未作为参数传递的所有变量都是可能的。
因此,对于 Cypher 和 NeoClient,请务必始终 将您的变量作为 sendCypherQuery
方法的第二个参数传递。
作为旁注,在 PHP 中,mysql_real_escape_string 自 PHP5.5.0 以来已过时,所以两年多以前了。 这就是为什么您将 PDO 用于 eg 并将变量也作为查询参数传递的原因。
{key}
语法已过时。使用 $key
代替:
$client->sendCypherQuery('MERGE (node { key: $key })', [ 'key' => 'example' ]);