Достаточно ли использовать валидаторы asp.net?

1

Я использую проверку asp.net как обязательный полевой валидатор и т.д. Мне интересно, достаточно ли поставить эти валидаторы или что-то в бэкэнд? Я имею в виду, что он работает нормально, но я слышал, что валидация также должна выполняться в бэкэнд и т.д., Потому что проверка на стороне клиента может быть отключена, что приведет к сбою приложения? так это правда?

например

<asp:TextBox ID="txtFrom" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                                ControlToValidate="txtFrom" Display="None" ErrorMessage="" 
                                ForeColor="Red" >
     </asp:RequiredFieldValidator>
    &nbsp; To :
    <asp:CalendarExtender ID="Calender" Format="dd/MMM/yyyy" runat="server" TargetControlID ="txtFrom"></asp:CalendarExtender>
    <asp:TextBox ID="txtTo" runat="server"></asp:TextBox>
      <asp:CalendarExtender ID="CalendarExtender1" Format="dd/MMM/yyyy" runat="server" TargetControlID ="txtTo"></asp:CalendarExtender>
    <asp:RequiredFieldValidator ID="RequiredFieldValisdator9" runat="server" 
                                ControlToValidate="txtTo" Display="None" ErrorMessage="" 
                                ForeColor="Red" >
     </asp:RequiredFieldValidator>

Ребята, спасибо за добрые ответы, я попытался проверить страницу на странице отправки, вот так, правильно ли?

protected void btnGenReport_Click (отправитель объекта, EventArgs e) {//Это событие создает отчет о жалобах между конкретными датами.

    try
    {
       //my report binding code

    }
    catch (Exception ex)
    {
        Response.Write(ex.Message.ToString());
    }

    Page.Validate();
    if (Page.IsValid)
    {
        txtFrom.Text = "Validated";
    }
    else 
    {
        txtFrom.Text = "NOT VALIDATED";
    }

}
  • 1
    Используйте Page.Validate() на стороне сервера.
  • 0
    @TimSchmelter: я добавил ваш комментарий в свой ответ. Благодарю.
Показать ещё 3 комментария
Теги:
validation
requiredfieldvalidator

3 ответа

5
Лучший ответ

Когда на клиенте нет javascript (маловероятно, но возможно), вы можете завершить свою проверку. Кроме того, кто-то может попытаться обойти ваши проверки, разместив данные непосредственно на вашем веб-сайте.

Для этих ситуаций вам всегда нужна проверка на стороне сервера.

Согласно MSDN: проверка элементов управления ASP.NET Server (выделение мое):

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

Кажется, что валидация использует одно, а не то, и другое.

Вы можете убедиться, что данные действительны, вызвав Page.Validate() как это предложил Тим Шмельтер.

  • 2
    +1 Я не понял, что проверка на стороне сервера была сделана, только если JS не был доступен
  • 1
    Не так, как я бы это сделал, но не бери в голову. Я бы подумал, что риск / затраты на проверку того, была ли сделана сторона клиента, перевешивает эффективность проверки дважды.
Показать ещё 6 комментариев
2

Да потому, что.NET validators содержат логику проверки как на стороне клиента, так и на стороне сервера. Как вы указали, кто-то может отключить javascript (или просто разместить информацию на самой странице), в этом случае проверка на стороне клиента не будет срабатывать, но логика на стороне сервера по-прежнему будет защищать вас.

Из MSDN:

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

Существует специальный валидатор, в котором вы можете добавить свои собственные проверки. На этом контроле вы должны выполнить проверку как на клиенте, так и на сервере по тем же причинам.

  • 0
    Большое спасибо, так что это означает, что с помощью валидаторов asp.net я безопасен в отличие от валидаторов js? правильно ?
  • 0
    @ user3518032 правильно. Валидаторы JS не работают на сервере, а .NET могут при необходимости.
Показать ещё 1 комментарий
1

Это верно: проверка на стороне клиента гарантирует, что данные, которые вы получите, будут действительны до тех пор, пока пользователь не будет связываться с клиентом/подделать ответ/использовать другой клиент. Тем не менее, вы никогда не сможете быть уверены в этом, так что вам также потребуется проверка на стороне сервера.

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

  • 0
    Что касается вашего последнего абзаца, я могу видеть, куда вы идете, но я буду колебаться. Вы можете наказать пользователей вашего сайта, которые (по какой-либо причине) не хотят включать JS в своем браузере.
  • 0
    Большое спасибо, так что это означает, что с помощью валидаторов asp.net я безопасен в отличие от валидаторов js? правильно ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню