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

Я знаю, что POST может быть подделан с точки зрения происхождения домена, но как быть в состоянии изменить переменные скрытых переменных POST в моем HTML? Я обеспокоен тем, что кто-то может изменить значение «сумма» в моей форме PayPal:

<input type="hidden" name="amount" value="1.00"> 

к этому:

 <input type="hidden" name="amount" value="0.01"> 

или что-то подобное. Благодарю.

Да, для всех, кто изменит ваши переменные формы, тривиально легко. Являются ли они GET или POST, не имеет значения.

Правило веб-безопасности №1: Никогда не доверяйте никаким пользовательским вводам. Также указано, что «все пользователи являются вредоносными хакерами» или их вариант.

ответ на комментарий: решение состоит в том, чтобы знать все правильные значения на стороне сервера, без необходимости передавать их через клиентскую часть (Javascript). Поэтому, независимо от того, что говорит форма, вы уже знаете цену. Просто используйте то же значение, которое вы использовали для заполнения формы в первую очередь.

Да, это очень просто сделать с помощью инструментов инспектора браузера и JavaScript.


Вы не должны полагаться на поле amount , которое было первоначально передано в ответе клиенту. Более безопасный подход заключается в том, чтобы полагаться на идентификатор элемента, который можно сопоставить с ценой на сервере ( более контролируемая среда ).

Да, это значение можно изменить с помощью javascript. Если вы не практикуете использование javascript, вы также можете выполнить тест с помощью инструментов разработчика Google Chrome.

Infact это одна из основных причин не полагаться на ввод пользователя .

Забудьте javascript и инструменты для браузера. Пожалуйста, поймите, что я могу отправить любые аргументы cookie, POST и GET (пары ключей и значений), которые я хочу, независимо от того, является ли это для них формой. (См. CURL )

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

Подумайте об этом так. Браузер (не пользователь) – это клиент, а сервер – кассир. Любая информация, которая поступает из браузера на сервер, может быть любой, что я хочу.

Да. Это ухудшается, потому что им даже не нужно менять свою страницу, чтобы сделать это. Пользователь может использовать любой текстовый редактор для создания html-страницы с формой, полной текстовых полей, загружать ее с локального диска, заполнять их тем, что они хотят, и нажимать submit. OTOH, который будет отображаться в некоторых значениях заголовка.

Или, если они действительно определены, они могут подключаться к порту 80 на вашем сервере через telnet и подделывать весь HTTP-запрос, включая заголовки.

Нет ни одного байта входящего запроса, которому вы можете доверять.

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

В этом случае пусть они изменят значение, если захотят, и пусть они платят вам 0,01 доллара. Но тогда, когда вы получите IPN Paypal (Instant Payment Notification), он будет включать в себя цену, которую они заплатили; проверьте, что против вашей базы данных товаров, чтобы убедиться, что это правильная цена.

Если это не правильная цена, не отправляйте / не отдавайте товар. Вы заработали 0,01 доллара США!