SOQL Injection Prevention & Custom Settings

DEX455 - Apex 安全与共享模型完全指南

📄 第 219 页 🎬 视频课程

课程章节介绍

同学们,今天我们来聊聊两个很重要的安全话题:SOQL注入和自定义设置。 先说说SOQL注入。我们写代码的时候,千万别直接把用户输入拼接到查询语句里,这种就叫动态SOQL查询,很容易被攻击。安全的做法是,用静态查询,也就是在查询里放一个冒号加变量名,这叫绑定变量。这样平台就能自动处理输入,防止注入。 但有时候,你真的没办法,必须使用动态SOQL,比如查询的字段名是动态的。这时候,你一定要用`escapeSingleQuotes`这个方法,对用户输入做转义处理,把单引号转义掉,能降低风险。不过要记住,这只是一个降级方案,能不用动态SOQL就尽量不用。 接下来看自定义设置。它很像自定义对象,但它最大的好处是数据会缓存起来,访问速度非常快,而且不需要写SOQL查询就能拿到数据。有两种类型:列表自定义设置,它可以存一些对全组织都一样的静态数据,像配置常量。还有层次结构自定义设置,它更聪明,可以按组织、简档甚至用户级别来设定不同的值,自带优先级逻辑。 但这里有个安全陷阱你要特别注意。自定义设置本身不是天然安全的。只有在托管包里,被设成“受保护”的自定义设置,它的数据才不会被外部随意访问。普通的公共自定义设置,权限是非常开放的,即使是未登录的来宾用户,也能读到里面的数据。所以,绝对不要在公共自定义设置里存任何敏感信息,像密码、密钥那些,千万不能放。 好了,这两个重点你记住了吗?尽量用绑定变量代替动态SOQL,自定义设置方便但要谨慎存放机密数据。有疑问的话,我们下节课继续。

关键词

Apex Salesforce Developer Guide