Хеширование файлов на стороне сервера и на стороне клиента

Я собираюсь написать небольшое веб-приложение / инструмент / виджет, который должен хранить некоторые файлы на сервере. Чтобы избежать ненужной нагрузки на стороне сервера, я хочу создать хэши файлов (с SHA, MD5 или что-то еще ...) на стороне клиента. Этим можно управлять с помощью HTML5 FileAPI, но тогда пользователи Opera и IE9 будут уволены. Вместо HTML5 можно использовать апплеты JAVA или Flash, чтобы приложение оставалось совместимым с разными браузерами. Но поскольку я не знаком с JAVA / Flash (и я бы использовал их только в ситуациях жизни или смерти), я бы хотел по возможности придерживаться JS. Но все предложения со стороны клиента приветствуются ... JS, JAVA, Flash, что угодно ...

Традиционный метод POST (с PHP) будет работать независимо от пользовательского агента. И AFAIK это безопаснее.

Короче говоря, мой вопрос: почему я должен предпочесть хеширование на стороне клиента, а не на стороне сервера?

Можете ли вы назвать некоторые плюсы и минусы обоих подходов?


person aL3xa    schedule 19.04.2011    source источник
comment
Мнение: боль и беспорядок, связанные с выполнением этой клиентской части, делают это для меня совершенно бесполезным. Я не могу себе представить, что сервер, который все равно должен сохранять файлы, будет перегружен из-за необходимости накапливать при этом простое хеш-значение.   -  person Pointy    schedule 19.04.2011


Ответы (3)


На стороне сервера. Большая нагрузка, но не настолько. Напишите код, рассчитайте время, измерьте использование памяти и т. Д. Я сомневаюсь, что это будет серьезной проблемой, особенно если вы можете сделать это с помощью задания cron, чтобы распределить нагрузку, если она огромна.

Клиентская сторона. Хешам нельзя доверять, а для их проверки необходимо пересчитать их на сервере. Меньшая нагрузка на сервер, но если для хеширования большого файла требуется время, это будет раздражать пользователя.

Я бы сделал это на стороне сервера, если у вас нет тысяч огромных файлов каждую минуту!

person Rich Bradshaw    schedule 19.04.2011
comment
Ключевым моментом здесь является то, что вы не можете доверять хэшам, поступающим со стороны клиента. Вся суть хеширования заключается в обеспечении уверенности в том, что данные верны. Выполнение их на стороне клиента сводит на нет эту выгоду. Узким местом здесь будет пропускная способность для перемещения файла на сервер - это константа в обоих подходах. Как правило, оптимизируйте после, когда у вас возникнут проблемы. См. Примеры такого подхода на ebay, youtube, meebo и т. Д. - person Milimetric; 19.04.2011

Я пытался написать несколько профи, как делать это на стороне клиента, но, честно говоря, вы усложняете себе задачу. И как вы убедитесь, что отправленный хэш был сгенерирован вами? Любой может легко использовать такие инструменты, как Firebug, и изменить работающий код (поправьте меня, если я ошибаюсь в этом, на самом деле никогда не использовался это: D). И, кроме того, они могут создавать / подделывать свои собственные запросы и размещать их в вашем файле PHP, так что вы потеряете много контроля.

Так как же тогда вы будете проверять данные? Сгенерировать еще один хеш и сравнить их друг с другом? Но тогда вы уже делаете это на стороне сервера!

Так что лучше подумайте о хранении операций хеширования на стороне сервера, где вы управляете средой. Алгоритмы хеширования существуют уже много лет, поэтому я уверен, что они их значительно оптимизировали. И вы обеспечите большую совместимость для своих клиентов.

И если вы получаете достаточно трафика, и хеширование является серьезным ударом по производительности, возможно, пришло время перейти на что-то более крупное ...

Но не поймите меня неправильно, это очень возможно и имеет смысл - http://www.movable-type.co.uk/scripts/sha1.html - но я просто не могу заставить себя доверять этому решению.

person Johann du Toit    schedule 19.04.2011

что, если отключен JavaScript? Вам не нужно полагаться на JavaScript для выполнения своей работы, если вы делаете это на стороне сервера. Лучше бы использовать дополнительный ресурс сервера для 100% гарантии, что он будет работать!

person Gavin Rogers    schedule 19.04.2011