Вы действительно не можете делать предположения о контенте, основанном на URL, или даже заголовках типов контента.
Они всего лишь направляющие к тому, что отправляется.
Удобный трюк, чтобы запутать вещи, которые используют сопоставление суффиксов для определения типов файлов, делает это:
http://example.com/someurl?q=foo#fakeheheh.png
И если бы вы могли произвольно разрешить добавление этого изображения на страницу, в некоторых случаях это могло бы стать дверным проемом для какой-либо атаки, если браузер следовал за ней. (Например, http://really_awful_bank.example.com/transfer?amt=1000000;from=123;to=123
)
Подделка, основанная на типе контента, не так вредна, но вы можете делать неприятные вещи, если человек, который контролирует имя, решает, как вы идентифицируете вещи и отправляет различные типы контента для запросов HEAD, как это делается для запросов GET.
Он может сказать запросу HEAD, что это изображение, но затем сообщить GET-запросу, что его application/javascript
, и, боже мой, знает, к чему это приведет.
Единственный способ узнать для определенного , что это - загрузить файл, а затем выполнить идентификацию на основе MAGIC или более (т. Е. Попытаться декодировать изображение). Тогда вам нужно беспокоиться только о слишком больших изображениях и специально созданных изображениях, которые могут отключить уязвимости на компьютерах, которые еще не исправлены для этой уязвимости.
Конечно, все вышеперечисленное - крайняя паранойя, но если вы знаете редкие возможности, вы можете быть уверены, что они не могут произойти:)