Maison > interface Web > js tutoriel > le corps du texte

cf-doh : recherchez les enregistrements DNS à partir de votre javascript frontend

Susan Sarandon
Libérer: 2024-10-08 08:22:02
original
1004 Les gens l'ont consulté

cf-doh: look up DNS records from your frontend javascript

Récemment, alors que je travaillais sur Archival, je me suis retrouvé dans le besoin de vérifier les enregistrements DNS d'un domaine.

Arrière-plan

Archival Pro permet aux utilisateurs de pointer des domaines personnalisés vers des sites d'archives. Pour activer https pour ces sites, nous utilisons un vérificateur de domaine basé sur les enregistrements TXT pour vérifier la propriété avant d'émettre un SSL. Pour simplifier ce processus, je devais interroger les enregistrements pour vérifier si les enregistrements CNAME et TXT sont correctement configurés et afficher des messages utiles sinon.

Dans un environnement node.js ou de type C, c'est assez simple, car chaque système d'exploitation dispose d'un cache DNS local et d'outils de recherche. Cependant, j'exécutais cela dans un travailleur cloudflare, qui est en fait un isolat v8 et n'a donc pas accès au système DNS du système d'exploitation. En fait, même avec nodejs_compat activé, la bibliothèque DNS de stdlib du nœud renverra simplement un objet vide.

DNS sur HTTPS

Après avoir fait quelques recherches, j'ai réalisé que le DNS sur HTTPS moderne conviendrait bien à ce problème et aurait des utilisations en dehors de mon cas restreint. Cependant, je n'aimais aucune des bibliothèques sur npm pour ce cas d'utilisation - ce que je voulais, c'était quelque chose de plus similaire à la bibliothèque DNS du nœud, qui fait abstraction des serveurs de recherche.

Cloudflare propose une solution DNS-over-HTTPs, que vous pouvez découvrir ici : https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/

Le principal inconvénient de cette API est qu'elle peut être un peu opaque pour les utilisateurs moyens : les codes d'état sont renvoyés sous forme de nombres correspondant à une spécification, et le format de réponse est au format questions et réponses et inclut des données granulaires qui, bien qu'utile, il est excessif pour une utilisation la plus occasionnelle.

Un forfait simple

Pour faciliter cela pour moi et pour les autres, j'ai publié cf-doh.

Il s'agit d'une bibliothèque simple qui facilite grandement l'interrogation des enregistrements à partir du navigateur, des travailleurs Cloudflare ou de tout autre endroit où Javascript s'exécute. Cela dépend d'une implémentation native de récupération et permet d'en définir une si vous n'en avez pas déjà une, donc si vous le souhaitez, vous pouvez même exécuter dans un nœud avec une implémentation de récupération de whatwg polyremplie - cependant, si vous êtes dans un nœud, vous le ferez également avoir node:dns, ce qui est probablement ce que vous voulez.

En plus d'encapsuler les appels d'extraction, cette bibliothèque fournit des types complets pour l'ensemble de la spécification, gère les réponses de chaîne entre guillemets et convertit les erreurs http et les réponses d'état en exceptions.

L'utilisation est simple :

import { queryDNS } from "cf-doh";

const records = await queryDNS("_verification.jesseditson.com", "TXT");

records.forEach((r) => console.log(r));
Copier après la connexion

Si vous préférez une valeur saisie, vous pouvez même importer tous les types d'enregistrement valides et les utiliser à la place des chaînes :

import { queryDNS, DNSRecordType } from "cf-doh";

const records = await queryDNS("_verification.jesseditson.com", DNSRecordType.TXT);
Copier après la connexion

Si vous souhaitez gérer des statuts autres que NoError, vous pouvez plutôt utiliser une API de niveau inférieur :

import { queryDNSRecords, DNSRecordType, DOHStatus, DOHStatusMessage } from "cf-doh";

const response = await queryDNSRecords("_verification.jesseditson.com", DNSRecordType.TXT);

switch (response.status) {
  case DOHStatus.NoError:
    console.log("This record exists!");
    break;
  case DOHStatus.NXDomain:
    console.log("Domain wasn't found");
    break;
  default:
    console.log(DOHStatusMessage[response.status]);
    break;
}
Copier après la connexion

Pour ajouter ceci à votre projet, exécutez simplement npm install --save cf-doh. Si vous êtes curieux de connaître la source ou la surface complète de l'API, consultez le dépôt :

https://github.com/jesseditson/cf-doh

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal