Итак, я преобразовал некоторый код из отправки формы в вызовы ajax, поскольку проверка отправки формы требует обратной передачи и вычислений сервера, которые занимают много времени и обеспечивают плохой UX, где вместо этого я могу проверить некоторые из них с помощью Javascript и отдых с вызовом ajax в фоновом режиме, пока пользователь занимается другими делами.
Мой вопрос: если бы я должен был проверить, скажем, пароль, используя вызов ajax вместо отправки формы в ASP.NET, есть ли риск безопасности или общая существенная разница в использовании ajax вместо формы? Лучше использовать тот или иной?
Насколько я понимаю, если это через HTTPS, то нет угрозы безопасности, но я чувствую, что это может быть неправильно.
Обновлено: это для веб-форм, а не для MVC.
В общем, AJAX часто дает вам способ обеспечить более плавный UX, и это хорошая причина для его использования. Если вы отправляете и получаете те же данные, что и через обратную передачу (даже если, возможно, сейчас они в формате JSON, а не входящие данные формы и выходной HTML), и выполняете те же проверки входных данных на сервере, то это не должно увеличивать риск вашей безопасности. Это также может, как вы говорите, повысить производительность за счет отсутствия необходимости выполнять вычисления для повторной загрузки других частей страницы, которые на самом деле не изменились из-за последнего действия пользователя.
В WebForms механизм обратной передачи включает в себя некоторую встроенную в инфраструктуру защиту, чтобы попытаться смягчить последствия подделки запроса, CSRF и подобных вещей. Вы можете легко воссоздать защиту CSRF, в частности, при использовании AJAX, но вам просто нужно добавить и проверить токены самостоятельно (там может быть библиотека, я не знаю - в MVC она встроена независимо от того, что тип запроса), так что это не обязательно потеря.
Это веб-формы. Я делаю те же проверки на стороне сервера, конечно, но для среднего, незлонамеренного пользователя приятно получить немедленную обратную связь «ваше имя пользователя слишком короткое», вместо того, чтобы ждать, пока сервер отправит обратную передачу и в конечном итоге сообщит вам об этом. . Но если, как вы сказали, я выполняю все те же проверки на стороне сервера и использую HTTPS, чтобы не было угрозы безопасности, тогда я буду продолжать делать это таким образом. Спасибо! :)
«приятно получать немедленную обратную связь о том, что «ваше имя пользователя слишком короткое», вместо того, чтобы ждать, пока сервер выполнит обратную передачу»... как я уже упоминал, вы можете сделать это, не переключаясь на AJAX. Если вы уже используете ValidationControls, он должен быть предоставлен из коробки (я забыл, есть ли переключатель конфигурации для его включения, прошло несколько лет с тех пор, как я переключил форму WebForms на MVC (и никогда не оглядывался назад, гораздо проще работать с !).
Это был просто пример, но да, я знаю, не волнуйтесь. Лучший пример — проверка существования имени пользователя. Вы можете сделать это, ожидая обратной передачи, или выполнить вызов AJAX, пока пользователь заполняет другие поля, и вернуться, если он существует или нет, без необходимости отправки. Это лучший пример, почему я хотел переключиться на этот метод. :)
да, это очень хороший вариант использования AJAX, я согласен. Это похоже на форму удаленной проверки, если хотите, то есть вы делаете то, что по сути является шаблоном проверки на стороне клиента, за исключением того, что он вызывает сервер для фактического выполнения теста, а затем возвращает результат для JS для отображения результата. Конечно, если вы затем отдельно отправляете заполненную форму, содержащую поле, заполненное этим именем пользователя, проверенным ajax, вам все равно придется проверять его снова (поскольку оно может быть изменено после запуска ajax) на сервере во время отправки основной формы.





Вызов AJAX — это просто еще один тип HTTP-запроса, так что в этом смысле нет большой разницы. Вы должны использовать HTTPS, будь то AJAX или нет. И какой бы дизайн вы ни использовали, вы никогда не должны полагаться только на JavaScript для проверки. Можно улучшить UX, выполнив проверку на стороне клиента (и опять же, это можно сделать с помощью обратной передачи, а не только с помощью AJAX), но это может быть довольно легко обойдено злоумышленниками, поэтому вы должны всегда также выполнять проверку на стороне сервера. , независимо от того, как происходит запрос.