Railsでアップロードされたファイルを自動的にウイルススキャンできるミドルウェアを昔作ったサービスで作ったのを思い出し、Gem化してみた。
インストールは簡単。
Gemfile
gem 'rack-secure-upload'
application.rbに以下を追加するだけ。
config/application.rb
module MyApp
class Application < Rails::Application
config.middleware.insert_before ActionDispatch::ParamsParser, Rack::SecureUpload::Middleware, :avast
end
end
現在はAvastとFsecureに対応(別途インストールしておく必要がある)。
Avastは無料なので気軽に試せるがEC2のmicroインスタンスだと貧弱すぎてスキャンにものすごい時間がかかる。
簡単なSampleアプリケーションを以下に作ってみた。
試しにeicarをアップロードしてみると、
406を返す。
例外を出すこともできる。
後はこれを別のミドルウェアでrescueしてエラー画面出すなり、nginxでインターセプトしてエラー画面出すなりするとOK。
本来はIPSなどで検出すべきだけど、そこまで本格的なものは要らない人のためには重宝しそう!
まあ、ディレクトリ監視でウイルススキャン走らせてても良いのだけれど、常駐させる負荷はなくなるかな!?