界: Security Features

软件安全不是安全软件。此处我们关注的主题包括身份验证、Access Control、机密性、加密和权限管理。

Access Control

Abstract
在未检查用户权限的情况下执行 SOQL 语句会让攻击者能够修改未经授权的条目。
Explanation
攻击者能够访问仅限于授权用户的资源时,会发生 access control 漏洞。

默认情况下,当使用 SObjects 和 SObject 字段时,Visualforce 应用程序会自动强制要求对象级安全性 (CRUD) 和字段级安全性 (FLS)。但是,如果对象和字段作为一般数据类型进行引用,则不强制要求这些机制,而且需要以编程方式实施 access control 检查。

示例 1:在以下代码示例中,字段使用自定义 setter 方法进行了更新,因此需要授权检查。

<apex:page controller="accessControl">
<apex:pageBlock >
<apex:pageBlockSection >
<apex:outputText value="Survey Name: "/>
<apex:inputText value="{!surveyName}"/>
</apex:pageBlockSection>
<apex:pageBlockSection >
<apex:outputText value="New Name: "/>
<apex:inputText value="{!newSurveyName}"/>
</apex:pageBlockSection>
<apex:pageBlockSection >
<apex:commandButton value="Update" action="{!updateName}"/>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:page>

public String surveyName { get; set; }
public String newSurveyName { get; set; }
public PageReference updateName() {
Survey__c s = [SELECT Name FROM Survey__c WHERE Name=:surveyName];

s.Name = newSurveyName;
update s;

PageReference page = ApexPages.currentPage();
page.setRedirect(true);
return page;
}
References
[1] Salesforce Developers Technical Library Secure Coding Guidelines - Authorization and Access Control
[2] Salesforce Developers Technical Library Testing CRUD and FLS Enforcement
[3] Salesforce Developers Technical Library Enforcing CRUD and FLS
[4] Salesforce Developers Technical Library Visualforce Developers Guide - Standard Controllers
desc.structural.apex.access_control_update