2009-05-20 4 views
1

я создал контроллер:Javascript инъекции осины MVC

[Authorize] 
    [AcceptVerbs(HttpVerbs.Delete)] 
    public ActionResult Delete(int id) 
    { 
     try 
     { 
      db.DeleteObject(db.AEROLINEA.FirstOrDefault(x => x.AEROLINEAID == id)); 
      db.SaveChanges(); 
     } 
     catch { /* TODO:Display message*/ } 

     return View(); 
    } 

если я выполнить в поджигатель следующий Javascript кто вошел может удалить авиакомпанию, даже если он оленья кожа разрешения на удаление

var action = "/Airline/Delete/" + recordId; 

    var request = new Sys.Net.WebRequest(); 
    request.set_httpVerb("DELETE"); 
    request.set_url(action); 
    request.add_completed(deleteCompleted); 
    request.invoke(); 

ХАУ может избежать этой проблемы ???

ответ

2

Вы можете фильтровать роли:

Пример:

[Authorize(Roles="Admin")] 
    [AcceptVerbs(HttpVerbs.Delete)] 
    public ActionResult Delete(int id) 
    { 
     try 
     { 
      db.DeleteObject(db.AEROLINEA.FirstOrDefault(x => x.AEROLINEAID == id)); 
      db.SaveChanges(); 
     } 
     catch { /* TODO:Display message*/ } 

     return View(); 
    } 
+0

разрешить проверить, ou имеют доступ к этой точке зрения? или только убедитесь, что вы зарегистрированы? – 2009-05-20 19:16:32

+0

Он проверяет, принадлежит ли зарегистрированный пользователь, например: «Администратор», что означает, что он имеет доступ к этому конкретному методу действия. Но сначала вам нужно создать роль. – 2009-05-20 19:25:43

+0

, который бы не работал для меня, потому что новые роли могут быть созданы пользователем динамически. , но реальная проблема заключается в следующем: если кто-то имеет доступ к методу удаления, он может передать что-либо в идентификаторе и может удалить любую авиакомпанию, даже если она не указана в представлении (потому что у него нет прав на эту авиакомпанию.) – 2009-05-20 20:07:40

0

Или использовать AntiforgeryToken с сочной соли на вид ..

+0

AntiforgeryToken действительно интересен, но он не решает мою проблему, но приятно знать, что он существует, спасибо – 2009-05-20 20:21:17

0

[Авторизоваться] без параметров позволяет чтобы указать, что пользователь должен войти в систему. Вы также можете указать пользователей/роли, уполномоченные на доступ к вашему действию.

Смежные вопросы