7

これは前の質問に関連しています。ここでは、 \u エスケープされた Unicode 文字列を 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。パーサーにとってはプレーンな"and と同じになるからです'

私が見逃したこのアプローチの穴はありますか?

4

2 に答える 2