回答編集履歴
2
コードハイライト
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
```
|
1
|
+
```ruby
|
2
2
|
|
3
3
|
line = '\u97F3\u9806(\u6607\u9806)'
|
4
4
|
|
1
セキュリティリスクを発見
test
CHANGED
@@ -4,6 +4,20 @@
|
|
4
4
|
|
5
5
|
puts line
|
6
6
|
|
7
|
+
# 以下だと式展開を埋め込まれると厄介
|
8
|
+
|
7
|
-
puts eval "%\0#{line}\0"
|
9
|
+
# puts eval "%\0#{line}\0"
|
10
|
+
|
11
|
+
puts line.split('#').map{|s| eval "%\0#{s}\0"}.join('#')
|
8
12
|
|
9
13
|
```
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
- \0を区切り文字にした%リテラルを用いる
|
18
|
+
|
19
|
+
- #{}による式展開を無力化
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
することでほぼ安全にevalを実行できている(はず
|