如果客户端验证已经完成,是否需要服务器端模型验证



我正在使用jQuery验证插件验证客户端的输入数据。是否有必要在服务器端进行验证(如果客户端有效)?如果我只在客户端进行验证,是否存在安全风险?

是的,总是需要服务器端验证,因为禁用javascript 可以绕过客户端验证

对客户端上发生的事情绝对不信任。你收到的所有值都可以直接发送,也可以通过任何支持它的工具(如Postman、Fiddler等)进行增强。而且它并不需要太深入的知识,所以你应该期望任何人都能做到这一点。

这意味着,您不仅应该以与在客户端上相同的方式验证接收到的数据,还应该确保执行操作的用户有权这样做。例如,如果你收到更新Id为6的某个对象的请求,你应该始终验证用户是否有权执行操作(例如,对象属于用户等)。没有这一点,就很容易"破解"你的网站(只需执行修改后的Id为7的同一请求)

这并不意味着您不应该在客户端上进行验证。但客户端验证的原因不同。它是通过即时反馈(无回发)提供更好的用户体验,而不是信任来自客户端的任何东西。

关于你的问题的答案:这取决于情况。很可能不涉及安全风险。例如,如果您的验证检查电子邮件是有效的,则可以绕过它,但您唯一面临的风险是无法发送邮件,例如,等等。如果您检查手机不是空的,则您可能会面临手机是空的或无法插入数据库的风险。

在这种情况下,您可能会决定不麻烦,因为应用程序的有效使用不允许这样做,而且用户发布坏数据也不会带来安全风险。因此,像往常一样,您应该决定是否值得花时间来实现服务器验证。请记住,这并不意味着你可以跳过像我上面描述的重要事情,即验证用户是否有访问权限等。

在任何情况下,拥有与客户端相同的服务器端验证都是有益的,但是否值得,则是另一个问题。

永远不要信任用户,并且在服务器端始终有效。例如,可以通过发送无效数据(可能是攻击向量)来欺骗请求

最新更新