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

#c# #asp.net #ajax

#c# #asp.net #ajax

Вопрос:

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

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

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

Редактировать: Это для Webforms, а не MVC.

Комментарии:

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

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

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

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

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