2017-01-15 6 views
1

Я хочу определить, пытается ли пользователь делать overposting attack в Asp.NET MVC.Как я могу обнаружить атаку overposting в ASP.MVC во время привязки модели?

Как определить, посылает ли кто-нибудь специальные значения (например, с помощью Fiddler) на мой контроллер?

Обратите внимание на «привязывать» ниже атрибут

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "LastName, FirstMidName, EnrollmentDate")]Student student) 
{ 
    try 
    { 
     if (ModelState.IsValid) 
     { 
      db.Students.Add(student); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
    } 
    catch (DataException /* dex */) 
    { 
     //Log the error (uncomment dex variable name and add a line here to write a log. 
     ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator."); 
    } 
    return View(student); 
} 

атрибуте Bind является одним из способов защиты от перегрузок проводки в создания сценариев. Например, предположим, что объект Student включает свойство « », которое вы не хотите устанавливать на этой веб-странице.

public class Student 
    { 
     public int ID { get; set; } 
     public string LastName { get; set; } 
     public string FirstMidName { get; set; } 
     public DateTime EnrollmentDate { get; set; } 
     public string Secret { get; set; } 

     public virtual ICollection<Enrollment> Enrollments { get; set; } 
    } 

Даже если у вас нет Секретный поле на веб-странице, хакер может использовать такой инструмент, как скрипача, или написать несколько JavaScript, чтобы опубликовать секретное значение формы. Без атрибута Bind, ограничивающего поля, которые использует связующее устройство , когда он создает экземпляр Student, привязка модели будет отображать это значение секретной формы и использовать его для создания экземпляра объекта Student . Затем любое значение, указанное хакером для поля секретной формы , будет обновляться в вашей базе данных. Следующее изображение показывает инструмент скрипача, добавляющий поле «Секрет» (со значением «OverPost») к опубликованным значениям формы.

+0

Настройте ответ от Дарина ниже.В противном случае наилучшим вариантом будет использование службы брандмауэра для веб-приложений или веб-приложений - у них будет доступ к журналу, для чего вам нужно - для чего они нужны, и если ваше приложение не работает в одном бизнесе, вам небезразлично своя. Атаки в основном происходят из «везде» - все эти данные (источники атак) бесполезны, если вы не можете понять это ** и ** действовать на них соответственно - это то, что услуги делают для вас. Другая очевидная выгода заключается в том, что вашему приложению не придется выполнять «лишнюю» работу с ними. – EdSF

ответ

4

Если вы используете модели для просмотра, то перенапряжение не будет проблемой для вас, а не тем, что вас беспокоит. Причина этого заключается в том, что вы будете включать только те свойства, которые, как предполагается, поступают с пользовательского ввода в вашей модели представления. Затем вы получите фактический объект из своей базы данных и слейте оба. Таким образом, все объекты sensible будут оставаться нетронутыми. Итак, как правило: всегда используйте модели представлений в приложении ASP.NET MVC - все ваши действия контроллера POST, которые должны изменить какое-либо состояние на сервере, должны иметь модель представления, а не модель сущности.

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

+0

Мое намерение состоит в том, чтобы регистрировать/блокировать/блокировать IP-адреса и пользователей, которые пытаются делать неприятные вещи. – LamonteCristo

+1

Если вы используете модели просмотра, то не будет пользователей, пытающихся сделать неприятные вещи, потому что ваше приложение будет сконструировано таким образом, чтобы оно не позволяло им :-) Таким образом, не нужно будет регистрировать такие потому что такое поведение будет невозможно. Поэтому, если вы выставите вектор атаки в своем приложении, тогда поверьте мне, как бы вы ни старались, и как интеллектуальная система ведения журналов вы ставите на место, они в конечном итоге выбьют вас. –

+0

Согласен - я буду использовать viewmodel, но я все еще хочу собрать знания о том, кто достаточно опытный (опасный или доверчивый), чтобы в конечном итоге сделать что-то такое. – LamonteCristo

0

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

так, как вы в настоящее время есть свой набор контроллеров, вы никогда не будут подвергаться такой атаке, но вы могли бы попытаться ухватить данных сырых POST будет отправлен Вам с (Reference)

HttpContext.Current.Request.InputStream.Position = 0; 
var result = new System.IO.StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd(); 

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

Я полностью понимаю и согласен с вашей точкой зрения, я постоянно анализирую нарушения безопасности. Но действительно ли это влияет на производительность для вектора, который закрыт? Основываясь на моем опыте, вы не сможете отмечать какой-либо IP-адрес, поскольку мы можем использовать VPN, чтобы обойти его или даже TOR.