私はPostgreSQLにメールテンプレートを保存しています。これにより、ユーザは送信メールを編集できるようになります。私はLiquidを使ってサーバー上でコードが実行されないようにしています。 dbから電子メールテンプレートをフェッチして解析し、それをレンダリングして液体テンプレートをマーシャリングしたいと考えています。ここでこれを行うためのコードは次のとおりです。DBに裏付けされた液体テンプレートとMarshal.loadのセキュリティ上の懸念
# Saving template to the db
text = "template text from possibly dangerous user {{stuff}}"
template = Liquid::Template.parse(text)
email_template = EmailTemplate.new # the db class
email_template.source = Marshal.dump(template)
email_template.save
# time goes by and now we need that template
template = Marshal.load(email_template.source) # !! Is this dangerous? !!
私はMarshal.load
により、リモートでコードが実行される可能性ができることを読みました。私はLiquid :: Templateオブジェクトをマーシャリングするつもりですが、これには恐ろしいユーザーが提供するデータが含まれています。私が気づく必要があるセキュリティ上の考慮事項はありますか?
ありがとうございました。上記を達成する別の選択肢がありますか? – bennick
@bennick申し訳ありませんが、私の最後の行を逃した。今すぐ追加しました。 – Agis
よかったです。 Marshal.loadプロセス中にLiquid :: Templateオブジェクトを使用してリモートコード例外が "リーク"する可能性があるかどうかはわかりませんでした。 – bennick