问题描述
我正在研究PHP rest api后端的最佳安全性实践。我读过很多地方,您应该清理并验证所有用户输入。以我的理解,清理将从字符串中删除危险字符,而验证将保证值是服务器期望像字段名那样的字符串。我了解了对安全性进行清理作为避免xss攻击的一种方法的价值,但我不了解验证安全性的好处。
解决方法
数据清理是强制性过程,可防止恶意代码注入,从而影响系统的安全性。
另一方面,数据验证是一个业务逻辑流程,它会影响数据的完整性。在每个系统中这不是强制性的,但是,不验证后端接收的数据可能会导致不稳定。例如,在电子商务中,您可能有一个特殊的凭单,该凭单只能应用于65岁以上的人。您的验证过程应在允许用户应用凭单之前检查用户的出生日期。此逻辑应在后端和前端重复。
前端是您的第一道防线,不应让用户执行任何非法操作。但是,前端只是一个很好的接口,可以将请求发送到您的API。如果对API请求进行反向工程和操作,则可以避免在前端执行的任何检查和验证。
因此,即使在未达到要求的年龄时,前端不允许用户激活凭证,如果后端没有验证,对API的特制请求也可以使用该凭证。这是数据验证的目的。即使对数据进行了清理并且API请求“看起来还不错”(因为输入中没有格式错误的数据类型或奇怪的字符),但由于业务原因,出于安全考虑,也不应接受该请求
但是,通过前端验证又有什么用呢?好吧,我们可以通过显示一个不错的错误消息而不是通常不太花哨的API错误来获得更好的用户体验,并且如果期望该请求失败,我们还将避免不必要的API请求和验证。
总而言之,数据验证是一个推荐过程,它将带来更好的用户体验并防止数据完整性问题,而这与系统安全性同样重要。