【发布时间】:2013-07-25 10:39:21
【问题描述】:
let $d := doc('foo.xml')
return concat('let $d := 

', $d)
返回
let $d :=
bar
我需要它返回:
let $d :=
<foo>bar</foo>
【问题讨论】:
-
mblakele 已经“警告”过您生成代码可能存在的危险,您打算评估或以其他方式在没有中间控制的情况下执行。我对更大的图景很好奇。我们也许可以建议替代路线,以防止使用有风险的方法..
-
这是一段一次性代码,用于生成一些 xquery 以加载一些数据。然而,我对减轻 XQuery 注入很感兴趣。目前,我正在使用封装 xquery 并使用直接字符串替换变量的“查询对象”。有没有更好的办法? (我确定有 - 也许是一个支持安全替换查询中的值的库?)
-
好吧,如果你确保注入的值只代表字符串,并且不允许过早关闭这些字符串,通过转义特殊字符,首先在 XML 中插入东西,你可以防止很多问题, 要不然。有一些特定于供应商的扩展也可能有所帮助。大多数 XQuery 解析器,包括 MarkLogic 的解析器,都允许使用 eval 类型的函数,这些函数通常也允许参数替换。除此之外,MarkLogic 还支持 xdmp:value(一种轻量级的 eval)和 xdmp:unpath,以解析持有 XPath 类表达式的变量。