ASP.NET MVC: должны ли запросы GET на частных веб-страницах быть неразрушающими? - PullRequest
1 голос
/ 01 апреля 2009

В ASP.NET MVC, похоже, обычной практикой является не использовать запросы GET для вызовов к контроллеру, которые модифицируют модель. Например, удалить клиента нельзя, щелкнув по простой HTML-ссылке.

Единственная известная мне причина этого правила - не защита от сканеров, которые могут непреднамеренно изменить базу данных. GET-запросы обычно считаются безопасными, тогда как POST-запросы - нет.

Означает ли это, что это правило не применяется к частным частям веб-сайта (пример: ваша защищенная паролем область администрирования пользователей)? Или есть какая-то другая причина не использовать разрушительные запросы GET?

Ответы [ 4 ]

1 голос
/ 01 апреля 2009

Еще одна веская причина - плагины для браузеров. Они пытаются ускорить загрузку страниц, предварительно выбирая ссылки на текущей странице. Представьте, что если бы у вас было несколько запросов GET на удаление всех объектов в списке, плагин удалил бы их!

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

1 голос
/ 01 апреля 2009

Обычно это часть HTTP. От HTTP 1.1 RFC 2616

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

В частности, конвенция была Установлено, что ПОЛУЧИТЬ и ГОЛОВУ методы не должны иметь Важность принятия действий других чем поиск. Эти методы должны считаться "безопасным". Это позволяет пользователю агенты для представления других методов, такие как POST, PUT и DELETE, в особый способ, так что пользователь сделан осознавая тот факт, что возможно запрашивается небезопасное действие.

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

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

0 голосов
/ 02 апреля 2009

Но я полагаю, что вы все еще можете выполнять какие-то "неисследующие" действия для запросов GET. Например, обновление записей «LastVisit», которые можно считать неразрушающими и относительно безопасными.

0 голосов
/ 01 апреля 2009

Да.

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

Итак, представьте, что кто-то зашел на ваш веб-сайт и зашел на сайт www.hax0rs.com

В источнике для hax0rs.com есть следующий тег

<img src="http://mysite.com/members/statusChange?status=I%20am%20looking%20for%20a%20gimp%20mask" height="0" width="0">

Поскольку ваш пользователь вошел в систему и запрос отправляется на ваш сайт, файл cookie для аутентификации идет вместе с ним. И взрыв, внезапно статус вашего пользователя изменился.

Как весело :) 1012 *

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