Validation 为什么客户端验证与服务器端验证相比是一种安全风险?

Validation 为什么客户端验证与服务器端验证相比是一种安全风险?,validation,client-side-validation,Validation,Client Side Validation,我不太明白为什么客户端验证是一个潜在的安全风险,或者比服务器端验证更安全?有人能给我一些场景吗?如果您只在客户端进行验证,可能会有人禁用javascript(或者使用firebug更改js代码)。所以,在js中进行的所有验证都是无用的,用户可以在您的系统中插入无效数据。我想您所说的是一个web场景 如果您使用Javascript进行客户端验证,那么如果用户禁用了Javascript会发生什么?然后,他们可以向服务器提交未经验证的数据 如果他们偷偷摸摸,他们甚至可以直接将数据发布到您的服务器(完全

我不太明白为什么客户端验证是一个潜在的安全风险,或者比服务器端验证更安全?有人能给我一些场景吗?

如果您只在客户端进行验证,可能会有人禁用javascript(或者使用firebug更改js代码)。所以,在js中进行的所有验证都是无用的,用户可以在您的系统中插入无效数据。

我想您所说的是一个web场景

如果您使用Javascript进行客户端验证,那么如果用户禁用了Javascript会发生什么?然后,他们可以向服务器提交未经验证的数据

如果他们偷偷摸摸,他们甚至可以直接将数据发布到您的服务器(完全绕过您的页面)


如果您在客户端验证之外或代替客户端验证进行服务器端验证,则您还有机会抵御这些情况。

使用各种工具,如、等,我可以禁用客户端javascript验证,并修改发送到服务器的数据。根据数据的类型和服务器对数据的处理方式,可能会发起SQL注入攻击,试图破坏服务器安全性,或者只是存储虚假数据


一个轻量级示例:假设您有客户端验证,以确保邮政编码为5位或5+4位。如果禁用客户端脚本,我可以保留24位的值。如果您的服务器没有进一步检查该值,并且数据库能够存储所有24位数字,则我保存了伪造的数据。

理想情况下,您可以同时执行客户端和服务器端的操作,而不是一个或另一个。如果我们看一下这三种情况,这两种情况都是唯一安全、用户友好的方法:

仅限客户端:如前所述,如果有人想向您的服务器发送格式错误的数据(如SQL注入),不需要太多的时间就可以绕过这些验证。NoScript不会运行javascript验证代码,一些浏览器允许用户主动更改所有加载的javascript和html,因此用户可以从控件中取出验证javascript

仅服务器端:这一点远比客户端更安全,但减少了用户友好性。他们必须将表单发送到服务器,进行验证,并接收返回的错误页面,指出某个特定字段无效。令人恼火的是,如果这些字段中的任何一个是密码字段,默认情况下不会重新填充它们的值。例如,假设用户没有在帐户创建表单中正确输入电话号码。当服务器返回关于电话号码错误的页面时,用户会看到,更正电话号码并再次点击提交,只会收到另一个关于没有输入密码的错误页面(并在第二个文本框中再次输入密码),即使这不是最初的问题

客户端和服务器端:您可以获得服务器端验证的安全性、用户很难干预的安全性,以及输入验证的用户友好性,而无需提交页面(无论您是通过纯本地javascript还是AJAX进行验证)


如果您必须选择一个,那么服务器端将是最佳选择。但是您不必选择其中一个。

实际上,客户端验证(与服务器端验证相结合)具有巨大的安全优势。如果您在客户机上仔细验证,那么进入服务器的所有流量都应该是干净的。除了袭击者。这使得更好地进行服务器端攻击检测成为可能。从总体上看,这可能是保护应用程序所能做的最重要的事情。有关此方面的详细信息,请参阅OWASP ESAPI入侵检测器或OWASP AppSensor


哦,很明显,如果攻击在客户端开始和结束,比如基于DOM的XSS,那么您必须在客户端验证和编码。

如果验证是客户端的,那么您没有验证,客户端是。如果安全性是一个问题,为什么您会信任客户端验证他们自己的数据?重复:,客户端验证不是验证-它只是UI sugar。感谢您告诉我这些工具。感谢您的解释,它现在更有意义了。这是我在学校开始学习服务器端技术时遇到的一个问题。我明白你的意思,但是你应该清楚地表明,除了服务器端验证之外,你还主张客户端验证。