mac地址與瀏覽器指紋使用與區別
前段時間在開發中使用到用mac地址進行裝置唯一驗證登入,後改用成指紋驗證(fingerprintjs2),在此總結記錄下,希望得到補充與指正。
mac地址
- 據說獲取mac地址有很多種方法 ActiveX、Flash、applet,這裡使用到是ActiveX
- 缺點
- MAC 地址是全球唯一的網路裝置標示,但是它可以被人工修改,所以使用並不夠靠譜;
- ActiveX 只能在ie下使用;
- ActiveX預設是關閉的,使用時需要使用者先手動設定開啟,(在瀏覽器internet選項->安全->自定義級別->對未標記為安全執行執行指令碼的ActiveX控制元件初始化並執行指令碼->啟用);
- 瀏覽器會彈出設定不安全提示;
- 總體限制性太大了;
- 直接上程式碼啦~
// 建立ActiveX物件
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
var e = new Enumerator(properties);
let MacAddressIp = [];
// 獲取mac地址 可能會出現有多個的情況
for (; !e.atEnd(); e.moveNext()) {
var p = e.item();
if (p.MACAddress !== null) {
MacAddressIp.push(p.MACAddress)
}
}
複製程式碼
順便放上獲取電腦配置程式碼啦
function getSysInfo(){
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
//CPU資訊
var cpu = new Enumerator (service.ExecQuery("SELECT * FROM Win32_Processor")).item();
var cpuType=cpu.Name,hostName=cpu.SystemName;
//記憶體資訊
var memory = new Enumerator (service.ExecQuery("SELECT * FROM Win32_PhysicalMemory"));
for (var mem=[],i=0; !memory.atEnd(); memory.moveNext()) mem[i++]={cap:memory.item().Capacity/1024/1024,speed:memory.item().Speed}
//系統資訊
var system=new Enumerator (service.ExecQuery("SELECT * FROM Win32_ComputerSystem")).item();
var physicMenCap=Math.ceil(system.TotalPhysicalMemory/1024/1024),curUser=system.UserName,cpuCount=system.NumberOfProcessors
return {cpuType:cpuType,cpuCount:cpuCount,hostName:hostName,curUser:curUser,memCap:physicMenCap,mem:mem}
}
複製程式碼
瀏覽器指紋驗證(fingerprintjs2)
瀏覽器指紋是什麼?
也就是根據瀏覽器,系統當前配置,等等給瀏覽器生成一個唯一的32位碼,來進行驗證;
安裝
使用CDN線上獲取:
<script src="https://cdnjs.com/libraries/fingerprintjs2"></script>
複製程式碼
使用bowerinstall命令進行安裝:
bower install fingerprintjs2
複製程式碼
使用npminstall命令進行安裝:
npm install fingerprintjs2 --save--dev
複製程式碼
使用
import Fingerprint2 from 'fingerprintjs2'
// 使用瀏覽器指紋
var MacAddress;
new Fingerprint2({
// 配置項(可選)
excludeSessionStorage: true, // 排除會話儲存使用者的瀏覽器支援
excludeOpenDatabase: true, // 排除式使用者瀏覽器的支援
excludeIndexedDB: true, // 排除IndexedDB使用者瀏覽器的支援
excludeLanguage: true, // 排除瀏覽器的語言
userAgent: true, // 使用者代理,包含瀏覽器版本號
}).get(function(result, components){
MacAddress = result;
});
複製程式碼
缺點
- 有機率會出現重複的;
- 切換瀏覽器或修改系統配置可能使指紋碼改變;
最後
寫的比較凌亂,有更好的方法,歡迎補充啦;