2015-05-04 3 views
2

В настоящее время я изучаю Asp.Net MVC (я исхожу из фона WebForms), и я реализую Ajax-запросы для вызова методов контроллера, которые возвращают объекты Json. Но проблема, с которой я столкнулся, - это когда я хочу выполнить определенные действия до тех пор, пока пользователь не достигнет какого-либо этапа, например, добавив дополнительный ввод текста, добавив кнопку сохранения, создав новый список опций, проблема в том, что когда пользователь аутентифицирован. Я могу выполнить вызов ajax с консоли разработчика (например, Google Chrome) и получить или отправить объект json, необходимый для этого конкретного метода, даже если этот метод имеет атрибут [Авторизовать] (когда пользователь правильно зарегистрирован) и AntiForgeryToken настроен с небольшим знанием jQuery, MVC и взглядом на вкладку «Сеть» (в Chrome), я могу подделать, что вызов был выполнен из-за действия пользователя, которое я разрешил из кода, а не из того, что он был сделан с консоли (I испытал себя, и это сработало). Я знаю, что мне нужно выполнить двойную проверку, клиентскую и серверную. Это не проблема, когда валидаций не так много, но когда число увеличивается, это может быть утомительным.Есть ли способ скрыть/закодировать или защитить вызов ajax?

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

Thanks ,

+0

Что вы спрашиваете? вы пытаетесь спросить, есть ли способ разрешить ajax-вызовы из кода, но заблокировать их, если они были введены вручную в консоли? –

+0

@Scott Selby - Да, что-то в этом роде. – jecarfor

+0

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

ответ

0

AuthorizeAttribute в качестве дополнительного необязательного параметра Roles

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

Один из вариантов - назначить особую роль пользователю, когда они смогут достичь определенных действий контроллера (через Ajax или иначе) и управлять доступом с помощью параметра Роли.

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

UPDATE

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

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

+0

Я знаю Мне нужно выполнить проверку на стороне сервера, но проблема в том, что пользователь подделывает запрос с консоли, и он аутентифицирован, и проверки могут быть многочисленными. – jecarfor

+0

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

+0

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

0

вы никогда не сможете этого сделать, если пользователь веб-сайта имеет разрешение для соответствующего контроллера - тогда любые вызовы ajax, сделанные с консоли, будут иметь один и тот же сеанс и одинаковые файлы cookie и будут предоставлены одинаковые разрешения -

Что бы вы могли сделать, это добавить длинный раздражающий токен для каждого вызова ajax в качестве дополнительной проверки подлинности, но затем пользователь может просто пойти и посмотреть трафик ajax и скопировать и вставить этот токен в свой вызов ajax.

+0

Итак, лучшее, что нужно сделать, - сделать сложную жизнь в стиле «умный», добавив слой, например, токены защиты, к моим вызовам ajax, прыгая, он не понимает, как они работают правильно. – jecarfor

+0

@jecarfor: Это не поможет. Если они уже наблюдали, как выглядит действительный запрос (используя сетевую трассировку, доступную в любом браузере), они могут просто отключить один и тот же запрос от консоли или от своего собственного приложения. –

+0

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

-1

Ajax calls немного сложно сделать безопасным. Токены помогут остановить междоменные запросы.Но тот же пользователь может получить доступ к другим данным, используя один и тот же вызов. Хорошей техникой является использование авторизации на основе утверждений на основе asp.net или просто проверка в вашем контроллере для пользователя и связанных с ним данных. Если этот пользователь не имеет отношения к данным, которые он запрашивает, затем генерирует исключение.

JK.

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