полагаясь на скрытые входные данные и строки запроса - PullRequest
1 голос
/ 16 мая 2009

Предположим, что у меня есть обработчик запроса, который принимает аргумент: ключ

И пусть запрос будет:

http://example.com/2323

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

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

Я хотел бы знать, является ли это скрытым вводом или аргументом строки запроса, на который я должен опираться, когда данные в форме будут сохранены в БД. Проблема в том, что строка запроса может быть изменена пользователем до публикации, также как и скрытый ввод может быть изменен, так как источник открыт для пользователя.

1 Ответ

9 голосов
/ 16 мая 2009

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

Есть много вариантов; Строки запросов, скрытые поля, куки, чтобы назвать несколько. Каждый из них страдает от этого самого недостатка - возможности того, что злоумышленник может изменить данные в этих объектах.

Лучше всего использовать надежное шифрование. Будь то данные в скрытом поле или файл cookie, их можно легко зашифровать. Затем, когда запрос получен, его можно сравнить со значением, существовавшим до более раннего ответа, и его можно расшифровать с разумной уверенностью в том, что данные не были подделаны. Для хорошего примера вам следует изучить, как работает ASP.NET Viewstate .

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

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