JavaScript验证不好吗?


68

自从我们使用JavaScript验证表单以来,已经很长时间了。我敢肯定,大多数其他开发人员都是如此。

题:

如果用户(或可能是坏人)禁用JavaScript怎么办?

你迷路了!

  • JavaScript验证值得吗?
  • 我们现在应该使用它吗?
  • 有什么解决办法吗?

如果我错了,请纠正我。

Answers:


164

JavaScript验证值得吗?

是的,因为它可以提供更好的用户体验并保留带宽。

我们现在应该使用它吗?

是的,由于上述原因。

有什么解决办法吗?

是的,也请使用服务器端验证。


服务器端也是如此?那么,大量的工作不只与服务器端一起进行吗?
Sarfraz

6
这就是.NET框架的验证部分在添加验证器时同时创建javascript和服务器端验证代码的原因。
Jan Jongboom 09年

26
+1:无论如何,您必须在服务器上进行完全验证,但是JS验证使用户的工作变得更好。您的评论Sarfraz有点像在说:“我们需要提供用于脚本编写的命令行界面?为什么还要在其之上构建GUI?”
Andrzej Doyle,2009年

10
+ 1,js验证只是为了方便起见,服务器端验证必不可少!这通常是新手项目的更大安全漏洞!
Strae

1
开发人员不喜欢在客户端和服务器上进行验证的部分原因是因为它似乎违反了DRY原则。可以通过在服务器和客户端使用相同的验证代码(在使用GWT或Node.js之类时使用)或从同一来源生成服务器端和客户端检查(例如基于注释)来缓解这种情况在Java模型类上)。
Arnout Engelen

28

如果用户(或可能是坏人)禁用了JavaScript怎么办?

如前所述:根本不依赖客户。永远不要这样做。再次检查服务器上的所有内容。

我们现在应该使用它吗?

是的-用户可以立即看到问题所在。否则,他必须先发布数据,这可能需要一段时间。顺便说一下,您减少了服务器流量。

这只是更具启发性。

//编辑:顺便说一句:据我所知,ASP.NET ValidationRules包含客户端验证和服务器验证。


17

JavaScript验证是好的,因为它可以提供更好的用户体验。

但是,您应该永远依靠它和服务器上应该验证不管。


10

如果您希望节省时间,请仅使用服务器端。如果要获得更好的性能和用户体验,请在以后添加客户端验证。出于您陈述的原因,切勿依赖客户端验证。所有关键验证都应在服务器上进行...即使在客户端重复。


10

JavaScript可以改善产品或服务的用户交互。用户交互(用户输入和机器响应,反之亦然)是我们应用程序的重要特征。众所周知,产品比以往任何时候都更具交互性。而这种互动部分能够(只)在JavaScript(精雕细琢的ActionScriptFlash播放器)。我们都同意这一点-总有一定数量的工作量可以转移到客户端(机器),以避免在不打扰发送给服务器的情况下避免调用。有许多应用程序严重依赖于客户端脚本脚本。如果他们发现您不允许使用必需的脚本,他们会要求您在其中留言noscript标签。但是我认为每个人都希望启用它,因为我们都使用Gmail,Facebook等启动了一个标签页。

但是,这仍然不容忽视,因为我们渴望抓住每一个机会(受众/客户),并且与之合作至少比分崩离析更好。它仍然有效!

作为Microsoft开发平台用户,平台上有一个便捷的解决方案.NET。在这些问题上,不需要双重努力。使用和禁用脚本时,请使用客户端验证。Page.Validate()Page.IsValid

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack) {
        Page.Validate(); // If you missed, then you got the second chance ...
    }
}

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (Page.IsValid) { // Confirm you do a proper validation before moving to perform any process
        Response.Write("Done!");
    }
}

我希望这将有所帮助。


1
+1感谢您的回答,我现在有了更好的主意了:)
Sarfraz

6

客户端(Javascript)验证与可用性有关,仅此而已。如果实施成本不值得考虑的可用性提高,那么就不要花时间在上面。这些天虽然很容易做到!

我认为没有服务器端验证就无法做,因为这是唯一为您提供任何安全性的工具。


6

使用JavaScript没错。我们已经使用了很长时间了。它用于应用客户端验证。

尽管如此,我们仍应实施服务器端验证,以使坏人无法破坏应用程序。


5

如果您从该主题中学到的只有一件事,那就这样:

从不(在任何情况下)都信任来自浏览器的数据,并始终在服务器端验证请求数据。

我们现在应该使用它吗?

当然是。您无需在服务器端验证空白字段。这与验证电子邮件的可用性(电子邮件的唯一性)不同。如果仍然要拒绝该空字段,则没有必要将其发送到服务器并使服务器为此做更多的工作。


5

您必须在服务器端进行验证,而javascript可以很好地验证表单,但是人们可以禁用javascript或使用其他javascript对其进行破解,因此必须在服务器端进行验证。


4

JavaScript对于客户端验证很有用。但是您不能仅依靠它们。您必须对发布的数据使用服务器端验证。JavaScript只是防止不必要的发布到服务器。


4

通过使用支持两者的框架,可以使服务器验证和客户端验证变得非常轻松。过去,对于ASP.NET,我使用了Peter Blum验证器:

http://peterblum.com/

这样,您就可以将验证控件放到页面上,将它们连接到输入(文本框,下拉列表等),并指定验证属性(最小长度,必填项,错误消息等)。当页面运行时,框架会为客户端(JavaScript)和服务器(ASP.NET)吐出等效代码以执行验证。

正如其他发布者所指出的那样,如果没有这样的框架,验证可能会很费力。

我很想知道PHP或其他技术的相似之处。


4

您应该具有多层验证。

客户端验证

这绝对有用,因为无需登录服务器即可完成验证。验证后,请求就会到达服务器-节省一些流量。

在服务器端进行验证

如果禁用了javascript,则服务器还应包含保护级别-验证,以禁止错误请求。


3

在多层/面向服务的环境中,验证应在多个级别上进行,以便在保持安全应用程序的同时更好地重用。无论是在桌面应用程序中还是在网站/应用程序中,都应该在客户端进行验证,以提供更好的用户体验,以防止每次都回发到服务器进行验证,从而浪费更多的带宽和用户时间。如果客户端验证不能完全移到前端,则可以考虑使用ajax将其部分回发到服务器端验证例程,同时保留更好的客户体验,但允许程序员集中维护验证规则。

其次是客户端,但更重要的是,服务器端代码应在对数据进行持久化或将其传递给另一服务器端方法/服务之前验证数据,以围绕数据采用业务规则并帮助防止数据完整性错误。最后,持久层本身(与数据库或其他存储机制的直接接口)应验证所存储的数据,以再次防止数据完整性错误和可能的其他业务规则。您想要的最后一件事是包含无用数据的数据存储。

使用此方法将使您的数据安全和完整。如果重新设计了持久层,数据层或此后的前端演示文稿,则可以在自己的站点(或通过Web服务,桌面应用程序或移动应用程序)中对它们进行重用(如果设计得当),这些验证例程已经到位并且可以重新就业。如果您是团队工作,那么这对您自己以及您的同事和管理层都是非常有益的。


0
Is JavaScript validation worth of it?

好吧,是的。购买使用JavaScript验证,可以比JavaScript验证更轻松地获取有关客户端站点的任何信息,从而提供更好的用户体验

   Should we ever use it now?

是的,您可以这样做,因为用户可以实时看到错误或他们在做什么错

Are there any solutions to this?

是的,您也可以使用服务器端验证。但是有时它会花费更多时间。它也不安全

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.