Я бы не сказал, что доверять заголовку Content-type — плохая идея и вообще не имеет смысла. В конце концов, URL может и не содержать нужного расширения вообще. Какой-нибудь example.com/avatar.php?id=12345
Скорее, тут следовало бы на основе принятого Content-type присвоить сохраняемому файлу правильное расширение. В идеале — взять настройки веб-сервера по преобразованию расширения в mime тип — и применить это преобразование в обратном порядке.
Но сойдет и простое неизменяемое преобразование image/jpeg -> .jpg. Вряд ли кто-то будет обрабатывать .jpg как text/html, а кто так сделает — сам и виноват.
Уязвимость в Paperclip (XSS/RCE)