Publication d’un blob de canvas via AJAX: empêcher / supprimer le cache local

Je télécharge une image de canvas sur mon serveur avec AJAX en utilisant une méthode comme celle-ci:

myCanvas.toBlob( function( blob ) { var fdata = new FormData( ); fdata.append( 'myFile', blob ); $.ajax( { url: 'http://myScript.foo', type: 'POST', data: fdata, processData: false, contentType: false } ); }, 'image/jpeg', 0.9 ); 

(avec merci à https://stackoverflow.com/a/8244082/1180785 )

Mais selon Mozilla,

toBlob […] Renvoie un object Blob représentant l’image contenue dans le canevas. ce fichier peut être mis en cache sur le disque ou stocké en mémoire à la discrétion de l’agent utilisateur

( https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement )

Il est très important pour mon programme que l’image ne soit pas conservée (non pas comme une ressortingction, mais comme un problème de confidentialité). J’ai donc besoin de savoir s’il existe une garantie que cette éventuelle copie en cache sera supprimée et quand. Il existe également un risque potentiel que des programmes non supprimés le découvrent. Par conséquent, j’aimerais savoir si je peux écraser les données ou forcer une suppression sécurisée d’une autre manière.

S’il est possible d’obtenir le même résultat sans risquer une copie mise en cache localement, ce serait encore mieux. Le cryptage est également une option si cela est possible.

Je me soucie uniquement des navigateurs modernes, supportant spécifiquement getUserMedia , donc pas d’IE (j’ai un repli Flash pour les navigateurs plus anciens qui traitent tout ce qui se trouve en mémoire).

Si la confidentialité et la sécurité sont importantes, envisagez de générer un data-uri partir du canevas au lieu d’un object Blob .

Comme le blob peut ou ne peut pas être stocké (mis en cache) temporairement sur le disque, le fichier sera soumis à des situations de sécurité (c’est-à-dire, ne pas être supprimé comme vous le mentionnez). Un fichier / une chaîne de mémoire sera bien sûr disponible pour une numérisation en mémoire, mais il est aussi proche que vous pourrez le “sécuriser” lorsque vous récupérez une image de la zone de dessin pour la transférer.

Un data-uri est généralement * généré en mémoire uniquement et contient généralement une image codée en base64 (si votre image est très volumineuse, il existe toujours un risque de pagination de ce dernier sur le disque).

*) dépendant de la mise en œuvre, par exemple, il est plus probable que les navigateurs mobiles utilisent un fichier temp-to-file s’il y a peu de ressources mémoire disponibles – cependant, ce comportement possible n’est pas documenté.

Pour obtenir un data-uri utilisez plutôt:

 canvas.toDataURL(); 

Vous pouvez éventuellement spécifier un type d’image (PNG par défaut):

 canvas.toDataURL('image/jpeg'); //optional second parameter is quality [0.0, 1.0] 

Une autre option consiste à extraire les pixels directement du canevas et à les stocker dans un tableau (typé). Les données peuvent ensuite être transférées telles quelles ou on peut utiliser une bibliothèque de compression pour compresser, par exemple, au format zip avant l’envoi des données.

Cependant, cette approche est la moins efficace.

En toute probabilité, le blob est supprimé lorsque, soit,

  1. il n’y a aucune référence à cela
  2. l’onglet / fenêtre est fermé

Dans ce contexte, “cache” ne signifie pas sur une longue période, mais ne doit pas être recalculé à chaque access.

Cacher le contenu à long terme serait un gaspillage d’espace de stockage, puisqu’un canevas est conçu pour être dynamic. S’il s’agissait d’un contenu statique, un devrait être utilisé.

Je n’ai examiné aucun code source, mais c’est une conclusion logique. Une fois que jQuery a cessé de référencer le blob (lorsque la demande est envoyée), il doit être récupéré par le ramasse-miettes et jeté au rebut.


La suppression sécurisée est très faible et les navigateurs ne le permettraient jamais. Cela fonctionne essentiellement en écrivant à des adresses spécifiques sur le disque dur, qui pourraient être mal calculées et détruire des milliers de fichiers (dans une partition très fragmentée). S’ils le stockent sur le disque, ils seront récupérables par l’informatique judiciaire.