为什么客户端验证与服务器端验证相比存在安全风险?

Xai*_*oft 8 validation client-side-validation

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

Cor*_*urn 17

理想情况下,您既可以同时使用客户端,也可以同时使用服务器端.如果我们看一下这3个场景,两者都是唯一安全,用户友好的方式:

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

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

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

如果你绝对必须选择一个,服务器端将是你要走的路.但你不应该选择其中一个.


JYe*_*ton 8

使用各种工具,如Fiddler,Noscript,Web Developer等,我可以禁用客户端javascript验证,并修改发送到服务器的数据.根据数据类型和服务器对其执行的操作,可能会发起SQL注入攻击,尝试破坏服务器安全性,或者只是存储虚假数据.

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


Top*_*era 5

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