Requêtes pour fichiers statiques
Pour le zoning et les Session Replays, Contentsquare doit récupérer les éléments statiques de votre site.
Afin d’autoriser Contentsquare à récupérer ces éléments, choisissez l’une des options suivantes :
- Autorisez les adresses IP Contentsquare
- Utilisez un header statique personnalisé pour valider les requêtes
- Utilisez un header personnalisé pour valider les requêtes
Autoriser les adresses IP
Section titled Autoriser les adresses IPOuvrez les ports 80
(HTTP) et 443
(HTTPS) et autorisez les adresses IP ci-desous afin d’empêcher que le scraper soit bloqué par votre proxy, firewall, ou configuration serveur :
AWS US
Section titled AWS US- IP actuelle :
52.18.162.157
(APP & DT scrapper) - Nouvelle IP :
100.24.76.90
(microproxy-production.us-east-1.csq) - Nouvelle IP :
34.192.98.148
(fallback microproxy-production.us-east-1.csq)
AWS EU
Section titled AWS EU- IP actuelle :
52.18.162.157
(App & DT Scrapper) - Nouvelle IP :
54.247.44.196
(microproxy-production.eu-west-1) - Nouvelle IP :
52.51.9.12
(fallback microproxy-production.eu-west-1)
Azure US
Section titled Azure US- IP actuelle :
20.75.90.236
(Azure East US Scrapper) - Nouvelle IP :
100.24.76.90
(microproxy-production.us-east-1.csq) - Nouvelle IP :
34.192.98.148
(fallback microproxy-production.us-east-1.csq)
Azure EU
Section titled Azure EU- IP actuelle :
20.67.250.109
(Azure North Europe Scrapper) - Nouvelle IP :
54.247.44.196
(microproxy-production.eu-west-1) - Nouvelle IP :
52.51.9.12
(fallback microproxy-production.eu-west-1)
Utiliser un header statique personnalisé
Section titled Utiliser un header statique personnaliséAvec cette option, Contentsquare ajoute un header personnalisé aux paramètres du projet.
{ "headers": { "my-new-header-key": "myKeyValue" }}
Vous pouvez valider que les requêtes du scrapper contiennent ce header avec la bonne valeur.
receivedHeaderExample = 'myKeyValue';
const CONTENTSQUARE_CUSTOM_HEADER = 'myKeyValue';if (receivedHeaderExample === CONTENTSQUARE_CUSTOM_HEADER) { //}
Utiliser un header dynamique personnalisé
Section titled Utiliser un header dynamique personnaliséVous pouvez utiliser le header personnalisé X-CONTENTSQUARE-SIGNATURE
pour valider que les requêtes proviennent effectivement de Contentsquare.
Le header X-CONTENTSQUARE-SIGNATURE
est une chaîne de caractères dans ce format :
<TIMESTAMP>-base64(hmac('sha256', <SECRET>, <RESOURCE_DOMAIN>-<TIMESTAMP>))
avec :
<TIMESTAMP>
: le temps auquel la requête est envoyée, d’aprèsDate.now()
,<RESOURCE_DOMAIN>
: le domaine complet qui héberge la ressource,<SECRET>
: le secret partagé entre vous et Contentsquare pour le projet, généré à la création du projet.
Avec un secret abcde
, le Contentsquare service scrapper a émis cette requête le 6 août 2020 à 05h39, pour récupérer le logo Contentsquare :
curl \ -H 'accept-language: en-GB,en-US;q=0.9,en;q=0.8,fr;q=0.7' \ -H 'accept: application/json, text/plain, */*' \ -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36' \ -H 'X-CONTENTSQUARE-SIGNATURE: 1596706743675-BxmHtG6vu4CfFlzpHxc0qYOmR0iMajlIvA2B4404qk4=' \ -X GET https://contentsquare.com/wp-content/themes/kps3-contentsquare/public/assets/images/contentsquare-logo.svg?tv=1.3.0
Vous pouvez regénérer la signature et vérifier qu’elle correspond à la valeur du headerX-CONTENTSQUARE-SIGNATURE
header en fournissant :
- Le timestamp de la requête entrante (
1596706743675
), - Le domaine sur lequel est hébergé la ressource (
contentsquare.com
), - Le secret founi par Contentsquare (
abcde
).
const crypto = require('crypto');
const secret = 'abcde'; // Given by someone from CSreceivedHeaderExample = '1596706743675-BxmHtG6vu4CfFlzpHxc0qYOmR0iMajlIvA2B4404qk4=';
// Extract the timestamp and digest from the received headerconst [timestamp, receivedDigest] = receivedHeaderExample.split('-');
// Extra security step to make sure the timestamp is not too oldconst currentTimestamp = Date.now();if(currentTimestamp - timestamp > 5 * 60 * 1000) { throw new Error("Validation failed. Timestamp signature is older than 5 minutes");}
// Recreate the string that was used to generate the digestconst dataToSign = `${resourceDomain}-${timestamp}`; // e.g. 'contentsquare.com-1596706743675';
// Create a new digest using the same secret and algorithmconst hmac = crypto.createHmac('sha256', secret);hmac.update(dataToSign);const generatedDigest = hmac.digest('base64');
// Compare the newly generated digest with the one received in the headerif (receivedDigest === generatedDigest) { console.log('Header is valid'); // Code to validate request}