• Accueil / Marketing Cloud / Sécurisation de CloudPages…

Sécurisation de CloudPages avec SSJS dans Salesforce Marketing Cloud – le blog de Markus Slabina, principalement lié à Salesfoce, qui couvre les meilleures pratiques, des conseils et des astuces. La majorité des articles se concentre sur les scénarios Marketing Cloud et Cross-Cloud.1 minutes de lecture


Si vous avez toujours voulu restreindre l’accès à une page de destination ou à un point de terminaison créé à l’aide d’un CloudPage, j’ai deux options pour vous, qui ne nécessitent qu’un extrait de code court et fonctionnent comme un moyen simple de déterminer qui est capable d’accéder à votre page .

Liste blanche des adresses IP

Restreindre l’accès en fonction des adresses IP est assez facile et si votre page de destination est censée être accessible uniquement au sein du réseau d’une entreprise / client, la plupart du temps se limiter à quelques adresses IP suffit car de nombreuses entreprises n’ont qu’un petit nombre d’adresses IP publiques qui sont partagées entre les employés dans un bureau spécifique.

En outre, cette solution fonctionne également pour le traitement des points de terminaison appelés uniquement à partir de serveurs spécifiques. Dans ce cas, cela peut être combiné avec la prochaine approche qui utilise des clés API et des secrets pour restreindre l’accès.

Le code ci-dessous est un exemple de filtrage d’adresses IP, où toutes les adresses IP autorisées sont contenues dans le tableau «allowedIPs».

"server">
    Platform.Load("Core", "1");

    var allowedIPs = [
        "xxx.xxx.xxx.xxx"
    ];

    try {
        var validIp = false;
        for (var i = 0; i  allowedIPs.length; i++) {
            if (allowedIPs[i] == Platform.Request.ClientIP) {
                validIp = true;
            }
        }

        if (validIp) {




INSÉREZ VOTRE CODE DE CLOUDPAGE RÉGULIER ICI

"server">
        } else {
            // Request originates from wrong IP
            throw new Error("Non-whitelisted IP");
        }
    } catch (e) {
    	// You could also redirect to an error page here.
    	// This catch-block catches any error within the try-block, so not only wrong IP addresses
        Write(Stringify(e));
    }

Vérification du secret / clé API pour le traitement des points de terminaison

Cette solution ne s’applique pas aux pages de destination régulières que vous visitez à l’aide de votre navigateur Web, car elle est conçue pour traiter les points de terminaison créés à l’aide de CoudPages. Le code vérifie si l’hôte qui envoie une demande à votre CloudPage transmet les informations d’identification correctes qui sont des paires clé / valeur dans l’objet «allowedCredentials» dans l’exemple ci-dessous. En cas de non-concordance, une erreur est renvoyée, sinon le traitement se poursuit.

Afin d’avoir une solution encore plus solide en place, vous pouvez également combiner cette méthode avec une liste blanche d’adresses IP comme ci-dessus.

"server">
    Platform.Load("Core", "1");

    var allowedCredentials = {
        "key": "secret"
    };

    try {
        var jsonpost = Platform.Request.GetPostData();
        if (jsonpost) var json = Platform.Function.ParseJSON(jsonpost);

        /*
         * Check if all the required variables and properties
         * are set and if the credentials are correct
         **/
        if (json && json.auth && json.auth.apiKey && json.auth.apiSecret
                && allowedCredentials[json.auth.apiKey] == json.auth.apiSecret) {

            // Remove auth data from json
            delete json.auth;

            /* INSERT YOUR ENDPOINT LOGIC HERE*/

        } else {
            // Authentication failed
            throw new Error("Wrong credentials");
        }
    } catch (e) {
        var error = {
            "success": false,
            "message": Stringify(e)
        };
        Write(Stringify(error));
    }

Ce qui précède n’est qu’un exemple minimal pour un POST-Endpoint. Pour l’améliorer davantage, vous pouvez stocker des versions cryptées des clés API et des secrets dans le code source et les décrypter à la volée à l’aide de clés de cryptage stockées dans Fonctionnalité « Gestion des clés » de Marketing Cloud. Malheureusement, cela n’est pas possible avec du JavaScript pur côté serveur, vous devrez donc mélanger SSJS avec du code AMPscript pour y parvenir.

Une autre amélioration pourrait consister à stocker les clés d’API et les secrets dans une extension de données et à les charger dans votre CloudPage. Cependant, il s’agit davantage d’une amélioration de l’évolutivité car l’ajout d’informations d’identification supplémentaires est plus facile et ne nécessite pas de changement de code.

Si vous ne souhaitez pas envoyer le secret et la clé de l’API dans la charge utile, cet extrait de code peut facilement être modifié pour les transmettre dans les en-têtes de la requête par exemple.

Remarque: Il n’est pas recommandé d’utiliser CloudPages pour effectuer des tâches lourdes et fournir une API complète. Assurez-vous donc de faire un traitement léger et uniquement des éléments qui ont du sens dans Salesforce Marketing Cloud.

Conseil général

Assurez-vous toujours d’avoir un certificat SSL configuré pour CloudPages dans votre compte, afin que la transmission entre le client et CloudPage soit chiffrée. Si ce n’est pas encore configuré, contactez votre responsable de compte afin de l’activer. Remarque: Si elle n’est pas déjà incluse dans votre contrat, cette fonctionnalité entraîne des frais supplémentaires.

Lectures complémentaires

Il ne s’agit pas d’une mesure de haute sécurité, alors n’exposez pas de données hautement sensibles ou de fonctions critiques via ce CloudPage ou tout autre CloudPage!

La recommandation de Salesforce pour l’ensemble des données conservées dans Marketing Cloud est la suivante:

JAMAIS utilisez Marketing Cloud pour transmettre ou stocker les types de données suivants:

Numéros d’identification émis par le gouvernement, y compris (mais sans s’y limiter):

  • Numéros de sécurité sociale
  • Numéros de passeport
  • Numéros de permis de conduire

Tout numéro de compte financier, y compris (mais sans s’y limiter):

  • Numéros de carte de crédit ou de débit
  • Numéros de compte bancaire
  • Tout autre identifiant similaire tel que défini par les normes de sécurité des données de carte de paiement

Si vous êtes familier avec JavaScript, mais pas avec JavaScript côté serveur dans Salesforce Marketing Cloud, certaines parties des exemples de code peuvent sembler un peu inefficaces / compliquées, mais cela est dû au fait que SSJS ne prend en charge que ECMAScript 3 et même certains polyfills ne ne fonctionne pas.





Source de l’article traduit automatiquement en Français