Hon*_*Ooi 6 security sanitization r
这与之前的问题有关,此处:将\ u转义的Unicode字符串转换为ASCII
我提出了一个涉及的解决方案eval(parse(text=x)),对于非R用户来说,意味着它所说的:解析文本字符串,然后对其进行评估.目的不是允许执行任意代码,而只是为了解除转义的Unicode文本.因此解决方案:
eval(parse(text=paste0("'", x, "'")))
Run Code Online (Sandbox Code Playgroud)
虽然考虑到有限的目标,这应该是相当安全的,但我有兴趣知道:保持安全需要多少卫生处理?
至少,我想任何嵌入的单引号和双引号都必须被转义.例如,假设我们有
x <- "this is a '; print(dir()); 'string"
Run Code Online (Sandbox Code Playgroud)
然后eval根据上面的代码段执行此操作将执行中间的代码.所以我们必须逃避报价:
eval(parse(text=paste0("'",
gsub("'", "\\\\'", x),
"'")))
Run Code Online (Sandbox Code Playgroud)
同样适用于双引号.我不认为未转义的 Unicode等价物\u0022并且\u0027是一个问题,因为对于解析器,它们将与plain "和'.
我错过了这种方法有什么漏洞吗?
this is a \'; print(dir()); 'string
Run Code Online (Sandbox Code Playgroud)
被转义为:
'this is a \\'; print(dir()); 'string'
Run Code Online (Sandbox Code Playgroud)
双反斜杠被评估为文字反斜杠,引号处于活动状态,代码被执行。
另外,我不了解 R,但可能您至少可以使用原始控制字符(如换行符或无效转义符)导致崩溃。
eval总的来说是一个杯子游戏。正常的字符串处理(搜索所需序列的字符串,替换它)是更好的方法,并且使用现有库来实现特定的正确指定的格式是最好的。例如,如果您有 JSON,请使用 JSON 解析器。有许多可能的字符串文字格式使用\u转义,它们的规则都略有不同,因此您需要正确选择确切的格式。
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |