Je connais les URI de données dans lesquels base64
des données encodées peuvent être utilisées en ligne, telles que des images. Aujourd'hui, j'ai reçu un e-mail en fait un spam dans lequel il y avait une icône animée (gif) dans son sujet:
Voici l'icône seule:
Donc, la seule chose qui m'est venue à l'esprit était tout à propos des URI de données et si Gmail permet d'insérer une sorte d'émoticônes dans le sujet. J'ai vu la version complète et détaillée de l'e-mail et j'ai indiqué la ligne d'objet de l'image ci-dessous:
Donc, GIF provient d' =?UTF-8?B?876Urg==?=
une chaîne codée similaire au schéma URI de données, mais je n'ai pas pu en extraire l'icône. Voici la source HTML de l'élément:
Pour faire court, il existe de nombreuses émoticônes d' https://mail.google.com/mail/e/XXX
où XXX
proviennent des nombres hexadécimaux. Ils ne sont documentés nulle part ou je n'ai pas pu les trouver. S'il s'agit d'URI de données, comment est-il possible de les inclure dans l'objet de l'e-mail de Gmail? (J'ai transféré cet e-mail à un compte de messagerie Yahoo, voyant [?]
au lieu de l'icône) et si ce n'est pas le cas, comment cette chaîne encodée est-elle analysée?
Réponses:
Brève description:
Ils sont appelés en interne
goomoji
et semblent être une extension UTF-8 non standard. Lorsque Gmail rencontre l'un de ces personnages, il est remplacé par l'icône correspondante. Je n'ai pas pu trouver de documentation sur eux, mais j'ai pu procéder à une rétro-ingénierie du format.Quelles sont ces icônes?
Ces icônes sont en fait les icônes qui apparaissent sous le panneau "Insérer des émoticônes".
Bien que je ne vois pas l'
52E
icône dans la liste, il y en a plusieurs autres qui suivent la même convention.B0C
4F4
Notez qu'il existe également des icônes dont les noms sont préfixés, tels que . Je n'ai pas été en mesure de déterminer si ou comment ces icônes peuvent être utilisées de cette manière.
gtalk.03C
Quelle est cette chose URI de données?
Ce n'est pas réellement un URI de données , bien qu'il partage certaines similitudes. Il s'agit en fait d'une syntaxe spéciale pour l'encodage de caractères non ASCII dans les sujets de courrier électronique, définie dans la RFC 2047 . En gros, ça marche comme ça.
Ainsi, dans notre exemple de chaîne, nous avons les données suivantes.
charset
=UTF-8
encoding
=B
(signifie base64)data
=876Urg==
Alors, comment ça marche?
Nous savons que d'une manière ou d'une autre
876Urg==
signifie l'icône52E
, mais comment?Si nous décodons en base64
876Urg==
, nous obtenons0xf3be94ae
. Cela ressemble à ce qui suit en binaire:Ces bits sont cohérents avec un caractère codé UTF-8 de 4 octets.
Les bits pertinents sont donc les suivants:
Ou lorsqu'il est aligné:
En hexadécimal, ces octets sont les suivants:
Comme vous pouvez le voir, à l'exception du
FE
préfixe qui sert vraisemblablement à distinguer lesgoomoji
icônes des autres caractères UTF-8, il correspond52E
à l'URL de l'icône. Certains tests prouvent que cela est vrai pour d'autres icônes.Cela semble beaucoup de travail, y a-t-il un convertisseur?:
Cela peut bien sûr être scénarisé. J'ai créé le code Python suivant pour mes tests. Ces fonctions peuvent convertir la chaîne encodée en base64 vers et à partir de la chaîne hexadécimale courte trouvée dans l'URL. Notez que ce code est écrit pour Python 3 et n'est pas compatible avec Python 2.
Fonctions de conversion:
Exemples:
Production:
Et, bien sûr, pour trouver l'URL d'une icône, il suffit simplement de créer un nouveau brouillon dans Gmail, d'insérer l'icône de votre choix et d'utiliser l'inspecteur DOM de votre navigateur.
la source
B
dans la syntaxe spéciale implique Base64 pourrait avoir été une supposition (la chaîne à la fin ressemble en quelque sorte à une chaîne encodée en Base64, si vous les avez déjà vues); après quoi il n'est pas si difficile de remarquer que les quatre octets suivent l'un des modèles UTF-8 pour les caractères Unicode, en particulier parce qu'il recherche Unicode. C'est un travail de détective plutôt cool, tout de même :)B
- c'est défini dans # 4Si vous utilisez le bon point de code hexadécimal (par exemple, fe4f4 pour 'pile de caca' ) et s'il est correctement encodé dans l'en-tête de la ligne d'objet, laissez-le être base64 (voir @AlexanderOMara) ou quoted-printable (
=?utf-8?Q?=F3=BE=93=B4?=
), alors Gmail sera automatiquement analysez-le et remplacez-le par l'emoji correspondant.Voici une liste d'emojis Gmail à copier et à coller dans les lignes d'objet ou dans le corps des e-mails. Les émojis animés, qui attireront encore plus l'attention dans la boîte de réception, sont placés sur un fond jaune:
la source
Un grand merci à Alexander O'Mara pour une réponse aussi bien documentée sur les images HTML marquées par goomoji!
Je voulais juste ajouter trois choses:
Il existe encore de nombreux emoji (et autres séquences Unicode générant des images) que les spammeurs et autres spécialistes du marketing commencent à utiliser dans les lignes d'objet des e-mails et que gmail ne convertit pas en images HTML. Dans certains navigateurs, ceux-ci apparaissent en gras et colorés, ce qui est presque aussi mauvais que l'animation. Les navigateurs pourraient également choisir de les animer, mais je ne sais pas si c'est le cas. Ces séquences Unicode sont affichées par le navigateur sous forme de texte Unicode, de sorte que l'apparence exacte (couleur ou non, animée ou non, ...) dépend du système de rendu de texte utilisé par le navigateur. L'apparence d'un emoji Unicode donné dépend également de tous les sélecteurs de variation Unicode et des modificateurs d'emoji.qui apparaissent à proximité dans la séquence de points de code Unicode. Contrairement au spam emoji basé sur des images, ces séquences peuvent être copiées et collées hors du navigateur et dans d'autres applications sous forme de texte Unicode.
J'espère que les nombreux spécialistes du marketing qui liront cette question StackOverflow diront simplement non. C'est une idée horrible d'inclure ces séquences dans les lignes d'objet de vos e-mails et cela vous ternira immédiatement, vous et votre marque, en tant que spammeurs lowlife. Cela ne vaut pas "l'attention" que votre e-mail recevra.
Bien sûr, la première question qui vient à l'esprit de tout le monde est: "Comment puis-je me débarrasser de ces choses?" Heureusement, il existe ce script utilisateur Greasemonkey / Tampermonkey / Violentmonkey open-source:
Objet Gmail Emoji Roach Motel
Ce usercript élimine à la fois les images HTML (grâce au travail impressionnant d' Alexander O'Mara ) et les types Unicode pur.
Pour ce dernier type, le usercript inclut une expression régulière conçue pour capturer les séquences Unicode susceptibles d'être abusées par les marketeurs. Le regex ressemble à ceci dans ES6 Javascript (le script utilisateur le traduit en regex pré-ES6 largement pris en charge à l'aide de l'incroyable ES6 Regex Transpiler ):
la source