Placer un prototype derrière un VPN donne une impression de privé, si bien que la seule question qui reste semble être qui obtient le profil. Cette hypothèse échoue d’une manière précise : un tunnel contrôle qui peut atteindre un hôte, pas ce que l’hôte expose une fois qu’ils sont arrivés. L’aperçu exécute toujours un environnement, détient des données et appelle des intégrations qui peuvent envoyer de vrais e-mails ou écrire dans une vraie base de données. Traitez le VPN comme la porte d’entrée, puis concevez la pièce derrière.

Une route n’est pas un public

Inscrire un testeur sur le VPN répond exactement à une question : cet appareil peut-il atteindre l’adresse ? Il ne dit rien des pages, API ou consoles que cet appareil peut utiliser. Ce sont des autorisations distinctes, et une passerelle qui ne connaît que des adresses ne peut pas les appliquer.

Écrivez le contrat de l’aperçu sous forme de liste courte : nom d’hôte, écouteur, opérations autorisées et qui détient chaque rôle. Vérifiez ensuite que la liste correspond à ce qui est réellement exposé.

Un testeur qui peut ouvrir le prototype n’a pas besoin de la console de déploiement, de la page d’administration de la base de données ni du répertoire personnel du développeur. Si la passerelle accorde une route de sous-réseau, tout cela est accessible par défaut. Préférez une route par destination, ou placez les services supplémentaires derrière leur propre authentification. L’un ou l’autre choix réduit ce qu’un profil volé peut faire.

L’environnement que vous partagez fait partie du contrat

Un serveur de développement avec débogueur et rechargement automatique est un outil pour une personne sur une machine. La documentation des frameworks est directe à ce sujet : le guide de déploiement de Flask dit que son serveur de développement et son débogueur ne sont pas destinés à la production, et il compte aussi les services privés ou mono-utilisateur comme production. Le même raisonnement vaut pour tout framework doté d’un rechargeur et d’une page d’erreur interactive. Les fonctions de confort sont conçues pour raccourcir la boucle entre l’enregistrement d’un fichier et la vision d’un changement, pas pour faire face à un testeur que vous ne contrôlez pas.

Une trace interactive est une fuite d’informations et, dans certains débogueurs, une surface d’exécution de code. Gardez-la hors de l’aperçu, ou limitez l’aperçu à une compilation qui ne peut pas l’activer. Si les testeurs ont besoin de diagnostics, donnez-leur des journaux plutôt qu’une console.

Un écouteur générique est l’autre moitié de cette erreur. Se lier à toutes les interfaces expose le service sur des réseaux que vous ne visiez pas, y compris le Wi-Fi du café.

Utilisez des comptes jetables et des données sans effets de bord réels

Utilisez des comptes créés pour les tests et des données qui ne peuvent humilier personne. La partie dangereuse est rarement la ligne de base de données ; c’est l’intégration derrière le bouton. E-mail, paiements, SMS, webhooks et export de fichiers atteignent tous l’extérieur de l’aperçu.

Listez chaque effet sortant que le prototype peut déclencher, puis dirigez chacun vers un bac à sable ou désactivez-le. Une route privée ne rend pas inoffensif un point de paiement en direct.

Les identifiants de production sont le même problème sous une autre forme. Un aperçu qui hérite de la clé API de production pour gagner du temps de configuration est un système de production avec une interface de débogage. Créez des identifiants délimités avec les plus petites autorisations utiles. Faites-les tourner à la fin de l’aperçu, car un aperçu révoqué avec des clés actives reste actif.

Vérifiez la page, les ressources et la socket

Une page qui s’affiche n’est pas un aperçu qui fonctionne. Le HTML peut se charger pendant qu’un hôte de ressources, une API ou un WebSocket pointe encore vers une URL que le testeur ne peut pas atteindre. Chacun de ces éléments est une entrée distincte du contrat.

Depuis un appareil approuvé, demandez la page et la plus grosse ressource séparément :

curl -sS -o /dev/null -w "%{http_code}" https://preview.staging.example/
curl -sS -o /dev/null -w "%{http_code}" https://preview.staging.example/assets/app.js

Observez ensuite la console du navigateur pendant une interaction réelle et confirmez que la socket de rechargement en direct se connecte. Si ce n’est pas le cas, le correctif est une route délibérée pour ce point de terminaison, pas une règle qui s’élargit jusqu’à ce que la page paraisse complète.

Retirez l’aperçu à une date, pas de mémoire

Donnez à l’aperçu un propriétaire et une date de fin au moment où vous le créez. Quand la date arrive, supprimez l’entrée, les identités des testeurs et les identifiants temporaires via la configuration qui les détient. Un aperçu oublié est la façon dont un prototype privé devient public de façon permanente.

Vérifiez le retrait depuis l’extérieur : le nom d’hôte devrait cesser de se résoudre ou cesser de répondre aux clients non approuvés.

Conservez la source et les notes de récupération, mais pas le repli. Le test d’une bonne frontière d’aperçu est ennuyeux : un appareil approuvé peut faire les actions requises, et une identité non approuvée ne le peut pas. Il doit en aller de même après la coupure du tunnel. Ce résultat vaut plus qu’une icône VPN à côté d’un prototype qui tourne avec toutes les fonctions de développement activées.

Articles similaires