params:'{functionTarget":"DCloud-clientDB","functionArgs":{"command":{"$db":[{"$method":"collection","$param":["hsoji-project"]},{"$method":"where","$param":["status == 0 && is_deleted == false"]},{"$method":"field","$param":["_id,type,project_name,content,status,is_deleted,cover_file,creator,participants"]},{"$method":"orderBy","$param":["is_deleted,create_date desc"]},{"$method":"skip","$param":[0]},{"$method":"limit","$param":[10]},{"$method":"get","$param":[{}]}]}}'
这是一段发送到后端的请求,其中 params 字段记录了请求时使用的查询方式。如果把 field 的 $param 改为 "*" 就可以查询到所有字段(不包括私有字段)。在群里讨论时,不少人说这有安全问题,不应该被人知道数据库的字段名称和查询的操作方式,这有 sql 注入风险,还有拖库什么的。这一看感觉暴露了很多信息,但细想这些信息真的会有安全风险吗。
这其实是 uni-app 的云对象发送出去的数据,如果有安全风险,是不是说明云对象的设计方式存在安全风险?
安全不安全跟字段无关,跟鉴权有关。比如小程序的云函数,能取到的就是公开数据和该用户自己的私有数据,通过这个接口取不到也能通过其它途径取到,有什么安全问题?
至于注入,先得能注入才行。光看你的请求,你知道该怎么注入么?
至于拖库,只有自己的数据拖它干嘛?
所以判断一个做法有没有问题,得从逻辑判断,不能看到一些外围特征就瞎猜。