Почему мы делаем POST для подтверждения удаления в asp.net MVC? - PullRequest
2 голосов
/ 21 декабря 2010

Ниже приводится примечание от Professional ASP.NET MVC 2 от Скотта Хансельмана ++

Вы можете спросить - почему мы прошли усилия по созданию в наш экран подтверждения удаления? Зачем не просто использовать стандартную гиперссылку на ссылка на метод действия, который делает фактическая операция удаления? Причина в потому что мы хотим быть осторожными, чтобы охранять против веб-сканеров и поиска двигатели, открывающие наши URL и непреднамеренно вызывая данные быть удаляется, когда они переходят по ссылкам. URL-адреса на основе HTTP-GET считаются безопасный для них доступ / сканирование, и они должны не следовать HTTP-POST те. Хорошее правило - сделать уверен, что вы всегда наносите разрушительный или операции по изменению данных позади HTTP-POST запросы.

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

Ответы [ 6 ]

3 голосов
/ 21 декабря 2010

Хорошее практическое правило - GET не должен изменять данные. Если вы хотите изменить некоторые данные, вы используете POST.

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

В качестве альтернативы вы можете использовать JavaScript для отправки формы, когда пользователь нажимает ссылку.

3 голосов
/ 21 декабря 2010

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

2 голосов
/ 21 декабря 2010

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

2 голосов
/ 21 декабря 2010

Я бы добавил, что даже если страница администратора защищена паролем, ссылки для удаления могут быть «нажаты» некоторыми локально установленными веб-ускорителями. Так что использовать метод POST безопаснее.

1 голос
/ 22 декабря 2010

Есть веская причина не использовать GET для операций, которые изменяют данные.Это не только для семантической чистоты.http://haacked.com/archive/2009/01/30/simple-jquery-delete-link-for-asp.net-mvc.aspx

0 голосов
/ 21 декабря 2010

@ xport: POST выполняется 2 раза для выполнения одного действия, а GET - только 1 раз.В POST, в первый раз, он свяжется с сервером для проверки подлинности действия, и после этого он выполнит это действие.В ситуации GET, это только призыв к действию, которые не аутентифицируются.Так что обычно POST тратит больше времени на выполнение действий, чем GET (2 раунда).Если у вас есть некоторые действия, такие как DELETE, UPDATE, ADD, ..., вы должны выполнить его с POST, а если некоторые действия только выбирают данные из базы данных, только GET.Это мое понимание в GET и POST.

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