r - 清理 R 中的字符串

标签 r security sanitization

这与上一个问题有关,这里是: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/

相关文章:

r - 为 Shiny 的应用程序创建桌面图标

javascript - 如何判断Github代码库是否包含恶意代码?

java - EJB3 @RunAs 注释和安全性

python-3.x - 如果在每次使用之前都使用高熵种子进行播种,Python 3 random.random 的安全性是否足够好?

html - 我应该清理托管 CMS 的 HTML 标记吗?

javascript - 从 HTML 中过滤 JavaScript

r - 使用 includeHTML 时 sidebarMenu 无法正常工作

r - Leaflet R中的分组图层控制

asp.net - HTMLEditorExtender 删除 "class"、 "id"属性

r - 使用 NA 将 5 分钟数据汇总为每小时总和