Php 转义输入以插入XQuery字符串
假设我有以下代码:Php 转义输入以插入XQuery字符串,php,escaping,xquery,basex,Php,Escaping,Xquery,Basex,假设我有以下代码: let $search := "placeholder" ... ...functx:get-matches-and-non-matches($t,$search)... 该代码像这样存储在一个文件中,通过PHP加载到字符串中,占位符被用户输入替换,然后执行代码 显然,“需要以某种方式转义 在用户输入安全之前,是否还有其他东西需要转义或删除 到目前为止,我发现我需要用"替换”用于工作,在这个过程中还发现\实际上需要&92\在这里(或者\\\\,这使得它在php
let $search := "placeholder"
...
...functx:get-matches-and-non-matches($t,$search)...
该代码像这样存储在一个文件中,通过PHP加载到字符串中,占位符
被用户输入替换,然后执行代码
显然,“
需要以某种方式转义
在用户输入安全之前,是否还有其他东西需要转义或删除
到目前为止,我发现我需要用
"替换”
用于工作,在这个过程中还发现\
实际上需要&92\代码>在这里(或者\\\\
,这使得它在php中成为“\\\\\”
),转义{
和}
可能是一个好主意,因为它们会让正则表达式解析器产生其他问题。不要动态构造查询,如果不需要的话,您必须投入大量精力来转义以防止代码注入(并且可能忽略某个参数)。考虑使用外部绑定变量,而可以将其与SQL.中的准备语句进行比较。
正如您使用BaseX和PHP一样,这是一个:
如果您使用的是BaseX的另一个接口,那么所有外部变量都可以注册。其他XQuery实现也应该提供类似的机制来绑定变量,external
变量是XQuery的官方标准。除了特殊字符外,还应该限制可以替换的占位符
;否则,您将面临注入攻击。谢谢,我不知道这是一个选项。
// create query instance
$input = 'declare variable $name external; for $i in 1 to 10 return element { $name } { $i }';
$query = $session->query($input);
// bind variable
$query->bind("name", "number");
// print results
print $query->execute()."\n";