Zum Inhalt springen

False Positives

IDRegelSchweregradDateiStatus
FP-01ApexCRUDViolationHighObjectTeamMemberTriggerHandler.clsUnterdrückt — Trigger-Kontext
FP-02ApexCRUDViolationHighObjectTeamMemberController.cls (TeamMemberSelector)Unterdrückt — Absichtliches Design
FP-03ApexSOQLInjectionHighObjectTeamMemberTriggerHandler.clsFalse Positive — Sichere Quelle
FP-04ApexSOQLInjectionHighShareRecordQueueable.clsFalse Positive — Whitelist
FP-05ApexSOQLInjectionHighObjectTeamMemberController.clsFalse Positive — Sichere Quelle
FP-06DebugStatementsLowMehrere DateienAkzeptiertes Risiko

FP-01: ApexCRUDViolation in ObjectTeamMemberTriggerHandler

Abschnitt betitelt „FP-01: ApexCRUDViolation in ObjectTeamMemberTriggerHandler“
AttributWert
DateiObjectTeamMemberTriggerHandler.cls
ZeileKlassenebene
RegelApexCRUDViolation
SchweregradHigh
StatusMit @SuppressWarnings unterdrückt

Grund: Dieser Trigger-Handler läuft im Trigger-Kontext, wo CRUD-Berechtigungen bereits vom aufrufenden Controller (ObjectTeamMemberController) validiert wurden. Der Handler führt Operationen auf Systemebene durch, einschließlich automatischer Owner-Datensatz-Erstellung und Verwaltung von Freigabedatensätzen, was erhöhten Zugriff erfordert.

Minderung: CRUD-Prüfungen werden im ObjectTeamMemberController durchgesetzt, bevor eine DML-Operation den Trigger erreicht.


AttributWert
DateiObjectTeamMemberController.cls
Zeile129-150 (innere Klasse)
RegelApexCRUDViolation
SchweregradHigh
StatusMit @SuppressWarnings unterdrückt

Grund: Die innere Klasse TeamMemberSelector verwendet absichtlich “without sharing”, um Benutzern das Anzeigen von Teammitgliedern bei Datensätzen zu ermöglichen, auf die sie Zugriff haben. Dies spiegelt das Standard-Salesforce AccountTeamMember-Verhalten wider.

Minderung: Benutzer können nur über LWC-Komponenten bei Datensätzen darauf zugreifen, die sie bereits anzeigen können. Der recordId-Parameter stammt aus dem UI-Kontext eines zugänglichen Datensatzes.


FP-03: ApexSOQLInjection in ObjectTeamMemberTriggerHandler

Abschnitt betitelt „FP-03: ApexSOQLInjection in ObjectTeamMemberTriggerHandler“
AttributWert
DateiObjectTeamMemberTriggerHandler.cls
Zeilen135, 305
RegelApexSOQLInjection
SchweregradHigh
StatusFalse Positive

Grund: Der in dynamischem SOQL verwendete Objektname wird von einer Salesforce-ID unter Verwendung der Plattformmethode Id.valueOf(actualRecordId).getSObjectType().getDescribe().getName() abgeleitet. Dies kann nicht von Benutzern manipuliert werden.

Code-Muster:

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

Minderung: Objektname stammt von Salesforce-ID (nicht Benutzereingabe). Bind-Variablen für benutzerkontrollierte Werte verwendet. Zusätzliches Escaping als Defense-in-Depth angewendet.


AttributWert
DateiShareRecordQueueable.cls
Zeilen138-141, 163-167
RegelApexSOQLInjection
SchweregradHigh
StatusFalse Positive

Grund: Freigabeobjektnamen stammen aus einer fest codierten Whitelist von Standardobjekten oder folgen einem deterministischen Muster für benutzerdefinierte Objekte.

Whitelist:

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

Minderung: Objektnamen gegen Whitelist validiert. Benutzerdefinierte Objekte folgen sicherem Muster (ObjectName__c -> ObjectName__Share). Bind-Variablen für alle benutzerkontrollierten Werte verwendet.


FP-05: ApexSOQLInjection in ObjectTeamMemberController

Abschnitt betitelt „FP-05: ApexSOQLInjection in ObjectTeamMemberController“
AttributWert
DateiObjectTeamMemberController.cls
Zeile89
RegelApexSOQLInjection
SchweregradHigh
StatusFalse Positive

Grund: Wie FP-03. Objektname von Salesforce-ID unter Verwendung der Plattform-API abgeleitet.

Minderung: Objektname von Id.getSObjectType().getDescribe().getName(). Kann nicht gefälscht werden. Bind-Variable für Datensatz-ID verwendet.


AttributWert
DateienObjectTeamMemberTriggerHandler.cls, ShareRecordQueueable.cls, ExpiredTeamMemberCleanupBatch.cls
RegelDebugStatements
SchweregradLow
StatusAkzeptiertes Risiko

Grund: Debug-Anweisungen werden für Produktions-Fehlerbehebung beibehalten. Sie protokollieren nur auf ERROR/WARN-Ebenen und enthalten keine sensiblen Daten.

Protokollierter Inhalt: Exception-Nachrichten, Datensatzzahlen, Job-Statusinformationen.

Minderung: Debug-Ausgabe kann über Salesforce Debug Log-Einstellungen gefiltert werden. Keine PII oder Anmeldedaten protokolliert.

KontrolleStatusImplementierung
CRUD-Prüfungen in ControllernImplementiertisAccessible(), isCreateable(), isUpdateable(), isDeletable()
FLS-DurchsetzungImplementiertPermission Sets steuern Feldzugriff
SOQL-Injection-PräventionImplementiertBind-Variablen für Benutzereingabe, Whitelist für Objektnamen
FreigabemodellImplementiertwith sharing auf Controllern, without sharing nur wo dokumentiert
EingabevalidierungImplementiertNull-Prüfungen, Formatvalidierung, Geschäftsregeln
XSS-PräventionImplementiertLWC-Framework verarbeitet Output-Encoding
PrüfungErgebnis
HTTP-CalloutsKeine — Paket führt keine externen Aufrufe durch
Named CredentialsNicht verwendet
External ObjectsNicht verwendet
Remote Site SettingsNicht erforderlich