回答編集履歴
2
微修正
test
CHANGED
@@ -52,17 +52,13 @@
|
|
52
52
|
|
53
53
|
今の書き方だと、悪意のある HTML や JavaScript が挿入できてしまうため、「クロスサイトスクリプティング(XSS)」という攻撃が成立してしまいます。
|
54
54
|
|
55
|
-
```erb:脆弱性のあるコード
|
56
|
-
<iframe src="https://www.youtube.com/embed/<%= find_youtube_url(work.youtube_url) %>" ... ></iframe>
|
57
|
-
```
|
58
|
-
|
59
55
|
**攻撃例**
|
60
56
|
|
61
|
-
画面の youtube_url のテキストボックスに以下の文字列を入力すると、アラートが出
|
57
|
+
画面の youtube_url のテキストボックスに以下の文字列を入力すると、アラートが出るはずです。
|
62
58
|
|
63
59
|
`https://youtu.be/WGiUk8VakxQ" onload="alert('XSS!!')" x="`
|
64
60
|
|
65
|
-
alert の部分を悪意あるコードに変えれば、「Cookie窃盗」や「Webページの汚損」が可能です。
|
61
|
+
alert の部分を悪意あるコードに変えれば、「Cookie窃盗」や「Webページの汚損」などの攻撃が可能です。
|
66
62
|
|
67
63
|
**修正例1**
|
68
64
|
|
1
undefined method `gsub' の対処について追記
test
CHANGED
@@ -88,3 +88,34 @@
|
|
88
88
|
) %>
|
89
89
|
```
|
90
90
|
|
91
|
+
---------------------
|
92
|
+
|
93
|
+
## (追記 2023/6/12)undefined method `gsub' について
|
94
|
+
|
95
|
+
gsub でエラーが出る原因は `String#strip!` メソッドだと思います。
|
96
|
+
|
97
|
+
ドキュメントによると、『空白がある場合はそれを取り除いた文字列を返すが、空白が無い場合は nil を返す』そうです。
|
98
|
+
|
99
|
+
> strip! は、内容を変更した self を返します。 **ただし取り除く空白がなかったときは nil を返します。**
|
100
|
+
>
|
101
|
+
> https://docs.ruby-lang.org/ja/latest/method/String/i/strip=21.html より
|
102
|
+
|
103
|
+
空白を除去するメソッドには、破壊的な `strip!` と、非破壊的な `strip` があります。
|
104
|
+
もし引数を破壊的に変更することに特別な意味が無いなら、非破壊的な方の `strip` を使えば、今回のエラーは解消できると思います。
|
105
|
+
|
106
|
+
```diff
|
107
|
+
module FarmersHelper
|
108
|
+
def find_youtube_url(youtube_url)
|
109
|
+
if youtube_url.include?("https://youtu.be/")
|
110
|
+
- youtube_url.strip!.gsub("https://youtu.be/", "")
|
111
|
+
+ youtube_url.strip.gsub("https://youtu.be/", "")
|
112
|
+
# "https://youtu.be/WGiUk8VakxQ" 11桁のyoutubeのURLが出力されるようにする
|
113
|
+
else
|
114
|
+
- youtube_url.strip!.gsub("https://www.youtube.com/watch?v=", "")
|
115
|
+
+ youtube_url.strip.gsub("https://www.youtube.com/watch?v=", "")
|
116
|
+
# "https://www.youtube.com/watch?v=WGiUk8VakxQ" 11桁のyoutubeのURLが出力されるようにする
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
```
|
121
|
+
|