这与上一个问题有关,这里是:Converting a \u escaped Unicode string to ASCII
我提出了一个涉及 的解决方案eval(parse(text=x))
,对于非 R 用户,这意味着它所说的:解析文本字符串,然后评估它。目的不是允许执行任意代码,而只是取消转义转义的 Unicode 文本。因此解决方案:
eval(parse(text=paste0("'", x, "'")))
虽然考虑到有限的目标,这应该是相当安全的,但我很想知道:需要多少消毒才能保证安全?
至少,我猜任何嵌入的单引号和双引号都必须转义。例如,假设我们有
x <- "this is a '; print(dir()); 'string"
然后eval
按照上面的代码片段执行此操作将执行中间的代码。所以我们必须转义引号:
eval(parse(text=paste0("'",
gsub("'", "\\\\'", x),
"'")))
同样对于双引号。我不认为未转义的Unicode 等价物\u0022
和\u0027
是一个问题,因为对于解析器来说,它们与普通的"
和'
.
我错过了这种方法中的任何漏洞吗?