Как защитить приложения asp.net mvc5? - PullRequest
0 голосов
/ 04 декабря 2018
<authentication mode="Forms"/>
 <forms loginUrl="~/Login/Login" defaultUrl="~/Login/Something" protection="All"></forms>
</authentication>   

Один из способов - добавить тег авторизации к каждому контроллеру для защиты приложения от неавторизованного пользователя. Другой способ - использовать переменные сеанса для хранения пользовательской информации. Итак, мой вопрос с точки зрения взлома, как мы можем защитить наше приложениеФорма хакеров? Есть ли другой способ обезопасить приложение?

1 Ответ

0 голосов
/ 06 декабря 2018

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

Защита контроллеров

Первый шаг - применить [Authorize] к вашим контроллерам, чтобы убедиться, чтоперед доступом к методу существует какая-то действительная аутентификация.Желательно добавить Authorize ко всем контроллерам и сделать исключения с [AllowAnonymous], чтобы сделать его безопасным по умолчанию.

Авторизовать пользователя

Даже если вы добавили [Authorize] кконтроллер, это только означает, что пользователь вошел в систему, а не то, что пользователь должен иметь доступ к тому методу, к которому осуществляется доступ.Первым шагом является расширение атрибута путем указания набора ролей для метода: [Authorize(Roles = "Administrator"]

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

Не допускайте утечки данных в модели

Если вы используете свои фактические модели данных в качестве моделей представления, вы рискуете позволить пользователю ввести больше данных, чем он должен.Рассмотрим следующий пример:

class Employee {
    public int Id { get; set; }
    public string Name { get; set; }
    public int Salary { get; set; }
}

Предположим, что мы по какой-то причине разрешаем нашим сотрудникам менять свое имя, и для этого мы используем модель Employee.Но, конечно, мы делаем только поле редактирования для Name, а не Salary, как это было бы глупо: D.Однако из-за того, как работает привязка модели, умный Сотрудник может просто добавить <input type="text" name="Salary" value="2147483647"> к форме при изменении их имени, и наш доверчивый db.Entry(employee).State = EntityState.Added;, за которым следует db.SaveChanges(), также обновит свою зарплату.

Решение?Либо создайте модель представления только со свойством Id и Name, чтобы сделать невозможным изменение зарплаты, либо используйте атрибут Bind, чтобы включить только те свойства, которые мы разрешаем: public IActionResult Update([Bind(Include="Id,Name")]Employee model).

XSS

Очень важной частью является защита ваших пользователей от плохого динамического контента.Если я могу ввести HTML и Javascript, который отображается для другого пользователя, я могу злоупотребить этим, например, чтобы украсть их маркер аутентификации.Создание никогда не отображать введенные пользователем данные в виде HTML является первым шагом, чтобы предотвратить это.Вы также должны всегда использовать маркер против подделки в своих формах.Добавление заголовков CSP - это хорошая практика, которая запрещает кому-либо вводить сценарии, которых там быть не должно.

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