Reino: Security Features
La seguridad de un software no es un software de seguridad. Nos preocupamos de cuestiones como la autenticación, el control de acceso, la confidencialidad, la criptografía y la gestión de privilegios.
Access Control
Abstract
La ejecución de una instrucción SOQL sin comprobar los permisos del usuario puede permitir a un atacante modificar entradas no autorizadas.
Explanation
Se producen vulnerabilidades en el control de acceso cuando un atacante puede acceder a los recursos a los que solo tienen acceso los usuarios autorizados.
De forma predeterminada, las aplicaciones de Visualforce exigen automáticamente Seguridad a nivel de objeto (CRUD) y Seguridad a nivel de campo (FLS) si se utilizan los campos SObjects y SObject. Sin embargo, si se hace referencia a los objetos y los campos como tipos de datos genéricos, estos mecanismos no son obligatorios y las comprobaciones del control de acceso deben implementarse mediante programación.
Ejemplo 1: en el siguiente ejemplo de código, los campos se actualizan mediante métodos setter personalizados y, por lo tanto, se requieren comprobaciones de autorización.
De forma predeterminada, las aplicaciones de Visualforce exigen automáticamente Seguridad a nivel de objeto (CRUD) y Seguridad a nivel de campo (FLS) si se utilizan los campos SObjects y SObject. Sin embargo, si se hace referencia a los objetos y los campos como tipos de datos genéricos, estos mecanismos no son obligatorios y las comprobaciones del control de acceso deben implementarse mediante programación.
Ejemplo 1: en el siguiente ejemplo de código, los campos se actualizan mediante métodos setter personalizados y, por lo tanto, se requieren comprobaciones de autorización.
<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