SOAP — Security & Data Exposure

DEX455 - Apex Web 服务完全指南:SOAP Web 服务与 Apex REST

📄 第 253 页 🎬 视频课程

课程章节介绍

同学们,今天这节课我们来聊聊自定义Web服务方法的安全问题。这个内容非常重要,因为稍不注意,就可能把敏感数据暴露出去。 首先你要记住一个核心点:你写的Apex Web服务方法,不管是老式的`webservice`关键字,还是现在的`@RestResource`注解,它们运行时默认是“系统上下文”。这是什么意思呢?就是说,代码运行时不使用当前调用用户的身份和权限,而是拥有整个组织的最高数据访问权限,就像超级管理员一样。不管这个用户本身有多受限,字段级安全、对象权限、共享规则,对它全都没用。所以,只要他能调用这个方法,方法里面就能查到所有他能“触达”不了的记录和字段。这非常的危险。 所以,作为开发者,我们必须主动负起责任,千万不要让敏感数据不小心流出去。那该怎么做呢?最直接的,就是在代码里手动检查权限。Salesforce提供了很便捷的方式来检查当前用户对对象和字段的访问级别。你可以拿到对象的描述结果,比如用`sObjectType.getDescribe()`,然后去看`isAccessible()`方法。对于字段,也可以通过字段的描述结果调用`isAccessible()`、`isUpdateable()`等等。更推荐的办法是使用`Security.stripInaccessible()`,它可以直接把用户没权限看的字段从查询结果里剔除掉。这样一来,你就能确保,即使方法运行在系统模式下,返回给用户的数据也不会超出他本来该看到的范围。 接下来,还有一个容易被误解的点,就是共享规则。有些同学可能会想:“我明明在类上加了`with sharing`呀,为什么共享规则好像没生效?”其实,默认情况下,自定义Web服务类如果没有声明,等同于`without sharing`,所以共享规则完全被

关键词

Apex Salesforce Developer Guide