Sur certains sites web, des pièges « honeypot » sont mis en place. Ces mécanismes sont destinés à attirer les bots dans des pièges sans que les utilisateurs réels ne s'en aperçoivent.
Les liens inclus dans le code HTML d'un site web mais invisibles pour les utilisateurs constituent l'une des formes les plus élémentaires de pièges « honeypot ». Pour déterminer si un lien est visible ou non pour les utilisateurs réels, vous pouvez vérifier son style calculé.
Voici un exemple de code comportant deux fonctions qui renverront une liste de tous les liens visibles présents sur la page web. La fonction vérifie pour chaque lien si la couleur d'arrière-plan est identique à celle du texte. Elle comporte également un paramètre nommé strict. Celui-ci indiquera à la fonction de vérifier si le lien est affiché ou s'il est visible, car tous les liens qui ne sont pas affichés ne sont pas nécessairement des pièges « honeypot ».
function getComputedBackgroundColor(elem) {
let isTransparent
do {
const bgColor = window.getComputedStyle(elem).backgroundColor
isTransparent = !/rgb\(|[1-9]{1,3}\)'$/.test(bgColor) // you can test this regex on regex101.com
if (isTransparent) {
elem = elem.parentElement
}
} while (isTransparent)
return window.getComputedStyle(elem).backgroundColor
}
function filterLinks(strict) {
let allLinksArray = Array.from(document.querySelectorAll('a[href]'));
console.log('There are ' + allLinksArray.length + ' total links');
let filteredLinks = allLinksArray.filter(link => {
let linkCss = window.getComputedStyle(link);
let isDisplayed = linkCss.getPropertyValue('display') != 'none';
let isVisible = linkCss.getPropertyValue('visibility') != 'hidden';
let computedBgColor = window.getComputedBackgroundColor(link)
let textColor = linkCss.textColor
if (strict) {
if (isDisplayed && isVisible && computedBgColor !== textColor) return link;
} else {
if (computedBgColor !== textColor) return link;
}
});
console.log('There are ' + filteredLinks.length + ' visible links');
}
En général, les pièges « honeypot » sont utilisés en combinaison avec des systèmes de suivi capables d'identifier les requêtes automatisées. Ainsi, même si les requêtes futures ne proviennent pas de la même adresse IP, le site web sera en mesure de les reconnaître comme similaires.