По сути, чем вызов AJAX отличается от отправки формы в ASP.NET?

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

Мой вопрос: если бы я должен был проверить, скажем, пароль, используя вызов ajax вместо отправки формы в ASP.NET, есть ли риск безопасности или общая существенная разница в использовании ajax вместо формы? Лучше использовать тот или иной?

Насколько я понимаю, если это через HTTPS, то нет угрозы безопасности, но я чувствую, что это может быть неправильно.

Обновлено: это для веб-форм, а не для MVC.

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

ADyson 06.03.2019 17:39

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

ADyson 06.03.2019 17:40

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

ADyson 06.03.2019 17:44

Это веб-формы. Я делаю те же проверки на стороне сервера, конечно, но для среднего, незлонамеренного пользователя приятно получить немедленную обратную связь «ваше имя пользователя слишком короткое», вместо того, чтобы ждать, пока сервер отправит обратную передачу и в конечном итоге сообщит вам об этом. . Но если, как вы сказали, я выполняю все те же проверки на стороне сервера и использую HTTPS, чтобы не было угрозы безопасности, тогда я буду продолжать делать это таким образом. Спасибо! :)

el toro 06.03.2019 17:45

«приятно получать немедленную обратную связь о том, что «ваше имя пользователя слишком короткое», вместо того, чтобы ждать, пока сервер выполнит обратную передачу»... как я уже упоминал, вы можете сделать это, не переключаясь на AJAX. Если вы уже используете ValidationControls, он должен быть предоставлен из коробки (я забыл, есть ли переключатель конфигурации для его включения, прошло несколько лет с тех пор, как я переключил форму WebForms на MVC (и никогда не оглядывался назад, гораздо проще работать с !).

ADyson 06.03.2019 17:49

Это был просто пример, но да, я знаю, не волнуйтесь. Лучший пример — проверка существования имени пользователя. Вы можете сделать это, ожидая обратной передачи, или выполнить вызов AJAX, пока пользователь заполняет другие поля, и вернуться, если он существует или нет, без необходимости отправки. Это лучший пример, почему я хотел переключиться на этот метод. :)

el toro 06.03.2019 17:58

да, это очень хороший вариант использования AJAX, я согласен. Это похоже на форму удаленной проверки, если хотите, то есть вы делаете то, что по сути является шаблоном проверки на стороне клиента, за исключением того, что он вызывает сервер для фактического выполнения теста, а затем возвращает результат для JS для отображения результата. Конечно, если вы затем отдельно отправляете заполненную форму, содержащую поле, заполненное этим именем пользователя, проверенным ajax, вам все равно придется проверять его снова (поскольку оно может быть изменено после запуска ajax) на сервере во время отправки основной формы.

ADyson 06.03.2019 17:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
34
0

Другие вопросы по теме