En algunos sitios web se instalan trampas «honeypot». Estos mecanismos están diseñados para atraer a los bots hacia trampas sin que los usuarios reales se den cuenta.
Los enlaces que se incluyen en el código HTML de un sitio web pero que son invisibles para las personas son algunas de las trampas «honeypot» más elementales. Para determinar si un enlace es visible o no para los usuarios reales, es recomendable comprobar su estilo calculado.
Aquí hay un ejemplo de código con dos funciones que devolverán una lista con todos los enlaces visibles que hay en la página web. La función comprueba para cada enlace si el color de fondo es el mismo que el color del texto. También tiene un parámetro llamado «strict». Esto indicará a la función que compruebe si el enlace se muestra o si es visible, ya que no todos los enlaces que no se muestran son trampas «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, las trampas honeypot se utilizan en combinación con sistemas de seguimiento capaces de identificar solicitudes automatizadas. De este modo, aunque las futuras solicitudes no procedan de la misma IP, el sitio web podrá reconocerlas como similares.