teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コードハイライト

2018/03/09 09:31

投稿

asm
asm

スコア15149

answer CHANGED
@@ -1,4 +1,4 @@
1
- ```
1
+ ```ruby
2
2
  line = '\u97F3\u9806(\u6607\u9806)'
3
3
  puts line
4
4
  # 以下だと式展開を埋め込まれると厄介

1

セキュリティリスクを発見

2018/03/09 09:30

投稿

asm
asm

スコア15149

answer CHANGED
@@ -1,5 +1,12 @@
1
1
  ```
2
2
  line = '\u97F3\u9806(\u6607\u9806)'
3
3
  puts line
4
+ # 以下だと式展開を埋め込まれると厄介
4
- puts eval "%\0#{line}\0"
5
+ # puts eval "%\0#{line}\0"
6
+ puts line.split('#').map{|s| eval "%\0#{s}\0"}.join('#')
5
- ```
7
+ ```
8
+
9
+ - \0を区切り文字にした%リテラルを用いる
10
+ - #{}による式展開を無力化
11
+
12
+ することでほぼ安全にevalを実行できている(はず