Ir al contenido

False Positives

This content is for the 1.0 version. Switch to the latest version for up-to-date documentation.

Esta página aún no está disponible en tu idioma.

IDRuleSeverityFileStatus
FP-01ApexCRUDViolationHighObjectTeamMemberTriggerHandler.clsSuppressed — Trigger context
FP-02ApexCRUDViolationHighObjectTeamMemberController.cls (TeamMemberSelector)Suppressed — Intentional design
FP-03ApexSOQLInjectionHighObjectTeamMemberTriggerHandler.clsFalse Positive — Safe source
FP-04ApexSOQLInjectionHighShareRecordQueueable.clsFalse Positive — Whitelist
FP-05ApexSOQLInjectionHighObjectTeamMemberController.clsFalse Positive — Safe source
FP-06DebugStatementsLowMultiple filesAccepted Risk

FP-01: ApexCRUDViolation in ObjectTeamMemberTriggerHandler

Section titled “FP-01: ApexCRUDViolation in ObjectTeamMemberTriggerHandler”
AttributeValue
FileObjectTeamMemberTriggerHandler.cls
LineClass level
RuleApexCRUDViolation
SeverityHigh
StatusSuppressed with @SuppressWarnings

Reason: This trigger handler runs in trigger context where CRUD permissions have already been validated by the calling controller (ObjectTeamMemberController). The handler performs system-level operations including auto-creating Owner records and managing share records, which require elevated access.

Mitigation: CRUD checks are enforced in ObjectTeamMemberController before any DML operation reaches the trigger.


FP-02: ApexCRUDViolation in TeamMemberSelector

Section titled “FP-02: ApexCRUDViolation in TeamMemberSelector”
AttributeValue
FileObjectTeamMemberController.cls
Line129-150 (inner class)
RuleApexCRUDViolation
SeverityHigh
StatusSuppressed with @SuppressWarnings

Reason: The TeamMemberSelector inner class intentionally uses “without sharing” to allow users to view team members on records they have access to. This mirrors standard Salesforce AccountTeamMember behavior.

Mitigation: Users can only access this via LWC components on records they can already view. The recordId parameter comes from the UI context of an accessible record.


FP-03: ApexSOQLInjection in ObjectTeamMemberTriggerHandler

Section titled “FP-03: ApexSOQLInjection in ObjectTeamMemberTriggerHandler”
AttributeValue
FileObjectTeamMemberTriggerHandler.cls
Lines135, 305
RuleApexSOQLInjection
SeverityHigh
StatusFalse Positive

Reason: The object name used in dynamic SOQL is derived from a Salesforce ID using the platform method Id.valueOf(actualRecordId).getSObjectType().getDescribe().getName(). This cannot be manipulated by users.

Code Pattern:

String objectName = Id.valueOf(actualRecordId)
.getSObjectType().getDescribe().getName();
String query = 'SELECT OwnerId FROM '
+ String.escapeSingleQuotes(objectName)
+ ' WHERE Id = :actualRecordId';

Mitigation: Object name comes from Salesforce ID (not user input). Bind variables used for user-controlled values. Additional escaping applied as defense-in-depth.


FP-04: ApexSOQLInjection in ShareRecordQueueable

Section titled “FP-04: ApexSOQLInjection in ShareRecordQueueable”
AttributeValue
FileShareRecordQueueable.cls
Lines138-141, 163-167
RuleApexSOQLInjection
SeverityHigh
StatusFalse Positive

Reason: Share object names come from a hardcoded whitelist of standard objects or follow a deterministic pattern for custom objects.

Whitelist:

Map<String, String> standardShareObjects = new Map<String, String>{
'Account' => 'AccountShare',
'Contact' => 'ContactShare',
'Case' => 'CaseShare',
'Lead' => 'LeadShare',
'Opportunity' => 'OpportunityShare',
'Campaign' => 'CampaignShare',
'Order' => 'OrderShare'
};

Mitigation: Object names validated against whitelist. Custom objects follow safe pattern (ObjectName__c -> ObjectName__Share). Bind variables used for all user-controlled values.


FP-05: ApexSOQLInjection in ObjectTeamMemberController

Section titled “FP-05: ApexSOQLInjection in ObjectTeamMemberController”
AttributeValue
FileObjectTeamMemberController.cls
Line89
RuleApexSOQLInjection
SeverityHigh
StatusFalse Positive

Reason: Same as FP-03. Object name derived from Salesforce ID using platform API.

Mitigation: Object name from Id.getSObjectType().getDescribe().getName(). Cannot be spoofed. Bind variable used for record ID.


AttributeValue
FilesObjectTeamMemberTriggerHandler.cls, ShareRecordQueueable.cls, ExpiredTeamMemberCleanupBatch.cls
RuleDebugStatements
SeverityLow
StatusAccepted Risk

Reason: Debug statements are retained for production troubleshooting. They log only at ERROR/WARN levels and contain no sensitive data.

Content logged: Exception messages, record counts, job status information.

Mitigation: Debug output can be filtered via Salesforce Debug Log settings. No PII or credentials logged.

ControlStatusImplementation
CRUD checks in controllersImplementedisAccessible(), isCreateable(), isUpdateable(), isDeletable()
FLS enforcementImplementedPermission Sets control field access
SOQL injection preventionImplementedBind variables for user input, whitelist for object names
Sharing modelImplementedwith sharing on controllers, without sharing only where documented
Input validationImplementedNull checks, format validation, business rules
XSS preventionImplementedLWC framework handles output encoding
CheckResult
HTTP CalloutsNone — package makes no external calls
Named CredentialsNot used
External ObjectsNot used
Remote Site SettingsNot required