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

时间:2017-01-12 11:35:11

标签: asp.net-core asp.net-core-mvc

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

绝对不相信客户端会发生什么。您收到的所有值都可以直接发送或通过支持它的任何工具(如Postman,Fiddler等)进行扩充。它并不需要太深入的知识,因此您应该期望任何人都能够做到这一点。

这意味着您不仅应该以与在客户端上相同的方式验证您收到的数据,还应确保执行该操作的用户有权访问该数据。例如。如果您收到更新Id = 6的某个对象的请求,则应始终验证用户是否有权执行操作(例如,对象属于用户等)。如果没有这个,就很容易被“黑客”攻击。您的网站(只需使用修改后的Id = 7执行相同的请求)

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

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

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

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

答案 2 :(得分:0)

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

相关问题