Принятие сгенерированного Javascript ввода формы - PullRequest
1 голос
/ 01 ноября 2011

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

Но разве это также не означает, что вы не можете доверять выбору в выпадающем списке и т. Д., Не проверяя его на своем сервере? Вы можете легко добавить свои собственные варианты выбора в Firebug.

Итак, если я нарушу эту лучшую практику (поскольку я не принимаю платежи по кредитным картам или что-либо столь же критичное для безопасности), существуют ли какие-либо методы для минимизации риска возникновения проблем? Например, существуют ли способы усложнить конечному пользователю изменение значений, созданных в JavaScript? И пока мы на этом, есть ли способ увеличить сложность модификации выпадающих списков и т. Д.?

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011

Общее правило - просто не доверять чему-либо от клиента ...

Сюда входит ВСЕ ввода формы, полученного из JavaScript или иным образом.

Всегда проверяет и дезинфицирует поступающие данные на стороне сервера, иначе вы можете вообще не иметь никакой формы проверки.

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

Помните, Javascript не требуется для работы с формами ... как вы думаете, как работают спам-боты? У них наверняка нет включенного JavaScript ...

Любое решение, которое вы предложите, чтобы обеспечить не только ложное чувство безопасности, включает проверку ввода на стороне сервера .

Вам даже не нужен браузер для отправки формы ... когда-либо играл с cURL? Вы можете легко и быстро отправить любые необработанные данные POST непосредственно из командной строки.

Вопрос не в том, является ли это конфиденциальной информацией, такой как кредитные карты ... Это в равной степени касается потери данных. Вы в порядке с потерей данных? если так, почему вы собираете их в первую очередь?

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

1 голос
/ 01 ноября 2011

Вы не сможете остановить вмешательство клиентской формы в данные вашей формы.

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

Тем не менее оба эти метода потребуют проверки на стороне сервера.

0 голосов
/ 01 ноября 2011

Забудьте, откуда пришли данные. Ваш код на сервере может не иметь представления о том, откуда поступили данные, кроме как из внешнего мира , поэтому вы должны предполагать, что они являются вредоносными, пока не доказано обратное.

Таким образом, «метод минимизации риска», если вы «нарушаете эту лучшую практику», в основном: не нарушайте эту лучшую практику: проверяйте входящие данные.

Ваш второй пункт о том, как усложнить изменение HTML-форм или значений JS: помните, что браузер - это программа, работающая на чужом компьютере, и в конечном итоге они смогут заставить ее делать все, что захотят, включая отправку HTTP-запросов. непосредственно.

Единственное место, где вы можете обеспечить безопасность, - это сервер.

Редактировать: Мне потребовалось так много времени, чтобы представить это, и кто-то другой ответил на него более кратко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...