回答編集履歴

1

質問者のコードのセキュリティ的問題点の解説を加えた。

2021/11/29 16:47

投稿

MasaSakano
MasaSakano

スコア188

test CHANGED
@@ -38,6 +38,10 @@
38
38
 
39
39
 
40
40
 
41
+ (以下、追記: 元のコードでは、`h(@problems)`となっています。したがって、`@problems` の内容にたとえばJavaScriptが紛れ込んでいると、ユーザーの環境でそれが実行されてしまいます。`@problems`はモデル`Problem`で表されるDBテーブルから抽出されています。ほとんどのDBテーブルの値は、何らかの外部入力(多くの場合はフォームなどのユーザー入力)を反映していますから、一般論としては、悪意あるユーザーによってそこに邪悪なコードが紛れ込まれることになる可能性が否定できません。もし現在のアプリの仕様としてその可能性がゼロであれば、現時点ではセキュリティホールにはなりませんね。ただし、仮に現在そうなっていても、一般論として、将来のこのRailsアプリの保守修正においてそうなる可能性を完全否定は難しい、あるいはそれを保証するのは相応の手間です。だから、最初から「安全に」プログラミングしておくことが、推奨されます。端的には、全てリジェクトして、絶対に安全と確証を持てるものだけを通すスタイルです。その一つの例がこの回答でした。)
42
+
43
+
44
+
41
45
  現実には、想定している状況次第で、もっとスマートに書けるでしょう。たとえば、入力文字列の普通の改行コードはすべて`<br>`に変換する、と仮定できるならば、もっとスマートに書けるでしょう。
42
46
 
43
47
  質問者が想定している詳しい状況がわからないので、上の例は汎用的に使えるように書いたものです。