Adresses MAC en JavaScript

102

Je sais que nous pouvons obtenir l'adresse MAC d'un utilisateur via IE (objets ActiveX).

Existe-t-il un moyen d'obtenir l'adresse MAC d'un utilisateur à l'aide de JavaScript?

Adhip Gupta
la source

Réponses:

57

Je suis d'accord avec toutes les réponses précédentes selon lesquelles ce serait une vulnérabilité de confidentialité / sécurité si vous pouviez le faire directement à partir de Javascript. Il y a deux choses auxquelles je peux penser:

  • Utilisation de Java (avec une applet signée)
  • Utilisation de Javascript signé, qui dans FF (et Mozilla en général) obtient des privilèges plus élevés que JS normal (mais c'est assez compliqué à mettre en place)
Panthère grise
la source
1
J'avais hâte de savoir, pouvons-nous obtenir une information unique comme l'adresse mac ou le numéro de série ou quelque chose comme ça de l'utilisateur via JavaScript? Ou le nom du PC?
Flamur Beqiraj
55

La réponse simple et rapide est non.

Javascript est un langage de haut niveau et n'a pas accès à ce type d'informations.

GateKiller
la source
alors qu'en est-il de tous les résultats de recherche Google fournissant des exemples de codes pour obtenir l'adresse MAC
Lune
14
J'ai jeté un coup d'œil rapide sur Google et toutes les pages que j'ai lues étaient uniquement une solution IE qui reposait sur l'utilisation d'objets ActiveX. Si vous pouviez publier un lien indiquant le contraire ...
GateKiller
25
Je ne pense vraiment pas qu'être un "langage de haut niveau" ait quoi que ce soit à voir avec les adresses MAC, car tout langage de programmation côté serveur vous permet d'accéder à la table ARP, même indirectement (par exemple via un sous-processus). Je pense que le "langage côté client" fonctionnerait mieux ...
kirbyfan64sos
6
Il n'y a aucune raison pour qu'un langage de haut niveau n'ait pas accès aux informations matérielles de bas niveau. Dans ce cas, cela ne se produit pas car ce serait un problème de sécurité.
nsn
31

Non, vous ne pouvez pas obtenir l'adresse MAC en JavaScript, principalement parce que l'adresse MAC identifie de manière unique l'ordinateur en cours d'exécution, ce serait donc une vulnérabilité de sécurité.

Maintenant, si tout ce dont vous avez besoin est un identifiant unique, je vous suggère d'en créer un vous-même à l'aide d'un algorithme cryptographique et de le stocker dans un cookie.

Si vous avez vraiment besoin de connaître l'adresse MAC de l'ordinateur ET que vous développez pour des applications internes, je vous suggère d'utiliser un composant externe pour le faire: ActiveX pour IE, XPCOM pour Firefox (installé en tant qu'extension).

Vincent Robert
la source
Connaissez-vous un composant externe pour Safari?
Non, je suggérais en fait d'en créer un.
Vincent Robert
comment proposez-vous de créer un identifiant unique? Comment utilisez-vous un algorithme cryptographique pour garantir que chaque utilisateur qui l'exécute sur sa machine obtienne un identifiant unique?
Michael
2
@Michael Wikipedia répertorie plusieurs implémentations d'UUID
Vincent Robert
7

Nan. La raison pour laquelle ActiveX peut le faire est que ActiveX est une petite application qui s'exécute sur la machine du client.

J'imagine que l'accès à ces informations via JavaScript serait une faille de sécurité.

Seibar
la source
4

S'il s'agit d'une application intranet et que tous les clients utilisent DHCP, vous pouvez interroger le serveur DHCP pour l'adresse MAC d'une adresse IP donnée.

Ryan Ahearn
la source
4

Je cherchais le même problème et suis tombé sur le code suivant.

Comment obtenir l'adresse MAC du client (Web):

Pour obtenir l'adresse MAC du client uniquement, nous pouvons nous fier au contrôle JavaScript et Active X de Microsoft.Il ne fonctionne dans IE que si Active X est activé pour IE. Comme l'ActiveXObject n'est pas disponible avec Firefox, il ne fonctionne pas avec Firefox et fonctionne correctement dans IE.

Ce script est pour IE uniquement:

function showMacAddress() {
    var obj = new ActiveXObject("WbemScripting.SWbemLocator");
    var s = obj.ConnectServer(".");
    var properties = s.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
    var e = new Enumerator(properties);
    var output;
    output = '<table border="0" cellPadding="5px" cellSpacing="1px" bgColor="#CCCCCC">';
    output = output + '<tr bgColor="#EAEAEA"><td>Caption</td><td>MACAddress</td></tr>';
    while (!e.atEnd()) {
        e.moveNext();
        var p = e.item();
        if (!p) continue;
        output = output + '<tr bgColor="#FFFFFF">';
        output = output + '<td>' + p.Caption; +'</td>';
        output = output + '<td>' + p.MACAddress + '</td>';
        output = output + '</tr>';
    }
    output = output + '</table>';
    document.getElementById("box").innerHTML = output;
}

showMacAddress();
<div id='box'></div>

Ad Kahn
la source