验证服务器控件是否比JavaScript更好?

3

验证服务器控件是否比JavaScript更好?它们在某些方面约束我们,因为我们只能使用它们提供的功能。请在此帮忙解答。我在自己的博客上读到了有关验证服务器控件的信息。


好的,我们认识到应该同时进行服务器端和客户端验证。但是我们如何决定使用验证控件还是仅使用JavaScript呢?我想到的一个问题是与不同浏览器的兼容性......以及它们的更新和可维护性。 - HotTester
我认为没有人给出了准确的答案!!! - user238819
在与我在微软的朋友交谈后,我得到了以下好建议。出现的一个问题是,如果我们在.js文件中使用javascript,则可以在整个应用程序中重复使用它,另一方面,如果我们使用验证控件并为它们设置某些特定的设置,并且它们将在整个应用程序中使用,则我们必须一遍又一遍地在每个页面中编写这些设置!仍在努力寻找完美的答案... - HotTester
我会说没有完美的答案。如果内置的验证控件可以满足您的需求,并且实现成本比直接性能更重要,那么我认为没有理由不使用它们。但是,如果您有无法使用内置控件满足的需求,那么显然您必须自己编写代码。 - mo.
4个回答

7
最好在客户端和服务器上都使用验证:
在客户端进行验证可以立即反馈,无需不断往返服务器。这会带来更好的用户体验。
在服务器上进行验证是必要的,以确保您不会得到错误数据。毕竟,恶意用户可以轻松地向您的服务器提交数据,而不经过客户端验证。
现在,关于如何实现该验证 - 如果内置的“工具包”控件为您执行适当的验证,则显然比编写自己的验证代码更简单。 ASP.NET 验证器可以为您执行客户端和服务器端验证。从 BaseValidator文档中了解更多信息:
验证控件总是在服务器上验证关联的输入控件。验证控件还具有完整的客户端实现,允许脚本启用的浏览器(如Microsoft Internet Explorer 4.0及更高版本)在客户端执行验证。客户端验证通过在将用户输入发送到服务器之前检查用户输入来增强验证过程。这样可以在提交表单之前在客户端检测到错误,避免了必要的服务器端验证信息往返。

5
通常,您应该进行服务器端数据验证。这可以确保您保护服务器免受恶意伪造请求的攻击,保护您的数据库不会输入无效数据(只要数据库本身没有处理)。如果您想使用工具或框架进行服务器端输入验证(如您链接的文章中所述),那就由您决定。
客户端验证,例如使用JavaScript,也很有用,但出于不同的原因:它可以让您在提交数据之前向用户提供有用的信息。
因此,这不是“或者”的问题,而是“以及”的问题。您实际上没有做任何重复的工作。客户端和服务器端验证只是为不同的目的服务(分别增强用户的可用性和保护您的服务的逻辑性和安全性)。
可能存在相同业务逻辑控制服务器和客户端验证的情况(例如对于邮政编码,您可以使用相同的正则表达式来检查和拒绝服务器端和客户端输入)。在这种情况下,您需要解决同步两个验证层的挑战(可以通过从与服务器端服务代码相同的业务逻辑模型生成页面+ JavaScript逻辑来完成)。
如果您仍然觉得自己正在做重复的工作,那么选择进行服务器端验证。(当然,您仍然可以使用此项服务来通知客户端,但需要响应才能这样做。)客户端验证不提供任何保护,因为客户端可以简单地手动伪造请求,或者从浏览器中禁用JavaScript,或者通过类似Greasemonkey脚本的方式修改客户端JavaScript。

0
用户可能会关闭JavaScript,这样您的验证程序将无法工作。最好在前端和服务器上都进行验证。

0

我从未使用过ASP,但据我猜测ValidationServerControls是开箱即用的控件,可以为您提供服务器端验证和客户端验证。(我可能错了)。 但据我所知,组件的服务器端验证始终是必需的;因为在javascript中放置验证永远不足够。客户端可以随时禁用javascript并提交内容,或使用诸如curl等复杂工具向服务器发送请求,其中可能包含数据;这可能会在您的代码/SQL中进行注入。

即使您编写了javascript验证,您也必须以某种方式编写服务器代码来验证传入的数据。

理想的方法是两者兼备: 1. 在javascript中验证数据;以便在输入无效数据的情况下限制对服务器的请求。 2. 服务器端验证。如果禁用javascript并向服务器提交数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接