Comment Mac OS X peut-il enregistrer des détails sur l'URL à partir de laquelle un fichier a été téléchargé?

8

WRT this topic Que dois-je faire à propos de com.apple.quarantine? , Je veux savoir comment OS X peut apprendre et enregistrer ces informations dans le champ @. Je ne cherche pas un moyen de désactiver cette fonctionnalité, mais un code (ou pseudocode, idée, peu importe) concernant l'implémentation de cette chose. Merci d'avance.

Raffaele Di Fazio
la source

Réponses:

6

Comme Daniel l'a mentionné, le navigateur peut stocker l'URL source (et également le référent) d'un fichier téléchargé dans l'attribut étendu com.apple.metadata:kMDItemWhereFroms.

Apple l'a d'abord ajouté à Safari pour Mac OS X 10.4, puis il a été ajouté à Chrome / Chromium [Issue 22289] , et il y a une demande d'amélioration exceptionnelle pour l'ajouter à Firefox [Bug 337051] .

En ce qui concerne le code réel à implémenter, consultez le patch Chromium .

mark4o
la source
Belle histoire :-) Cependant, lorsque j'utilise Safari, je ne vois pas le référent (ou du moins pas dans les nouveaux téléchargements, j'ai essayé de voir si j'avais raté quelque chose). Peut-être que les choses sont différentes lors d'un clic droit et d'un téléchargement, ou lorsqu'un téléchargement démarre automatiquement? (Par exemple, certains navigateurs n'envoient pas non plus le référent lors de l'ouverture de liens dans de nouvelles fenêtres.)
Arjan
Ah, vous avez raison, l' mdlsaffiche pour les téléchargements qui démarrent automatiquement. Et Finder Get Info montre cela comme une liste séparée par des virgules, ce que je n'ai pas remarqué!
Arjan
6

Après avoir téléchargé un fichier, l'exécution xattr filevous montrera ce que le navigateur a stocké dans les attributs étendus:

xattr mydownload.gz
com.apple.metadata: kMDItemWhereFroms
com.apple.quarantine

Ensuite, plus de détails:

xattr -p com.apple.quarantine mydownload.gz 
0000; 4cee9d4b; Safari; 24064D6B-9854-46BC-AF73-5DE5F8042D0B | com.apple.Safari

xattr -p com.apple.metadata: kMDItemWhereFroms mydownload.gz 
62 70 6C 69 73 74 30 30 A1 01 5F 10 24 68 74 74
70 3A 2F 2F 73 75 [et ainsi de suite]

... ou, dans un format lisible:

mdls -name kMDItemWhereFroms mydownload.gz
kMDItemWhereFroms = (
    "http: // some-url"
)

Vous pouvez également définir vous-même (ou tout attribut que vous souhaitez):

xattr -w un certain nom une certaine valeur mydownload.gz

Ce qui suit fonctionne également, même s'il a des résultats différents lors de la nouvelle exécution des commandes ci-dessus:

xattr -w com.apple.metadata: kMDItemWhereFroms http://example.com mydownload.gz

Et pour l' com.apple.quarantineattribut, selon comprendre :

En règle générale, les données de quarantaine se composent d'un ensemble de 4 valeurs délimitées par des points-virgules (un ensemble de chiffres décimaux d'un objectif inconnu - généralement 0000, un ID opaque à 8 caractères , le nom de l'application qui a créé le fichier en quarantaine et l'UTI de l'application (Identifiant de type uniforme) précédé d'un symbole de tuyau)

Par exemple, pour deux fichiers différents téléchargés à l'aide de Mozilla FireFox, cela ressemble à:

com.apple.quarantine: 0000;4b392bb2;Firefox;|org.mozilla.firefox
com.apple.quarantine: 0000;4b38d820;Firefox;|org.mozilla.firefox

En utilisant les actions de dossier d'Automator, vous pouvez exécuter de telles commandes pour de nouveaux fichiers dans un dossier spécifique, si c'est ce que vous recherchez.

Arjan
la source
4

Ces informations sont stockées dans ce que l'on appelle des "attributs étendus". John Siracusa a un excellent article sur les attributs étendus lors de leur introduction, dans OS X 10.4: http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7 .

Il semble qu'il n'y ait plus de page de manuel pour l'outil de ligne de commande 'xattr', mais 'xattr -h' devrait afficher une aide de base.

Une API de niveau POSIX / BSD est disponible dans /usr/include/sys/xattr.h qui définit les fonctions C telles que getxattr (), setxattr (), removexattr (), listxattr () et leurs cousins ​​basés sur FILE. (Ces commandes, contrairement à 'xattr (1)', ont des pages de manuel).

NSGod
la source
3

Il est défini par l'application téléchargeant le fichier. Aucune détection de téléchargement magique, juste un attribut défini sur le fichier téléchargé par l'application de téléchargement.

Je viens de télécharger un fichier zip à l'aide de wgetGoogle Chrome, Firefox et Safari, et, comme prévu, le wgettéléchargement n'a pas d'attributs étendus, les téléchargements du navigateur l'ont, car ils connaissent cette fonctionnalité. Fait intéressant, le jeu de téléchargement de Firefox met en quarantaine, mais a oublié de définir com.apple.metadata:kMDItemWhereFroms, les informations sur lesquelles le fichier téléchargé était initialement situé (son URL). Safari et Chrome définissent les deux, wgetni l'un ni l'autre.

Daniel Beck
la source