Taint (marquage)
Utilisation
L'option taint
active le support des API expérimentales de React pour le marquage des objets et des valeurs. Cette fonctionnalité aide à empêcher que des données sensibles ne soient accidentellement transmises au client. Lorsqu'elle est activée, vous pouvez utiliser :
experimental_taintObjectReference
pour marquer les références d'objets.experimental_taintUniqueValue
pour marquer des valeurs uniques.
Bon à savoir : L'activation de ce drapeau active également le canal
experimental
de React pour le répertoireapp
.
Avertissement : Ne comptez pas sur l'API de marquage comme seul mécanisme pour empêcher l'exposition de données sensibles au client. Consultez nos recommandations de sécurité.
Les API de marquage vous permettent d'être défensif, en marquant de manière déclarative et explicite les données qui ne sont pas autorisées à traverser la limite Serveur-Client. Lorsqu'un objet ou une valeur est transmis à travers cette limite, React lance une erreur.
Ceci est utile dans les cas où :
- Les méthodes pour lire les données échappent à votre contrôle
- Vous devez travailler avec des structures de données sensibles que vous n'avez pas définies
- Des données sensibles sont accédées lors du rendu d'un composant serveur
Il est recommandé de modéliser vos données et API afin que les données sensibles ne soient pas retournées dans des contextes où elles ne sont pas nécessaires.
Mises en garde
- Le marquage ne peut suivre les objets que par référence. Copier un objet crée une version non marquée, ce qui annule toutes les garanties fournies par l'API. Vous devrez marquer la copie.
- Le marquage ne peut pas suivre les données dérivées d'une valeur marquée. Vous devez également marquer la valeur dérivée.
- Les valeurs restent marquées tant que leur référence est dans la portée. Voir la référence des paramètres de
experimental_taintUniqueValue
pour plus d'informations.
Exemples
Marquage d'une référence d'objet
Dans ce cas, la fonction getUserDetails
retourne des données sur un utilisateur donné. Nous marquons la référence de l'objet utilisateur pour qu'elle ne puisse pas traverser la limite Serveur-Client. Par exemple, en supposant que UserCard
est un composant client.
Nous pouvons toujours accéder aux champs individuels de l'objet marqué userDetails
.
Maintenant, passer l'objet entier au composant client lancera une erreur.
Marquage d'une valeur unique
Dans ce cas, nous pouvons accéder à la configuration du serveur en attendant les appels à config.getConfigDetails
. Cependant, la configuration système contient SERVICE_API_KEY
que nous ne voulons pas exposer aux clients.
Nous pouvons marquer la valeur config.SERVICE_API_KEY
.
Nous pouvons toujours accéder aux autres propriétés de l'objet systemConfig
.
Cependant, passer SERVICE_API_KEY
à ClientDashboard
lance une erreur.
Notez que, même si systemConfig.SERVICE_API_KEY
est réaffecté à une nouvelle variable, le passer à un composant client lance toujours une erreur.
Alors qu'une valeur dérivée d'une valeur unique marquée sera exposée au client.
Une meilleure approche est de supprimer SERVICE_API_KEY
des données retournées par getSystemConfig
.