Как предотвратить изменение URL-переменных в PHP? - PullRequest
1 голос
/ 16 июля 2011

Я создаю веб-приложение в CakePHP, авторизованные пользователи могут добавлять, обновлять, удалять записи.В некоторых контроллерах для добавления записи моя структура URL выглядит следующим образом:

records/add/id_of_parent_record/secondvar:another_decision_dependent_value.

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

Ответы [ 3 ]

3 голосов
/ 16 июля 2011

Общее правило заключается в том, что переменные URL-адреса (любого типа, включая все, что содержится в URL-адресе) должны использоваться только при выборе и отображении переменных.Таким образом, если пользователь что-то испортит, ну и что?Они облажались, и вы не гарантируете эту поддержку.Они не имеют легкой возможности работать с данными бэкэнда, вставляя неправильные данные (это более или менее идея RESTful GET).

Если что-то нужно изменить, с другой стороны,это должно быть сделано как с аутентификацией (аутентификация HTTP считается более идеальной), так что модифицировать могут только пользователи, имеющие полномочия *1003*.Обычно это также делается с помощью запроса PUT / POST / DELETE.В средах PHP POST будет самым простым / наиболее распространенным, поскольку PUT и DELETE требуют гораздо больше усилий для полной поддержки в PHP.

2 голосов
/ 16 июля 2011

Всегда используйте POST-запрос для такого рода вещей (Create, Update, Delete), чтобы он не мог произойти случайно.Но даже если вы используете POST, не доверяйте пользовательскому вводу.

Также обратите внимание на Post / Redirect / Get .

0 голосов
/ 19 июля 2011

Кроме POST и Post / Redirect / Получить совет .. В общем:

Никогда не доверяйте любой информации, которую вы получаете в HTTP-запросе (включая параметры GET, данные POST, файлы cookie и заголовки HTTP). Всегда проверяйте, есть ли у пользователя разрешение на выполнение каждого действия с соответствующими объектами данных, и вы всегда проверяете на стороне сервера, что данные настолько разумны, насколько это возможно, прежде чем принимать и обрабатывать их.

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