我正在研究php rest api后端的最佳安全实践。我在很多地方读到,你应该对所有用户输入进行消毒和验证。在我的理解中,清理将从字符串中删除危险字符,而验证将保证一个值是服务器期望的值,就像字段名是字符串一样。我理解作为避免xss攻击的一种方法,对安全性进行净化的价值,但我不理解验证对安全性的好处。
数据清理是一个强制性过程,它通过防止恶意代码注入来影响系统的安全性。
另一方面,数据验证是一个业务逻辑过程,它会影响数据的完整性。这并不是每个系统都必须的,但是,不验证后端接收到的数据可能会导致不稳定。例如,在电子商务中,您可能有一张仅适用于65岁以上人群的特殊代金券。在让用户申请代金券之前,您的验证过程应该检查用户的出生日期。这个逻辑应该在后端和前端都重复。
前端是你的第一道防线,它不应该让用户进行任何非法操作。然而,前端只是一个向API发送请求的好接口。如果API请求被逆向工程和操纵,那么在前端执行的任何检查和验证都可以绕过。
因此,即使您的前端不允许用户在未满规定年龄时激活代金券,如果后端没有验证,则向API发出的特制请求也可以使用代金券。这就是数据验证的目的。即使当数据被净化并且API请求"清除"时;看起来不错";因为它的输入中没有格式错误的数据类型或奇怪的字符,所以不应该因为业务需求而接受请求,而不是出于安全原因。
但是,通过前端进行验证的交易是什么呢?好吧,我们通过显示一条漂亮的错误消息而不是通常不那么花哨的API错误来获得更好的用户体验,并且如果请求预计会失败,我们还避免了不必要的API请求和验证。
总之,数据验证是一个推荐的过程,它将带来更好的用户体验,并防止数据完整性问题,这些问题的重要性不亚于系统安全。