我正在开发第一个结合Java和Javascript的应用程序。由于它越来越多,是时候实施一些适当的错误处理了。但老实说,我的经验为零。
我的应用程序仅允许用户填充存储在数据库中的不同配方。对于前端,我使用Angular。该数据库是MySQL,可与Hibernate和Spring一起使用。
前端中已经进行了一些检查,例如,验证用户是否键入了不超过10年的日期。但是我想到的是某种类型检查。例如,如果接收到的值确实是一个布尔值,如果不是,则抛出错误。
问题是:
应在哪里执行此类型检查?已经在使用Javascript的前端(“ typeof”的想法)或在将接收到的值添加到数据库之前不久在后端?使用Http状态代码或将错误写入日志文件是否更好?
也许您可以推荐一些适合您的最佳实践或选择。
非常感谢!
答案 0 :(得分:3)
这里有两点很重要。
对于用户,您肯定希望尽早且经常(最好是交互式)进行验证。例如,您的银行网站不允许您在信用卡号中输入字母;它肯定会验证,并在您键入内容后立即将其变为红色。
尽管后端可能需要从前端以外的其他来源使用,但必须分别对其进行保护。另外,您可能不想让自己记住要更新UI验证以处理每个潜在的后端错误。
NPM和Maven中有很多不错的验证库,因此大多数验证的代码在两端都应该是微不足道的,并且将其同时保存可能是最安全的。
在担心整个系统整体之前,应始终分别对每个组件进行单元测试,并确保其自身的安全/功能。
您绝对应该使用HTTP状态代码在任何REST应用程序中向后端报告后端错误,并尝试使用正确的错误(例如,未找到,错误的参数,未授权的错误,内部错误)。无论您在前端做什么,都会遇到后端错误(例如,错误的SQL语法,数据库连接失败)。
答案 1 :(得分:2)
您应该在后端实现所有验证功能,基本上不要信任客户端数据。如果您的API在Internet上公开可用,人们将尝试使用,破坏或破解它。
此外,如果您决定编写其他客户端(例如Android应用),则可以在客户端之间安全地重用该API。随时在前端实施其他验证,以提供更好的用户体验,但是您不能跳过后端验证。
您可能不希望开发自己的API标准,而是要实现现有的标准之一,例如https://jsonapi.org/。
答案 2 :(得分:2)
主要规则:
答案 3 :(得分:2)
在后端验证您的数据。所有数据流都将通过后端进入数据库。
想象一下,您提供了后端的公共api,而您仅在前端进行了一些验证。
仍然可以将数据添加到数据库中,因为您提供了公共api。有人可以像random-host:8080\delete\user\65434
那样调用您的api。
当然!做一些验证-但这是针对“正常”客户端的用户体验的。通过这些验证,您的客户无需等待服务器端验证,因为他可以从您的前端直接获得反馈。