ASP.net MVC 3 обновить или удалить

#asp.net-mvc-3

#asp.net-mvc-3

Вопрос:

Я только начинаю изучать MVC3 и работаю над тем, чтобы пользователи могли включать / отключать отображение изображения из своей учетной записи … обновляя active до true или false по ссылке и идентификатору, передаваемому через HttpPost

                     var image1 = new BigImage();
                    image1.id = id;
                    db.BigImage.Attach(image1);
                    image1.active = 0;
                    db.SaveChanges();
  

Вопрос:
Как мне избежать дыр в безопасности или ситуаций, когда кто-то может перейти, например, в /home /user /image /deactivate / 5. Каков правильный подход?

Я прочитал сообщение о том, что ссылки на удаление не используются. Те же проблемы с обновлением? Я в замешательстве.

Ответ №1:

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

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

Если вы хотите использовать ссылки и следовать рекомендациям по использованию POST для изменения данных, вы можете использовать форму с кнопкой, которая выглядит как ссылка. Вот фрагмент кода, подобный тому, который я использую в MVC2:

 <% using (Html.BeginForm("Delete", "Item", new { id = item.Id }, FormMethod.Post, new { onsubmit = "return confirm('Are you sure you want to delete "   item.DisplayString   "?');" }))
                   { %>
                <input class="link-button" type="submit" value="Delete"  />
                   <% } %>
  

И CSS моей кнопки:

 .link-button {
    border: 0;
    padding: 0;
    background: inherit;
    font: inherit;

    cursor: pointer;
    text-decoration: underline;
    color: #034af3;

    overflow: visible;
}
  

Затем, конечно, поместите [HttpPost] атрибут в метод контроллера, который фактически удаляет элемент.

Комментарии:

1. Большое вам спасибо! Это сработало! Супер! На случай, если другие задаются вопросом о версии синтаксиса razor… @using (Html.BeginForm(«Деактивировать»,…) { содержимое вашей формы здесь }

Ответ №2:

Вам нужно будет использовать аутентификацию для установления привилегий, а также проверки пользователей. Хорошим местом для начала является веб-сайт ASP: http://www.asp.net/mvc/tutorials/authenticating-users-with-forms-authentication-cs