系统内部,方法之间调用,是否还需要验证数据?

一直有个疑惑,在用户输入数据时,我们后端肯定是要验证数据格式的,这毫无疑问。

但是,在系统内部,各个模块的方法之间互相调用时,是否还需要进行数据验证?比如is_int($age)$age>0等?主要是考虑到以下几个点:

1.不能信任其他开发人员调用我写的方法时,传入的参数。如果别的开发传入一个我预料之外的值,那么系统肯定会报错的。
2.由于某个数据库字段被别的开发人员做的模块修改,而这个修改后的值是我预料之外的值,在调用方法时,系统也会报错。

所以,想听听大家的意见,有必要每个方法里面都验证数据格式吗?

再见了妈妈今晚我就要远航,别为我担心我有快乐和智慧的桨~
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

我会选择做数据验证,这样可以提高程序的健壮性,避免系统出现异常。

就像你说的,前端用户输入的数据是一定要验证的,为什么?因为那些数据都不可控。同样,内部系统之间的调用实际也是不可控的因素有太多了,所以也是需要做验证的。

3年前 评论
讨论数量: 6

多人协助的项目,对数据变更,对数据敏感的地方都需要进行判断。对防止程序出错有一定的预防。

3年前 评论

简单来说,如果参数可控,系统异常不大,异常后有完善的异常机制,并且校验耗时繁琐,完全内部调用可以不检验,但是有些参数不可控,用户输入,api调用,数据库取值都不可靠,为了系统健壮性,我还是会选择校验参数!

3年前 评论

我会选择做数据验证,这样可以提高程序的健壮性,避免系统出现异常。

就像你说的,前端用户输入的数据是一定要验证的,为什么?因为那些数据都不可控。同样,内部系统之间的调用实际也是不可控的因素有太多了,所以也是需要做验证的。

3年前 评论

如果都验证的话,那每调用一个方法,那都要验证啦。
我自己的流程是,在某个地方进行验证,然后后面就假定数据都是正确的。

3年前 评论

我一般需要校验参数合法性,都是下面这样使用 。其他人调用 如果需要验证 直接add 或者 checkData之后save,如果他能确保数据已经合法的情况下就直接调用save。

//新增数据
punlic function add($request_data){
  //验证参数
  $this->checkData($request_data);
  //保存数据
  $this->save($request_data);     
}
//验证参数
public function check($request_data){
//****
}

//保存数据 
public function save($request_data){
//****
}
3年前 评论
LiamHao (楼主) 3年前
snakelis (作者) 3年前

可以验证一下null、空字符

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!