
Tekunda Team

Tekunda Team

Kurz gesagt: Ein False Positive ist ein Scanner-Befund, der Code markiert, der gar nicht verwundbar ist. Salesforce will nicht, dass du ihn stumm schaltest, sondern eine schriftliche Begründung für jeden einzelnen: Scanner und Regel, die genaue Datei und Zeile, den Datenpfad und die Kontrolle, die den Code bereits schützt. Vage Ein-Zeilen-Abweisungen sind der häufigste Grund, warum ein False-Positive-Dokument mit Rückfragen zurückkommt.
Jede AppExchange-Security-Review-Einreichung enthält Scan-Berichte, und keine echte Codebasis scannt vollkommen sauber. Manche Befunde sind echte Probleme, die du behebst. Andere markieren Code, der bereits sicher ist, und die dokumentierst du. In diesem Leitfaden geht es um die zweite Gruppe: wie du False-Positive-Begründungen schreibst, die das Salesforce-Security-Review-Team akzeptiert, und welche Fehler zu Ablehnung führen. Zu den Befunden, die du tatsächlich beheben solltest, und der Reihenfolge dafür, siehe Salesforce Security Review Checkliste: was Sie beheben, und in welcher Reihenfolge.
Ein False Positive ist ein Befund, der für deinen Code technisch falsch ist, nicht einer, mit dem du dich lieber nicht befassen möchtest. Ein Scanner markiert ein Muster; ob dieses Muster ausnutzbar ist, hängt von Kontext ab, den der Scanner nicht immer sieht. Ist der Code wirklich geschützt, hast du ein False Positive zu dokumentieren. Bist du nicht sicher, dass er geschützt ist, behandle ihn als echten Befund und behebe ihn, denn Raten ist hier genau das, was ein Dokument in eine Ablehnung verwandelt.
Die Kategorien, die oft genug wiederkehren, um damit zu planen, sind:
WITH USER_MODE oder AccessLevel.USER_MODE läuft.
Bevor du eine einzige Begründung schreibst, wisse, welche Befunde du überhaupt adressieren musst. Die Schwelle ist nicht null Befunde, und sie ändert sich je nach Tool:
Alles oberhalb der Rauschgrenze wird entweder behoben oder dokumentiert. Es gibt keine dritte Option, es still zu ignorieren.
Salesforce verlangt ein Dokument, das erklärt, warum jeder markierte Punkt kein Sicherheitsrisiko darstellt, und weist dich an, konkret zu sein, wie du gegen die vom Scanner angezeigte Schwachstelle schützt. Recht zu haben reicht nicht. Der Prüfer liest das Dokument, also muss das Dokument es beweisen.
Gib jedem markierten Punkt einen eigenen Eintrag statt eines pauschalen Absatzes. Ein starker Eintrag beantwortet der Reihe nach:
Schreibe es so, dass jemand, der deinen Code nie gesehen hat, dem Pfad von der Eingabe bis zur Kontrolle folgen und zustimmen kann, dass er sicher ist. Das ist der ganze Test.
Die Ablehnungen, die wir sehen, gruppieren sich in eine Handvoll vermeidbarer Fehler:
Salesforce auditiert gelistete Packages periodisch neu, was bedeutet, dass du False-Positive-Begründungen mehr als einmal schreibst. Wenn deine Package-Metadaten in der Versionskontrolle liegen, sind jede Permission Set, Sharing Rule und Named Credential versioniert, sodass du auf die genaue Kontrolle zeigen kannst, die eine Begründung stützt, und belegst, dass sie sich nicht geändert hat. Teams, die Metadaten als Code behandeln, verwenden das Dokument vom letzten Jahr wieder, statt die Begründung neu zu rekonstruieren.
Wenn du lieber einen Partner hättest, der die Review schon bestanden hat und diese Begründungen mit dir schreibt: Tekunda baut und verpackt AppExchange-Produkte als Salesforce PDO.
Kann ich einen Befund einfach unterdrücken, statt ihn zu dokumentieren?
Nein. Alles oberhalb der Rauschschwelle des Scanners wird entweder behoben oder im False-Positive-Dokument erklärt. Ein unterdrückter Befund ohne Begründung liest sich als unbearbeitet.
Wie detailliert muss jeder Eintrag sein?
Detailliert genug, damit ein Prüfer den Code findet und die Kontrolle bestätigt, ohne dich zu fragen. In der Praxis sind das Scanner und Regel, Datei und Zeile, der Datenpfad und die genaue Kontrolle, die schützt.
Brauchen dynamische False Positives zusätzlichen Nachweis?
Ja. Hänge einen Screenshot an, der beweist, dass der richtige Endpunkt gescannt wurde, sonst liest sich der Befund als ungetestet statt sicher.