gpt4 book ai didi

r - 清理 R 中的字符串

转载 作者:行者123 更新时间:2023-12-04 15:23:40 25 4
gpt4 key购买 nike

这与上一个问题有关,这里是:Converting a \u escaped Unicode string to ASCII

我提出了一个涉及eval(parse(text=x))的解决方案,对于非 R 用户,这意味着它所说的:解析文本字符串,然后评估它。目的不是允许执行任意代码,而只是取消转义转义的 Unicode 文本。因此解决方案:

eval(parse(text=paste0("'", x, "'")))

虽然考虑到受限制的目标,这应该是相当安全的,但我很想知道:需要多少 sanitizer 才能保证安全?

至少,我猜任何嵌入的单引号和双引号都必须转义。例如,假设我们有
x <- "this is a '; print(dir()); 'string"

然后 eval根据上面的代码片段执行此操作将在中间执行代码。所以我们必须转义引号:
eval(parse(text=paste0("'",
gsub("'", "\\\\'", x),
"'")))

双引号也类似。我不认为未转义的 Unicode 等效项 \u0022\u0027是一个问题,因为对于解析器它们将与普通 " 相同和 ' .

这种方法有没有我错过的漏洞?

最佳答案

this is a \'; print(dir()); 'string

被转义为:
'this is a \\'; print(dir()); 'string'

双反斜杠被评估为文字反斜杠,引号处于事件状态,代码被执行。

此外,我不了解 R,但您可能至少可以使用原始控制字符(如换行符或无效转义符)导致崩溃。
eval一般是杯子的游戏。正常的字符串处理(搜索您想要的序列的字符串,替换它)是更好的方法,并且使用现有的库来处理特定的正确指定的格式是最好的。例如,如果您有 JSON,请使用 JSON 解析器。有许多可能的字符串文字格式使用 \u转义,所有规则都略有不同,因此您需要正确选择确切的格式。

关于r - 清理 R 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17770093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com