Validation 为什么Web应用程序既需要服务器端验证,也需要客户端验证?

Validation 为什么Web应用程序既需要服务器端验证,也需要客户端验证?,validation,server-side,client-side-validation,Validation,Server Side,Client Side Validation,对于web应用程序,客户端和服务器端都要进行验证有什么高层次的原因吗?用户可以在本地修改验证javascript(保存页面并对其执行任何操作),或者可以在浏览器中关闭javascript。因此,在这种情况下,客户端验证是无用的。因此,您也应该在服务器上进行验证,因为您的客户端验证可能会被破坏 例如,在web上,如果您使用javascript进行验证,则很容易关闭javascript,或者使用FireBug等工具更改其工作方式 如果使用其他客户端/服务器方法,则可能会破坏数据链接,并且“已验证”的

对于web应用程序,客户端和服务器端都要进行验证有什么高层次的原因吗?

用户可以在本地修改验证javascript(保存页面并对其执行任何操作),或者可以在浏览器中关闭javascript。因此,在这种情况下,客户端验证是无用的。因此,您也应该在服务器上进行验证,因为您的客户端验证可能会被破坏

例如,在web上,如果您使用javascript进行验证,则很容易关闭javascript,或者使用FireBug等工具更改其工作方式

如果使用其他客户端/服务器方法,则可能会破坏数据链接,并且“已验证”的数据可能会在发送到服务器的过程中发生更改(攻击)

通常,格言“永远不要信任客户机”是您需要始终在服务器上验证的原因


在这种情况下,您可能会问,为什么要在客户机上进行验证?为了提供即时反馈。

客户端验证为用户提供即时反馈,而无需等待页面加载。但是,如果客户端禁用了客户端脚本(例如,禁用了JavaScript),验证将不会启动,这就是为什么您需要服务器检查值的原因。

客户端将在到达服务器之前(理论上)删除大多数验证问题(尽管禁用/编辑JavaScript时并非总是如此等). 这将通过在客户端设备上放置ONU来执行验证,从而消除服务器上的任何“紧张”或不必要的处理


服务器端将捕获由于某种原因未被客户端验证捕获的任何验证问题。

客户端验证是一个加号,但不是必需的。您必须使用服务器端验证(ssv),因为当您接受用户信息时,您应该始终将is视为“恶意”。如果这些数据也被输入到数据库中,ssv是您的最后一道防线,因为您不希望数据库中出现垃圾或无效数据


客户端验证不是防弹的,因此,如果某个东西在客户端得到验证,这并不意味着它在到达服务器时是有效的。

客户端验证用于以下内容
1) 将数据确认为长度和格式约束
2) 对用户的即时指示或反馈

服务器端验证
1) 针对业务逻辑的更高级验证
2) 检查标准是否有任何变化。例如,您从亚马逊订购了一本书,当您结账时,您会收到一个指示,表明该书已售罄,因为其他人可能会在不久之前购买该书
3) 检查目标用户是否已发布数据。客户端的东西,如cookie和javascript,可以被操纵,因此服务器需要对通过的数据进行身份验证和污染检查。


因此,需要将服务器端验证作为抵御恶意数据的主要防线,并根据高级业务逻辑检查数据。

实时客户端验证的目的(即当用户从一个字段移动到另一个字段而不是在用户点击提交后)是尽快向用户提供反馈。例如,如果社会保险号码需要9位数字,而用户键入了8位数字,则您不希望等到用户完成表单的其余部分并点击提交来指出错误,即使验证是在客户端进行的。等到提交之后再验证客户端几乎是毫无意义的——它所做的只是节省服务器和带宽。指出错误通常会导致更高的表单完成率,因为这对用户来说是一种更简单的体验——不会有错误列表:“请更正下面的所有错误”。但您仍然需要进行服务器端验证,以确保数据在任何情况下的完整性。夜总会保镖站在夜总会门前,而不是街对面的停车场。

如果您的应用程序数据库中有多个表,服务器端验证可能只是一组限制(数据表设计的一部分)。 但是,我们可能认为服务器端没有任何验证,因为它不是中间服务器层,而是数据库层

然后我们可以说,基于完整性的关系数据库的优势(我们知道我们的数据结构是安全的)。在大多数情况下,我们可能只使用客户端验证向客户端提供对其操作的实例反馈。在服务器端层、控制器和任何服务器端代码中不进行额外验证可能不是一个关键问题

因此,我们可以说,在某些/大多数情况下,我们可能只使用客户端验证。 服务器端验证是一种特殊情况,例如:当客户提交购买表单时,检查是否已经购买了某些东西

这不是一个坏主意,不要重复你自己与验证双方

当然,有些应用程序需要对其数据进行大量的关注,因此,不仅服务器端验证很重要(如业务模型安全性的一部分),而且对于大多数用例来说,测试覆盖率也很重要——对于客户端输入来说


但是,如果只是一个具有多个表单的站点……那么我相信数据库限制和客户端验证是一个不错的选择。

因此,客户端验证更符合用户的利益,可以引导他们朝着正确的方向发展,而服务器端更适合于数据保护。那么使用Ajax时呢?在这种情况下,仅仅依赖inf是否更好还是开发人员仍然会使用Javascript/JQuery来阻止不必要的ajax调用?或者,只要服务器端被验证,这真的无关紧要吗?