Baike.dev
Connexion
> 返回资讯列表
news_article.exe
📰

Analyser en toute sécurité les fichiers électroniques dans le navigateur

Safely parsing email files in the browser

2026年9月4日5 次浏览来源:Dev.to 阅读原文

Un fichier email n'est pas seulement un texte plus quelques pièces jointes. Il peut contenir des parties HTML, MIME imbriquées, des noms de fichiers trompeurs, des ressources en ligne, des pixels de suivi à distance, des encodages mal formés et suffisamment de données pour épuiser un onglet du navigateur. Déplacer l'analyse dans le navigateur supprime un téléchargement de l'architecture, mais il ne rend pas automatiquement le spectateur sûr. Cela change l'emploi de sécurité: le contenu méfiant est maintenant interprété à côté de la session web active de l'utilisateur. Voici la liste de contrôle que j'utilise pour un lecteur local EML et winmail.dat/TNEF. Traiter chaque champ analysé comme non confiant L'expéditeur, le sujet, le destinataire, le nom du fichier, le type MIME et le corps du message provenaient tous d'un fichier. En-têtes de rendu et noms de fichiers comme texte, jamais en concaténant HTML. Il en va de même pour les erreurs. Une exception parser peut inclure un nom de fichier...

Un fichier email n'est pas seulement un texte plus quelques pièces jointes. Il peut contenir des parties HTML, MIME imbriquées, des noms de fichiers trompeurs, des ressources en ligne, des pixels de suivi à distance, des encodages mal formés et suffisamment de données pour épuiser un onglet du navigateur. Déplacer l'analyse dans le navigateur supprime un téléchargement de l'architecture, mais il ne rend pas automatiquement le spectateur sûr. Cela change l'emploi de sécurité: le contenu méfiant est maintenant interprété à côté de la session web active de l'utilisateur. Voici la liste de contrôle que j'utilise pour un lecteur local EML et winmail.dat/TNEF. Traiter chaque champ analysé comme non confiant L'expéditeur, le sujet, le destinataire, le nom du fichier, le type MIME et le corps du message provenaient tous d'un fichier. En-têtes de rendu et noms de fichiers comme texte, jamais en concaténant HTML. Il en va de même pour les erreurs. Une exception d'analyseur peut inclure un nom de fichier ou un fragment d'entrée mal formée. Affichage de ce message mot à mot peut fuiter les données dans les journaux ou le transformer en balisage. L'analyseur de carte échoue à des catégories d'erreurs stables, puis affiche une explication contrôlée. Normaliser en un modèle interne EML et TNEF ont des structures de conteneurs différentes, mais l'interface utilisateur ne devrait pas contenir deux implémentations de sécurité indépendantes. Les deux analyseurs peuvent produire un modèle de message commun: La couche de normalisation est le bon endroit pour imposer des limites par source et rejeter les structures non supportées. Le téléspectateur et le code de téléchargement fonctionnent alors contre les mêmes données limitées quel que soit le format d'entrée. Sanitize HTML comme entrée hostile Email HTML a été conçu pour les clients de courrier, pas pour l'insertion directe dans une application DOM. Une politique conservatrice supprime : les scripts et les gestionnaires d'événements; les formulaires et les contrôles interactifs; , , et les éléments; les styles et les URL CSS; les protocoles dangereux; le contenu exécutable ou inattendu intégré. Utilisez un désinfectant entretenu avec une version épinglée, mais ne vous arrêtez pas à sa configuration par défaut. L'email a un comportement de chargement de ressources qu'un préréglage générique de HTML sans danger peut encore permettre. Le texte simple devrait rester le repli. Si le HTML ne peut pas être désinfecté dans le sous-ensemble autorisé, montrer du texte vaut mieux que d'essayer de préserver tous les détails visuels. Réécrire les images locales en ligne Les messages légitimes renvoient souvent à une pièce jointe en utilisant ou . Ces images peuvent être affichées sans demande réseau : correspondre à la référence d'une pièce jointe analysée ; créer un Blob à partir des octets de pièce jointe ; créer une URL objet ; remplacer la référence ressource par cette URL locale ; révoquer l'URL lorsque le message est commuté, supprimé, effacé ou les sorties de page. Le jumelage nécessite des identifiants normalisés et des vérifications MIME explicites. Ne laissez pas un nom de fichier ou un emplacement de contenu déclaré comme pièce jointe devenir une URL arbitraire. Garder les images distantes hors du DOM par défaut Enlever une image visible distante après le rendu est trop tard. La requête peut déjà avoir exposé l'adresse IP de l'utilisateur, le temps, l'agent utilisateur, et un jeton de suivi unique. La séquence plus sûre est : analyser et désinfecter le corps ; remplacer les sources d'images distantes par des espaces inertes avant insertion ; indiquer à l'utilisateur que les images externes sont bloquées ; seulement après une action explicite pour le message actuel, restaurer les sources HTTPS autorisées ; utiliser une politique de non-référeur. Pour le message actuel, il est important. La permission ne doit pas être portée silencieusement à un autre courriel dans le lot, et elle n'appartient pas au stockage local. Un test de navigateur doit observer le réseau et affirmer zéro demande d'image à distance avant le clic. Après le clic, il ne devrait autoriser que la requête d'image attendue et aucune navigation ou exécution de script. Les noms de pièces jointes peuvent contenir des séparateurs de chemins, des caractères de contrôle, des noms de périphériques réservés ou des valeurs répétées. Normaliser chaque nom avant de l'utiliser dans une archive de téléchargement ou ZIP: composants de répertoire de bande; supprimer le contrôle et les caractères dangereux; fournir un retour lorsque le résultat est vide; longueur du capuchon; dédoubler les noms de façon déterministe. La création ZIP peut se produire entièrement en mémoire. Les URL des objets utilisés pour les fichiers individuels, les prévisualisations PDF et les archives devraient avoir un propriétaire et un cycle de vie clairs. Retrouve trop tôt et les téléchargements échouent

> 分享: