回答編集履歴

2

微修正

2023/06/13 04:10

投稿

shinoharat
shinoharat

スコア1676

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' の対処について追記

2023/06/12 00:14

投稿

shinoharat
shinoharat

スコア1676

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
+