-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
アバター画像のバリデーションにMime-Typeを使うようにした #7759
base: main
Are you sure you want to change the base?
Conversation
@unikounio |
@rira100000000 さん |
@unikounio @kyokucho1989 |
@rira100000000 |
test/system/users_test.rb
Outdated
@@ -570,6 +570,14 @@ class UsersTest < ApplicationSystemTestCase | |||
assert_match(/#{user.id}\.png$/, img.native['src']) | |||
end | |||
|
|||
test 'can upload broken image as user avatar' do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can not upload だと思いますー
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
そのように修正します。
app/models/user.rb
Outdated
mime_type = fm.buffer(uploaded_avatar.read) | ||
return if mime_type.start_with?('image/png', 'image/jpg', 'image/jpeg', 'image/gif', 'image/heic', 'image/heif') | ||
|
||
errors.add(:avatar, 'はPNG, JPG, GIF, HEIC, HEIF形式にしてください') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
このエラーメッセージは正確ではないと思います。
壊れたファイルでも拡張子はJPGだったりするので。
:avatar, 'は指定された拡張子(PNG, JPG, GIF, HEIC, HEIF形式)になっていないか、あるいは画像が破損している可能性があります'
というふうに変更するのが良いかと。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
そのように修正します。
@rira100000000 |
@kyokucho1989 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@rira100000000
確認しました!
Approve しますー
@kyokucho1989 @komagata |
@rira100000000 改めて仕様について考えてみてました。 そこで、最初にお話しした仕様と違ってしまって二度手間になってしまって大変もうしわけないのですが、アップロードのところはmime-typeだけのチェックにして、表示する場所で壊れたファイルであってもページ全体が表示されないのを防ぐような実装をお願いできれば幸いです。 なぜかというと、1つにはruby-magickのようなネイティブアプリと連携するものを使いたくないからです。 もう1つにはmagicを使う方法(バイナリの中身を見て判別する方法)は原理的に完璧にはできず、どちらにしろ完璧にはできないので、webのアイコン画像のvalidationにつかうのはあまりみたこともなく、too muchなやり方だと思ったからです いまさらになって大変もうしわけないですが、宜しくお願い致します。 |
@komagata validationをすり抜けた場合ですが、 |
Issue
概要
アバター画像のバリデーションにruby-filemagic を使うようにしました。※Marcelを使うようにしました。アバター画像のバリデーションにMarcelを使ったMime-Typeのチェックを加えました。
受け入れるべきファイル形式であるかをファイルの実体から判別するようになるため、拡張子偽装したファイルや形式判別不可能なファイルをアバターとして登録することを防ぐことができます。
変更確認方法
feature/add_validation_to_broken_image
をローカルに取り込むforeman start -f Procfile.dev
でサーバーを立ち上げるhttp://localhost:3000/current_user/edit
にアクセスするScreenshot
変更前
変更後