
Tekunda Team

Tekunda Team

Une checklist de security review Salesforce n'est utile que si elle est ordonnée. La plupart des soumissions échouent sur une courte liste prévisible, et le contrôle d'accès en tête. Travaillez dans cet ordre : appliquez l'accès en mode utilisateur dans le code, triez les trois rapports de scanners, puis réunissez le dossier de soumission et un environnement de test que le relecteur peut réellement utiliser. Salesforce annonce 4 à 5 semaines pour une revue, donc un refus vous coûte un cycle de release, pas un après-midi.
Tekunda a conduit des managed packages jusqu'au bout de la revue dans la santé, la logistique et l'industrie. Ce qui suit est l'ordre dans lequel nous travaillons, pas une description du processus. Pour le parcours de soumission complet, voir How ISVs Pass the Salesforce AppExchange Security Review.
Trois choses ont bougé cette année, et les anciennes checklists les ignorent toutes.
with sharing
par défaut, et WITH SECURITY_ENFORCED est supprimé : une classe qui
l'utilise encore en v67.0 ne compile pas. Les triggers font exception : ils
s'exécutent toujours en mode système.
Salesforce est clair : tous les composants et services de votre solution, où qu'ils soient hébergés, entrent dans le périmètre. Cela couvre le package, tout web service qu'il appelle, tout site qui stocke des données Salesforce et tout client mobile ou desktop. Fixez votre type de package avant de corriger le code, car il détermine ce que vous téléversez ; l'article Salesforce Packaging Models for ISVs: 1GP vs 2GP vs Unmanaged traite ce choix.
Corrigez de haut en bas. Les premiers points sont à la fois les constats les plus fréquents et les plus coûteux à rattraper, et c'est pourquoi les laisser pour la fin fait glisser une soumission d'un cycle.
WITH USER_MODE en SOQL et AccessLevel.USER_MODE sur les
appels Database, et remplacez tout
WITH SECURITY_ENFORCED restant avant de monter la version d'API.
@AuraEnabled peut s'exécuter sans sharing sans que
personne s'en aperçoive. Déclarez with sharing,
without sharing ou inherited sharing explicitement sur
chaque classe, y compris internes et utilitaires, pour que le relecteur n'ait jamais
à deviner quelle valeur par défaut s'applique.
escape="false", lwc:dom="manual" ou
innerHTML doit être assaini avant, pas après.
System.debug. Les relecteurs
attendent à la place des Named Credentials et des custom metadata protégées.
Secure et HttpOnly. Les relecteurs vérifient
le site que vous leur remettez, pas celui que vous décrivez.
Vous devez fournir un rapport Salesforce Code Analyzer, un rapport du scanner de code du Partner Security Portal et un rapport DAST. Le seuil n'est pas zéro constat, et il diffère selon le scanner :
Générez le rapport Code Analyzer v5 avec le sélecteur de règles AppExchange, pour qu'il corresponde à ce qu'attend le relecteur. Sur une base de code complexe, l'exécution peut prendre des heures :
sf code-analyzer run --rule-selector AppExchange --rule-selector
Recommended:Security --output-file CodeAnalyzerReport.html
Les scans obligatoires ont changé plus d'une fois, donc vérifiez les exigences de scan actuelles avant de générer quoi que ce soit.
Dans nos soumissions, quatre catégories reviennent assez souvent comme de vrais faux positifs pour qu'on les anticipe : des constats de contrôle d'accès sur du code qui applique déjà le mode utilisateur, des constats de sharing sur des classes qui ne sont atteintes que depuis un contexte où le sharing est déjà appliqué, des constats de bibliothèque obsolète déclenchés par une chaîne de version dans une static resource embarquée, et des constats de cross-site scripting réfléchi sur des paramètres qui n'atteignent jamais le DOM.
Avoir raison ne suffit pas pourtant. C'est le document qui fait passer. Salesforce demande un document expliquant pourquoi chaque élément signalé ne présente pas de risque de sécurité, et précise d'être spécifique sur la façon dont vous vous protégez de la vulnérabilité indiquée. Donnez à chaque constat sa propre entrée : scanner et identifiant de règle, fichier et ligne, une phrase décrivant le chemin des données, le contrôle exact qui les protège, et où ce contrôle se trouve dans le package. Un rejet en une ligne revient sous forme de question, et les questions coûtent des semaines. Pour le format de justification et les erreurs qui le font refuser, voir Documenter les faux positifs pour la security review Salesforce.
Vous démarrez ensuite la revue depuis la Publishing Partner Console : ouvrez l'onglet Technologies, choisissez Start Review sur votre solution, et complétez les sections contacts, détails techniques, documentation et environnement de test avant le paiement.
Salesforce indique qu'une solution met en général 4 à 5 semaines à passer la revue, et que chaque solution payante est soumise à des frais de 999 $ pour la soumission initiale et pour chaque nouvelle tentative. Si l'équipe trouve des vulnérabilités, vous corrigez et resoumettez, ce qui compte comme une autre tentative. Salesforce note aussi que la plupart des soumissions passent à la deuxième tentative. Les deux faits mènent à la même conclusion : faites le travail de contrôle d'accès en premier, car la soumission la moins chère est celle que vous n'avez à faire qu'une fois.
Vous préférez confier la revue à des personnes qui l'ont déjà passée ? Tekunda propose, en tant que partenaire Salesforce, une préparation à la security review AppExchange. Si vous hésitez encore à faire appel à une aide externe, lisez Ce que fait un PDO Salesforce, et quand en recruter un.
Les apps gratuites doivent-elles passer la security review ?
Oui. Une solution doit réussir la revue avant d'être listée sur la marketplace. Les frais de 999 $ documentés par Salesforce s'appliquent aux solutions payantes.
La version d'API 67.0 me dispense-t-elle du travail CRUD, FLS et sharing ?
Non. Les nouvelles valeurs par défaut ne valent que pour les classes compilées en v67.0 ou plus, et les triggers s'exécutent toujours en mode système. Déclarez explicitement les modes d'accès et le sharing pour que le relecteur puisse les vérifier ligne par ligne.
Salesforce Code Analyzer suffit-il à lui seul ?
Non. Il faut aussi le rapport du scanner de code du Partner Security Portal, et chaque endpoint externe que votre app appelle nécessite son propre rapport DAST.
Une app Agentforce ou à base d'agents change-t-elle la checklist ?
La même revue s'applique, mais chaque service externe que votre agent peut appeler doit être décrit et scanné. Voir Security review AppExchange des applications agentiques : ce qui change.
La security review est-elle un événement unique ?
Non. Les solutions listées sont en général réexaminées une fois par an, et Salesforce peut demander une revue à tout moment. Les nouvelles versions de package passent par une attestation dans la Partner Console plutôt que par une nouvelle revue : gardez donc la checklist comme barrière de release permanente.