PHP безопасность и маркировка записей MySQL для удаления с помощью ссылки HTML (GET) - PullRequest
1 голос
/ 07 марта 2012

Просто интересно, думают ли люди, что для веб-сайта безопасно использовать ссылку html, чтобы пользователи могли пометить свои документы для удаления со страницы безопасной учетной записи?

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

http://www.examplewebsitename.com/delete_document.php?docid=5

Сценарий delete_document проверяет, что параметр docid является числовым, а затем проверяет, используя переменную сеанса своего идентификатора пользователя, установленного при входе в систему, если этот человек действительно создал этот документ, просмотрев идентификатор пользователя создателя документа. Если они были создателем, то он помечает документ для удаления, в противном случае, если текущий зарегистрированный пользователь не был создателем, он не помечает документ для удаления и возвращает страницу с ошибкой.

Считаете ли вы, что это действительный и безопасный способ пометить документы для удаления, или я должен использовать форму и сообщение, чтобы сделать это более безопасно?

Ответы [ 3 ]

4 голосов
/ 07 марта 2012

Три основные проблемы, которые я могу придумать, используя GET как операцию удаления для вашего приложения.

  1. Семантическая причина, GET, согласно http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html, должна быть идемпотентным методом the side-effects of N > 0 identical requests is the same as for a single request.

  2. Более склонны к CSRF , кто-то может опубликовать ссылку на http://www.examplewebsitename.com/delete_document.php?docid=5 и обернуть ссылку в безобидно выглядящий якорь
    <a href="http://www.examplewebsitename.com/delete_document.php?docid=5">Click here for free puppy!</a>
    Если по какой-либо причине пользователь войдет в систему и нажмет на эту ссылку на своем доверенном веб-сайте, пользователь может случайно удалить документ.

  3. Надстройка / плагин для браузера, который сканирует веб-страницы и кэширует ссылки, может случайно сканировать ссылку, открывать ее и снова удалять документ без ведома пользователя.

3 голосов
/ 07 марта 2012

Обычно я советую не использовать запросы GET для манипулирования данными, потому что это не то, для чего предназначен GET, если вы придерживаетесь спецификации HTTP. Если вы хотите полностью расслабиться, вы должны использовать запрос DELETE, но в большинстве случаев я использую страницу подтверждения с формой, которая выполняет запрос POST для удаления записи.

Чтение Почему вы должны удалять, используя HTTP POST или DELETE, а не GET? для обоснования этого. Об этом спрашивали раньше в некоторых других контекстах.

0 голосов
/ 07 марта 2012

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

В частности, установлено, что GET иМетоды HEAD НЕ ДОЛЖНЫ иметь значение действия, кроме поиска.Эти методы следует считать «безопасными».Это позволяет пользовательским агентам представлять другие методы, такие как POST, PUT и DELETE, особым образом, чтобы пользователь знал о том, что запрашивается небезопасное действие.

Пользовательские агенты ожидают, что этот метод не будет иметь побочных эффектов:

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

Это означает, что GET не должен вызывать каких-либо изменений состояния на стороне сервера.

Другая причина, а не второстепенная, заключается в том, что GET легче использовать этот POST, поскольку существует больше способов инициировать запрос GET, чем инициировать запрос POST.Но независимо от того, какой метод, оба уязвимы для CSRF-атак.

Поэтому, если вы убедитесь, что вы защищены от CSRF , вы даже можете использовать GET для запросов на изменение состояния.

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