• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:rubyのerbを試しているが、ページが空白)

rubyのerbを試しているが、ページが空白

このQ&Aのポイント
  • rubyでphpと同じように埋め込みのwebプログラミングをしているが、ページに何も表示されない
  • main.cgiとtmp.htmlのパーミッションは正しく設定されている
  • 原因が分からず困っているので、アドバイスをお願いしたい

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.2

#1です。やってみると、出力の前のevalでエラーになってますね。 さっき後半で書いたやり方でやると、スクリプトの1行目の -T を取って、 require 'erb' の後に、 include ERB::Util を追加。 [tmp.html] の方では、<%= をすべて <%=h に変えます。h というメソッドがhtmlエスケープをしてくれます。

souitirou1
質問者

お礼

詳しい回答ありがとうございました! 無事解決できました。 ご指摘の通り、「-T」という指定を何も考えずにやっていました。汚染度という概念も初めて知りました。 読もうとしたファイルは汚染されていると判断されたから、エラーを起こしたわけですね。 -Tを使ったチェックに頼るのではなく、ファイルの方でエスケープして危険でないものにすると。 まだ何となく理解しただけですが、今後エスケープ処理は気をつけていこうと思います。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

プログラムは間違ってません。ruby -T で起動してますが、意図的ですか(どの様な効果を発揮するのか理解しきって指定していますか)? $SAFEが1なので、外部からの入力したデータは汚染されていると見なされ、出力出来ません。ログにエラーが出ているはずです。 File.read(filename) が汚染されているので、これを信用するということなら、汚染状態をクリアする必要があります。 erb = ERB.new(File.read(filename).untaint) Ruby(にかぎりませんが)の「汚染」モデルは、汚染・非汚染と、二値で判断するので不十分です(注1)。データはすべて汚染されているとみなして、 (1) HTML出力時には、html用のエスケープ処理 (2) SQL作成時には、そのDBMSのその文字コードに合わせたSQL用のエスケープ処理(プレイスホルダを使うのがより正しいやり方ですが) (3) xxxx処理に使う時には、xxxx処理用のエスケープ処理 (4) 。。。。 を行うのが正しいやり方です。-T を付けないで、自分で必要な時に必要なだけエスケープするのをお勧めします。 注1:HTML的な意味で非汚染でもSQL的な意味で汚染かもしれないので

関連するQ&A

専門家に質問してみよう