【问题标题】:Is using asp.net validators enough?使用 asp.net 验证器是否足够?
【发布时间】:2014-09-03 07:09:54
【问题描述】:

我正在使用 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(object sender, 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";
    }

}

【问题讨论】:

  • 在服务器端使用Page.Validate()
  • @TimSchmelter:我在回答中添加了您的评论。谢谢。
  • 好的先生,但只是 Page.Validate() ?就这些?
  • @user3518032:是的,就是这样。
  • 好的,先生,具体放在哪里?在页面加载事件中? !回发事件?或任何按钮?

标签: c# asp.net validation requiredfieldvalidator


【解决方案1】:

当客户端上没有 javascript(不太可能但可能)时,您最终可能会关闭验证。此外,有人可能会试图通过将数据直接发布到您的网站来绕过您的检查。

对于这些情况,您始终需要服务器端验证。

根据MSDN: Validating ASP.NET Server Controls(强调我的):

使这些验证服务器控件有效的原因在于,当请求包含这些控件的 ASP.NET 页面时,由 ASP.NET 引擎决定是否在客户端执行验证或 em> 在服务器上 取决于发出请求的浏览器。

似乎验证使用了一个,而不是两个。

您可以按照Tim Schmelter的建议调用Page.Validate()来确保数据有效。

【讨论】:

  • +1 我没有意识到只有在 JS 不可用时才进行服务器端检查
  • 不是我会怎么做,但没关系。我会认为检查客户端是否完成的风险/费用超过了检查两次的性能。
  • 非常感谢,所以这意味着通过使用 asp.net 验证器,我不像 js 验证器那样安全?对吗?
  • 是的。并且绝对确定,在处理内容以强制服务器端验证之前,请在服务器端调用 Page.Validate()
  • 例如在提交按钮的事件处理程序上。
【解决方案2】:

是的,因为 .NET 验证器在客户端和服务器端都包含验证逻辑。正如您所指出的那样,有人可以关闭 javascript(或者只是将信息发布到自己的页面),在这种情况下,客户端验证不会触发,但服务器端逻辑仍会保护您。

来自MSDN

验证控件在服务器代码中执行输入检查。当。。。的时候 用户向服务器提交页面,验证控件被调用 通过控制来检查用户输入。如果验证错误是 在任何输入控件中检测到,页面本身设置为 无效状态,因此您可以在代码运行之前测试其有效性。 验证发生在页面初始化之后(即视图状态之后 和回发数据已被处理)但在任何更改或单击之前 事件处理程序被调用。

有一个custom validator,您可以在其中添加自己的验证检查。在此控件上,出于相同的原因,您必须同时在客户端和服务器上执行检查。

【讨论】:

  • 非常感谢,所以这意味着通过使用 asp.net 验证器,我不像 js 验证器那样安全?对吗?
  • @user3518032 正确。 JS 验证器不在服务器上运行,.NET 验证器可以在需要时运行。
【解决方案3】:

这是真的:客户端验证确保您将获得的数据将是有效的,只要用户不干扰客户端/伪造响应/使用另一个客户端。但是,您永远无法确定这一点,因此您还需要进行服务器端验证。

好消息是,如果数据没有通过该验证,则意味着客户端做了一些令人讨厌的事情,因此您不必想一个好的和有用的方法来向他展示错误。

【讨论】:

  • 关于你的最后一段,我可以看到你要去哪里,但我会犹豫。您最终可能会惩罚那些(无论出于何种原因)不想在他们的浏览器上启用 JS 的网站用户。
  • 非常感谢,所以这意味着通过使用 asp.net 验证器,我不像 js 验证器那样安全?对吗?
猜你喜欢
  • 2010-12-06
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
相关资源
最近更新 更多