Em alguns sites, são criadas armadilhas honeypot. Estes mecanismos têm como objetivo atrair bots para armadilhas sem que os utilizadores reais se apercebam.
Links que estão incluídos no código HTML de um site, mas são invisíveis para as pessoas, são algumas das armadilhas honeypot mais elementares. Para determinar se um link é visível ou não para os utilizadores genuínos, pode verificar o seu estilo computado.
Aqui está um exemplo de código com duas funções que irão devolver uma lista com todos os links visíveis que se encontram na página web. A função verifica, para cada link, se a cor de fundo é igual à cor do texto. Também possui um parâmetro chamado strict. Isso irá instruir a função a verificar se o link está a ser exibido ou se é visível, pois nem todos os links que não são mostrados são armadilhas 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');
}
Normalmente, as armadilhas honeypot são utilizadas em combinação com sistemas de rastreamento capazes de identificar pedidos automatizados. Ao fazer isto, mesmo que pedidos futuros não se originem do mesmo IP, o site será capaz de reconhecê-los como sendo semelhantes.