📜  快速指纹 - Javascript (1)

📅  最后修改于: 2023-12-03 14:54:19.339000             🧑  作者: Mango

快速指纹 - Javascript

指纹识别是信息安全中的一个重要环节。在很多情况下,我们需要快速地对一个网站或者一个服务做指纹识别,以便于做一些后续的操作。本文介绍几种基于Javascript的快速指纹识别方法。

一、通过HTTPS证书

HTTPS证书通常是通过一个CA机构颁发的。因此,对于同一个网站,不同的CA机构颁发的证书会有不同的指纹。我们可以通过获取证书指纹的方式来进行指纹识别。以下是一个简单的Javascript程序,可以获取当前网站的证书指纹:

var thumbprint = '';
if (window.crypto) {
  const digest = await window.crypto.subtle.digest(
    'SHA-256',
    new TextEncoder().encode(new DataView(await window.crypto.subtle.exportKey('spki', await window.crypto.subtle.generateKey({ name: 'RSA-PSS', modulusLength: 2048 }, true, ['verify'])).then(key => key.publicKey)))
  );
  thumbprint = Array.from(new Uint8Array(digest)).map(b => b.toString(16).padStart(2, '0')).join('');
}

该程序使用了Crypto API中的Subtle Crypto对象,对当前网站的公钥SPKI进行了SHA-256哈希,并返回了一个hex格式的结果,即为证书指纹。

二、通过URL特征

很多网站的URL都有一定的特征。比如,某些网站会在URL中包含版本信息、引擎信息等等。我们可以通过判断一个URL中包含的特征来进行指纹识别。以下是一个简单的Javascript程序,可以获取当前网站的URL特征:

var features = '';

const url = new URL(window.location.href);
if (url.pathname.toLocaleLowerCase().indexOf('admin') !== -1) {
  features += 'Admin Panel Detected\n';
}

if (url.hostname.toLocaleLowerCase().indexOf('wordpress') !== -1) {
  features += 'WordPress Site Detected\n';
}

if (/^.*\/wp-(content|admin|includes)\/.*$/.test(url.pathname)) {
  features += 'WordPress Site Detected\n';
}

if (/^.*\/(phpmyadmin|pma)\/.*$/.test(url.pathname)) {
  features += 'phpMyAdmin Detected\n';
}

if (/^.*\/(database|dbadmin|db|mysql|myadmin|sqladmin|sql|webdb).*$/i.test(url.pathname)) {
  features += 'Database Management System Detected\n';
}

if (url.pathname.toLocaleLowerCase().indexOf('jmx-console') !== -1) {
  features += 'JMX Console Detected\n';
}

console.log(features);

该程序对当前网站的URL进行了一系列特征判断,并将判断结果保存在features变量中。

三、通过页面元素

很多网站都有自己独特的页面元素。比如,某些网站可能有自己独特的CSS类名、JS函数名、HTML标签等等。我们可以通过判断一个网站上存在的页面元素来进行指纹识别。以下是一个简单的Javascript程序,可以获取当前网站的页面元素指纹:

var fingerprints = '';

if (document.querySelector('.admin-panel')) {
  fingerprints += 'Admin Panel Detected\n';
}

if (document.querySelector('.wordpress')) {
  fingerprints += 'WordPress Site Detected\n';
}

if (document.querySelector('meta[name="generator"][content^="WordPress"]')) {
  fingerprints += 'WordPress Site Detected\n';
}

if (document.querySelector('.phpmyadmin')) {
  fingerprints += 'phpMyAdmin Detected\n';
}

if (document.querySelector('title').innerText.toLowerCase().indexOf('database') !== -1) {
  fingerprints += 'Database Management System Detected\n';
}

if (document.querySelector('script[src$="/jmx-console/HtmlAdaptor"]')) {
  fingerprints += 'JMX Console Detected\n';
}

console.log(fingerprints);

该程序对当前网站上的一系列页面元素进行了特征判断,并将判断结果保存在fingerprints变量中。

四、总结

以上代码只是简单的指纹检测代码,实现原理大同小异,开发者可自行扩展丰富自己的指纹库。你可以将以上代码整合进自己编写的指纹库中,以方便快速地进行指纹识别。