Как уже упоминалось в нескольких ответах: Любые данные, поступающие от клиента, не могут быть доверенными и по умолчанию должны рассматриваться как вредоносные . Сюда входят $_POST
, $_GET
, $_COOKIE
и $_REQUEST
(комбинация первых), но также и другие.
Говоря о том, что некоторые из них более опасны, чем другие, я действительно выделю $_GET
и $_REQUEST
(включая $_GET
) из $_POST
, поскольку генерировать немного сложнее, т.е. манипулировать запросом POST, чем запросом GET . Акцент здесь слегка , но использование POST для чувствительных операций, по крайней мере, удаляет еще один слой низко висящих плодов для использования.
Особенно, когда дело доходит до Межсайтового скриптинга (или XSS) и кражи cookie, довольно просто заставить браузер жертвы выдать GET-запрос на атакуемый сервер, просто вставив скрытое изображение с измененным URL-адресом на странице или подделкой ссылки.
Для выдачи POST-запроса требуется по крайней мере некоторый JavaScript, который немного сложнее ввести в браузер жертвы для выполнения (в зависимости от ситуации). Очевидно, что POST-запросы могут генерироваться непосредственно злоумышленниками, поэтому им также нельзя доверять, но для сценариев, когда злоумышленник использует сторонний браузер, им немного сложнее манипулировать.
Безопасность всегда сводится к тому, чтобы максимально усложнить взлом вашего приложения с учетом ограничений реализации и т. Д. Никогда нельзя быть на 100% безопасным. Поэтому лучше всего выбирать альтернативу, которую труднее использовать, даже если разница незначительна , при выборе между различными подходами реализации.
В конце концов, это всегда удаление низко висящих фруктов. Конечно, POST-запросами также можно манипулировать, но для любой операции с повышенным риском используйте POST-запрос и ограничьтесь использованием $_POST
в своем коде. Таким образом, вы уже исключили некоторые очень простые GET-атаки и теперь можете сосредоточиться на проверке данных POST. Только не думайте, что использование POST внезапно сделало операцию безопасной по умолчанию.