2

я следующий метод действия внутри asp.net mvc5, который я определяю как ChildActionOnly: -Проблемы безопасности при использовании Html.Action для вызова [ChildActionOnly] действие метод

[ChildActionOnly] 
public ActionResult GetChildRecords(int customerid) 

и я зову его, как следовать , в мой взгляд: -

<div>@Html.Action("GetChildRecords", "Customer", new {customerid = Model.CustomerID})</div> 

, но у меня есть следующие вопросы: -

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

  2. могут ли пользователи или хакеры напрямую обращаться к ChildActionOnly напрямую?

  3. могли пользователей или хакеров изменить параметры Html.Action, например, для передачи другого КодКлиента в ниже HTML: -

@ Html.Action ("GetChildRecords", "Клиент", новый {customerid = Model.CustomerID})

?

ответ

3

Суть атрибута [ChildActionOnly] заключается в том, чтобы он вызывался только с использованием Action или RenderAction и не может быть вызван непосредственно из браузера.

На вопрос 1: Если действие вызова уже имеет атрибут [Authorize], вам не нужно беспокоиться

На вопрос 2: хакеры (или кто) не может получить доступ к нему.

Для вопроса 3: поскольку они не могут напрямую вызвать действие, я не уверен, что его беспокоит. Но проверяйте на стороне сервера все время за любой ввод, который вы получаете (формы, строка запроса и т. Д.).

+0

спасибо за ответ, но я понимаю, что я не заботился о том, что мой метод действия вызывается с использованием запросов ajax, и кажется, что украшение моего метода действия с помощью [ChildActionOnly] не позволит ajax называть его. так что теперь я запутался, потому что мне нужно, чтобы мой метод действия вызывался либо с использованием ajax-запросов, либо с использованием Html.Action, но во время saem, чтобы пользователи или хакеры не вызывали его напрямую? может ли у вас быть способ справиться с этим? –

+0

@johnG Вы можете удалить '[ChildActionOnly]' и украсить действие с помощью '[Authorize]'. И в действии либо проверьте, что этот клиент вошел в систему, имеет право проверить клиента, который он предоставляет .. или вы можете использовать для этого фильтр. – scartag

1

Я согласен с ответом от @scartag на вопросы 2 и 3:

2 - это ребенок действие, поэтому он не может быть вызван непосредственно

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

На вопрос 1, я думаю, что это будет хорошей защитой в глубину, чтобы разрешить ребенку действия:

  • Сегодня, это может быть так, что все родительские действия разрешены, но что в будущем , Что делать, если другой разработчик не понимает, что предполагается и использует дочернее действие для нового, несанкционированного родительского действия? Возможно, вы могли бы использовать комментарии к коду, чтобы уменьшить вероятность этого, но зачем рисковать?
  • В зависимости от сложности модели разрешений приложений логика авторизации родителя может отличаться от логики дочернего элемента. Опять же, сегодня это может быть не так, но может быть и в будущем.