2010-03-11 9 views
3

Я знаю, что вы должны использовать POST, когда данные будут изменены на общедоступном веб-сайте. Существует несколько причин, в том числе тот факт, что поисковые системы будут следить за всеми ссылками и изменять данные.Использование GET вместо POST для удаления данных за аутентифицированными страницами

Вопрос: Как вы думаете, что использовать GET за аутентифицированными страницами в порядке, как интерфейс администратора?

Одним из примеров может служить список продуктов со ссылкой на удаление в каждой строке. Поскольку единственный способ попасть на страницу - если вы вошли в систему, есть ли вред только при использовании ссылки с идентификатором продукта в строке запроса?

Разработка для комментариев:

я лично не имеют каких-либо проблем или трудностей в осуществлении удалений с POST. Я только что видел несколько примеров кода в ASP.NET и ASP.NET MVC для страниц типа «admin like», которые используют GET вместо POST. Мне любопытно мнение людей по этому вопросу.

+0

Нет, это, безусловно, нет. Но если вы уточните, почему вы хотели бы использовать GET вместо этого, мы можем предоставить предложения/рекомендации, как это сделать с помощью POST. – BalusC

+0

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

+0

Re: Ваша разработка. Эй, если все остальное равно, то отправляйтесь на POST, так как это неофициальный стандарт. (Хотите быть супер-RESTful? Используйте метод DELETE! :)). –

ответ

4

Некоторые люди узнали, что это очень плохая идея.

Google запустил новое приложение для ускорения просмотра (Google Web Accelerator), которое предварительно закрепил связанные страницы в браузере (без атак, без третьей стороны ...), и когда кто-то заходил на такие защищенные страницы, хорошо приложение посмотрело на все эти ссылки и сказал: «Эй, я буду их предварительно отбирать, потому что таким образом у меня есть страница, когда пользователь ее запрашивает»

Они изменили поведение, но каждый может сделать что угодно любой день.

3

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

Есть, вероятно, многие другие причины ...

+2

Кто-то может так же легко удалить XSS-скрипт для удаления сообщения. –

+0

Согласовано. Не делай этого. И хотя это правда, что XSS на самом деле не проблема, XSRF, @Nissan Fan. – Pointy

+0

XSS (и CSRF) не зависят от метода запроса. – BalusC

-3

GET и POST очень, очень похожи на то, что GetS есть ограничение на длину действия HTTP, потому что они все URL на основе исключения.

Поскольку вы не предоставляете доступ к людям, которые не прошли аутентификацию, я не верю, что использование gets проблематично.

+0

GET совсем не похож на POST. GET предназначен для получения данных с помощью idempotently, POST - для отправки данных для неидентичного изменения состояния сервера. Это означает, что вызов GET более одного раза совпадает с вызовом один раз. http://en.wikipedia.org/wiki/Idempotence –

+0

http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods – sibidiba

1

Я делаю это на страницах, где я знаю, что кто-то вошел в систему, и я могу проверить право пользователей на удаление чего-либо, основываясь на других данных, которые хранятся на моей сессии. Я бы предложил добавить шаг подтверждения: «Вы уверены, что хотите удалить эту штуку?»

+0

В этом случае вам придется ответить на этот метод, который использует страница подтверждения. –

+0

Я хотел бы предложить окно подтверждения javascript, чтобы разрешить или прервать GET в зависимости от ответа пользователя. – Ray

+0

В чем смысл? Если вы вообще используете javascript, почему бы не сделать это POST в первую очередь? –

3

GET следует использовать для извлечения данных идемпотентно, а POST следует использовать для обновления данных без именования. Это все. Это, конечно, не «лучшая практика» для обмена этими методами.

Что касается рисков XSS и CSRF, для предотвращения того, что один только HTML-код избегает любого управляемого пользователем ввода во время (повторного) отображения, а также для предотвращения того, что другие используют только токены и/или captchas на основе запроса.

2

Да.

Код может полагаться (правильно) на GET, не являясь разрушительным. Этот код может запускаться в браузере и, таким образом, будет проходить проверку подлинности (ссылка на prefetching приходит на ум).

+0

+1 Кто-то, у кого есть предварительный набор ссылок, может легко уничтожить всю таблицу, просто войдя на страницу администратора. –

5

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

Лучше всего, если генерировать одну крошечную форму каждого удаления ссылки на на сервере нецелесообразно, чтобы использовать ссылку GET, чтобы загрузить страницу подтверждения с сервера, который имеет форму POST, который выполняет удаление. Затем сделать некоторые прогрессивное улучшение:

<a href="/controller/delete/1" onclick="$.post(this.href); return false;">Delete</a> 

Если сервер получает GET к/контроллеру/удалить/х, то подавайте страницу подтверждения с формой POST. Если сервер получает запрос POST (или, возможно, DELETE), выполните удаление.

2

Было бы плохой практикой удалять данные на основе запроса GET. Технически вы можете это сделать, но вы будете не в синхронизации с наиболее хорошо написанными веб-сайтами. В основном вы создаете новый набор правил для своего пользовательского интерфейса, если вы используете GET-запросы для удаления. Я считаю URL-адреса вашего веб-сайта частью пользовательского интерфейса. Если вы отправили кому-то ссылку вроде http://www.fakesite.site/posts/delete?ID=1, они ожидали, что на странице появится запрос о том, хотите ли они удалить сообщение с идентификатором №1, а не выполнить фактическое удаление.

+0

В частности, вы будете не в синхронизации со спецификацией. –