• XSS.stack #1 – первый литературный журнал от юзеров форума

Вопрос по Гугл и CloudFlare ботам

DEKAn272

RAID-массив
Пользователь
Регистрация
16.01.2024
Сообщения
74
Реакции
30
Гарант сделки
1
Я лью блек. Щас хочу выйти на новую ступень, и я активно над этим работаю. У меня возник вопрос. На сколько сильно боты гугла и cf могут мне поднасрать, и как с ними бороться? Могу добавить, сайты я всегда ставлю на апач.
 
Хороший вопрос, используй редирект, клоаку или прокси
Спасибо. Если с редиректом всё понятно. То с клоакой и проксями мне ещё стоит разобраться. Попробую поискать треды, где про это подробнее расписано
 
Спасибо. Если с редиректом всё понятно. То с клоакой и проксями мне ещё стоит разобраться. Попробую поискать треды, где про это подробнее расписано
Всегда пожалуйста, посоветую почитать про клоаку, это даже интересно)
 
Спасибо. Если с редиректом всё понятно. То с клоакой и проксями мне ещё стоит разобраться. Попробую поискать треды, где про это подробнее расписано
Не знаю о каких проксях он говорит. Клоака не решение. Клоака служит для прохождения модерации. А не фильтрации поисковых ботов (ии боты хрома, майкрософта), которые шарят по сайту, вешают кт и сливают стабы файлов. Пиши в ЛС список вопросов - подсказываю бесплатно
 
Не знаю о каких проксях он говорит. Клоака не решение. Клоака служит для прохождения модерации. А не фильтрации поисковых ботов (ии боты хрома, майкрософта), которые шарят по сайту, вешают кт и сливают стабы файлов. Пиши в ЛС список вопросов - подсказываю бесплатно
о реверс проксях. Клоака решение, она служит как раз таки для фильтрации, прохождение модерации - это как вариант её использования. Лучше накопить на клоаку по типу адспект или хайдклик, чем ставить свою и тренировать бд ботов, безусловно какой то бот, asn/ua/другие параметры которого нет у владельцев клоаки пролезет, но лучше с ней чем без неё.
 
Не знаю о каких проксях он говорит. Клоака не решение. Клоака служит для прохождения модерации. А не фильтрации поисковых ботов (ии боты хрома, майкрософта), которые шарят по сайту, вешают кт и сливают стабы файлов. Пиши в ЛС список вопросов - подсказываю бесплатно
Клоакинг – лишь один из инструментов, но да, он не панацея. Если мы говорим о продвинутых ботах , то тут нужен комплексный подход разными методами.
 
о реверс проксях. Клоака решение, она служит как раз таки для фильтрации, прохождение модерации - это как вариант её использования. Лучше накопить на клоаку по типу адспект или хайдклик, чем ставить свою и тренировать бд ботов, безусловно какой то бот, asn/ua/другие параметры которого нет у владельцев клоаки пролезет, но лучше с ней чем без неё.
Правильно пишешь, служит для фильтарции ботов, на этапе модерации. Ты запускаешь рекламу и ставишь клоаку, что бы разделить модераторов/ботов условного гугла, от реальных пользователей. Тебе кроме клоаки еще необходимо закрывать сам блек от внешних ботов, проксирования. Что бы на сайт нельзя было попасть случайному человеку и или боту, даже по прямой ссылке.
 
Учитывайте, что я относительно не давно стал этим заниматься. Двигаюсь на бомж бюджете. По большей части мне нужно защитить как раз сам файл от ботов
 
Пожалуйста, обратите внимание, что пользователь заблокирован
На сколько сильно боты гугла и cf могут мне поднасрать, и как с ними бороться?
CF боты это чаще всего боты их сканнера Radar. Самостоятельно cf врятли сидит и сканит потенциальные фиши, вешая на них плашки (ну разве что на совсем паленые, где тупо залили скачанный ориг чейза/майка). Это аверы и ресёрчеры делают, автоматическая абуза -> автоматическая плашка кф о фише, затем детекты от всяких аверов (из-за того что это trusted паттерн). А находят аверы их чаще всего с сканнеров типа urlscan/urlquery/radar/virustotal/пр., так что да, по-хорошему их тоже надо фильтровать.
Это можно сделать и при помощи самого cf, если проанализировать и собрать все паттерны (все ASN, все юзерагенты, подсети, заголовки, поведение). И отводить их на ручную капчу или неверную конфигурацию (чтоб была ошибка). Чтоб получить детект от гугла - вроде не обязательно боту лезть на блек, достаточно будет позаходить с оф. версии хрома, чтоб паттерны чекнулись GSB.

Вот к примеру мини-лист useragent паттернов гугла:
Код:
[ 'adreview', 'archiver', 'bingpreview', 'bot', 'support.google.com', 'developers.google.com', 'googleother', 'feedfetcher', 'google-read-aloud', 'google-site-verification', 'apis-google', 'google-extended', 'google-safety', 'crawler', 'curl', 'inspect', 'externalhit', 'explorador', 'facebot', 'fetcher', 'guzzlehttp', 'php-client', 'http-client', 'go-resty', 'ips-agent', 'httpclient', 'headlesschrome', 'likedin', 'ltx71', 'netsystemsresearch', 'mailrushare', 'mail.ru', 'mediapartners', 'inspici', 'gsa/', 'paloaltonetworks', 'pinterest', 'proxy', 'python-requests', 'python-urllib', 'security-polaris', 'spider', 'scrapy', 'surveyagent', 'validator', 'wappalyzer', 'webdatastats', 'webtech/', 'quic-go', 'rocket/preload' ];

Найти все ASN определённой корпы по ключу можно здесь - https://bgp.he.net/search?search[search]=Google&commit=Search
 
А есть какое-то приемущество у апач, по сравнению с другим ПО для веб сервера ?
Это скорее, так, к слову
 
CF боты это чаще всего боты их сканнера Radar. Самостоятельно cf врятли сидит и сканит потенциальные фиши, вешая на них плашки (ну разве что на совсем паленые, где тупо залили скачанный ориг чейза/майка). Это аверы и ресёрчеры делают, автоматическая абуза -> автоматическая плашка кф о фише, затем детекты от всяких аверов (из-за того что это trusted паттерн). А находят аверы их чаще всего с сканнеров типа urlscan/urlquery/radar/virustotal/пр., так что да, по-хорошему их тоже надо фильтровать.
Это можно сделать и при помощи самого cf, если проанализировать и собрать все паттерны (все ASN, все юзерагенты, подсети, заголовки, поведение). И отводить их на ручную капчу или неверную конфигурацию (чтоб была ошибка). Чтоб получить детект от гугла - вроде не обязательно боту лезть на блек, достаточно будет позаходить с оф. версии хрома, чтоб паттерны чекнулись GSB.

Вот к примеру мини-лист useragent паттернов гугла:
Код:
[ 'adreview', 'archiver', 'bingpreview', 'bot', 'support.google.com', 'developers.google.com', 'googleother', 'feedfetcher', 'google-read-aloud', 'google-site-verification', 'apis-google', 'google-extended', 'google-safety', 'crawler', 'curl', 'inspect', 'externalhit', 'explorador', 'facebot', 'fetcher', 'guzzlehttp', 'php-client', 'http-client', 'go-resty', 'ips-agent', 'httpclient', 'headlesschrome', 'likedin', 'ltx71', 'netsystemsresearch', 'mailrushare', 'mail.ru', 'mediapartners', 'inspici', 'gsa/', 'paloaltonetworks', 'pinterest', 'proxy', 'python-requests', 'python-urllib', 'security-polaris', 'spider', 'scrapy', 'surveyagent', 'validator', 'wappalyzer', 'webdatastats', 'webtech/', 'quic-go', 'rocket/preload' ];

Найти все ASN определённой корпы по ключу можно здесь - https://bgp.he.net/search?search[search]=Google&commit=Search
Спасибо за ответ. Как с пар освобожусь, гляну, что да как
 
Пожалуйста, обратите внимание, что пользователь заблокирован
По большей части мне нужно защитить как раз сам файл от ботов
Сразу не заметил. Если файл (имеем ввиду малварь), то надо ещё и его клоачить, чтоб линк не улетел на какой-нибудь сканер или urlhaus.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Настраиваешь промежуточную защиту можно на Cloudflare Worker Node.js PHP смысл в том что любой кто приходит на твой сайт сначала проходит невидимый JS-челлендж

Вот пример того, как это реализовать на JS

Код:
async function generateSignature(data) {
  const encoder = new TextEncoder();
  const dataBuffer = encoder.encode(data);
  const secretBuffer = encoder.encode(SECRET);
  const combinedBuffer = new Uint8Array(dataBuffer.length + secretBuffer.length);


  combinedBuffer.set(dataBuffer);
  combinedBuffer.set(secretBuffer, dataBuffer.length);


  const hashBuffer = await crypto.subtle.digest("SHA-256", combinedBuffer);
  return Array.from(new Uint8Array(hashBuffer))
    .map(byte => byte.toString(16).padStart(2, "0"))
    .join("");
}


async function generateToken(ip) {
  const timestamp = Date.now();
  const data = `${ip}:${timestamp}`;
  const signature = await generateSignature(data);
  return btoa(`${data}:${signature}`);
}


async function validateToken(token, ip) {
  try {
    const decoded = atob(token);
    const [tokenIp, timestamp, signature] = decoded.split(":");
    if (tokenIp !== ip) return false;
    const data = `${tokenIp}:${timestamp}`;
    const expectedSignature = await generateSignature(data);
    return signature === expectedSignature;
  } catch {
    return false;
  }
}


export default {
  async fetch(request) {
    const url = new URL(request.url);
    const ip = request.headers.get("cf-connecting-ip") || "unknown";
    const userAgent = request.headers.get("User-Agent") || "";


    if (userAgent.includes("sosal")) {
      return fetch(request);
    }


    if (/\.(css|js|jpg|jpeg|png|gif|ico|svg|woff2?)$/i.test(url.pathname)) {
      return fetch(request);
    }


    const cookie = request.headers.get("cookie") || "";
    const token = cookie.match(/__ddgmark_=([^;]+)/)?.[1];
    const hasRedirectFlag = url.searchParams.has("_r");


    if (token && await validateToken(token, ip)) {
      if (hasRedirectFlag) {
        url.searchParams.delete("_r");
        return new Response(null, {
          status: 302,
          headers: {
            "Location": url.pathname + url.search,
            "Cache-Control": "no-store",
            "Mitigated": "DDoS-Guard"
          }
        });
      }
      return fetch(request);
    }


    if (hasRedirectFlag) {
      return new Response(
        "Whoops... Try change browser or enable JavaScript and disable all extensions privacy",
        { status: 404 }
      );
    }


    const expirationTime = new Date(Date.now() + 5 * 60 * 1000).toUTCString();
    url.searchParams.set("_r", "1");


    return new Response(null, {
      status: 307,
      headers: {
        "Location": url.pathname + url.search,
        "Set-Cookie": `__ddgmark_=${await generateToken(ip)}; Path=/; Secure; HttpOnly; SameSite=None; Expires=${expirationTime}`,
        "Cache-Control": "no-store",
        "Mitigated": "DDoS-Guard"
      }
    });
  }
};


Скрипт выдаёт каждому посетителю уникальный токен (куку) который можно получить только если у тебя реально работает JavaScript (то есть если ты не бот)


работает это потому что -
Боты не исполняют твой JavaScript не получают валидные токены — значит не увидят твой основной контент
IP тоже учитывается — кука не подойдёт если траф идёт с других адресов
 
Настраиваешь промежуточную защиту можно на Cloudflare Worker Node.js PHP смысл в том что любой кто приходит на твой сайт сначала проходит невидимый JS-челлендж

Вот пример того, как это реализовать на JS

Код:
async function generateSignature(data) {
  const encoder = new TextEncoder();
  const dataBuffer = encoder.encode(data);
  const secretBuffer = encoder.encode(SECRET);
  const combinedBuffer = new Uint8Array(dataBuffer.length + secretBuffer.length);


  combinedBuffer.set(dataBuffer);
  combinedBuffer.set(secretBuffer, dataBuffer.length);


  const hashBuffer = await crypto.subtle.digest("SHA-256", combinedBuffer);
  return Array.from(new Uint8Array(hashBuffer))
    .map(byte => byte.toString(16).padStart(2, "0"))
    .join("");
}


async function generateToken(ip) {
  const timestamp = Date.now();
  const data = `${ip}:${timestamp}`;
  const signature = await generateSignature(data);
  return btoa(`${data}:${signature}`);
}


async function validateToken(token, ip) {
  try {
    const decoded = atob(token);
    const [tokenIp, timestamp, signature] = decoded.split(":");
    if (tokenIp !== ip) return false;
    const data = `${tokenIp}:${timestamp}`;
    const expectedSignature = await generateSignature(data);
    return signature === expectedSignature;
  } catch {
    return false;
  }
}


export default {
  async fetch(request) {
    const url = new URL(request.url);
    const ip = request.headers.get("cf-connecting-ip") || "unknown";
    const userAgent = request.headers.get("User-Agent") || "";


    if (userAgent.includes("sosal")) {
      return fetch(request);
    }


    if (/\.(css|js|jpg|jpeg|png|gif|ico|svg|woff2?)$/i.test(url.pathname)) {
      return fetch(request);
    }


    const cookie = request.headers.get("cookie") || "";
    const token = cookie.match(/__ddgmark_=([^;]+)/)?.[1];
    const hasRedirectFlag = url.searchParams.has("_r");


    if (token && await validateToken(token, ip)) {
      if (hasRedirectFlag) {
        url.searchParams.delete("_r");
        return new Response(null, {
          status: 302,
          headers: {
            "Location": url.pathname + url.search,
            "Cache-Control": "no-store",
            "Mitigated": "DDoS-Guard"
          }
        });
      }
      return fetch(request);
    }


    if (hasRedirectFlag) {
      return new Response(
        "Whoops... Try change browser or enable JavaScript and disable all extensions privacy",
        { status: 404 }
      );
    }


    const expirationTime = new Date(Date.now() + 5 * 60 * 1000).toUTCString();
    url.searchParams.set("_r", "1");


    return new Response(null, {
      status: 307,
      headers: {
        "Location": url.pathname + url.search,
        "Set-Cookie": `__ddgmark_=${await generateToken(ip)}; Path=/; Secure; HttpOnly; SameSite=None; Expires=${expirationTime}`,
        "Cache-Control": "no-store",
        "Mitigated": "DDoS-Guard"
      }
    });
  }
};


Скрипт выдаёт каждому посетителю уникальный токен (куку) который можно получить только если у тебя реально работает JavaScript (то есть если ты не бот)


работает это потому что -
Боты не исполняют твой JavaScript не получают валидные токены — значит не увидят твой основной контент
IP тоже учитывается — кука не подойдёт если траф идёт с других адресов
Спасибо большое, на следующем проливе обязательно попробую
 
Н
Правильно пишешь, служит для фильтарции ботов, на этапе модерации. Ты запускаешь рекламу и ставишь клоаку, что бы разделить модераторов/ботов условного гугла, от реальных пользователей. Тебе кроме клоаки еще необходимо закрывать сам блек от внешних ботов, проксирования. Что бы на сайт нельзя было попасть случайному человеку и или боту, даже по прямой ссылке.
Ну так он и пишет, что отдельный поток клоаки может использоваться в качестве антибота. Это распространенная практика.
Такой поток ставится на настройки "всегда вайт". Все ненужные точки входа (например, переходы без нужных UTM-меток) заворачиваются апачем на него.
 
Настраиваешь промежуточную защиту можно на Cloudflare Worker Node.js PHP смысл в том что любой кто приходит на твой сайт сначала проходит невидимый JS-челлендж

Вот пример того, как это реализовать на JS

Код:
async function generateSignature(data) {
  const encoder = new TextEncoder();
  const dataBuffer = encoder.encode(data);
  const secretBuffer = encoder.encode(SECRET);
  const combinedBuffer = new Uint8Array(dataBuffer.length + secretBuffer.length);


  combinedBuffer.set(dataBuffer);
  combinedBuffer.set(secretBuffer, dataBuffer.length);


  const hashBuffer = await crypto.subtle.digest("SHA-256", combinedBuffer);
  return Array.from(new Uint8Array(hashBuffer))
    .map(byte => byte.toString(16).padStart(2, "0"))
    .join("");
}


async function generateToken(ip) {
  const timestamp = Date.now();
  const data = `${ip}:${timestamp}`;
  const signature = await generateSignature(data);
  return btoa(`${data}:${signature}`);
}


async function validateToken(token, ip) {
  try {
    const decoded = atob(token);
    const [tokenIp, timestamp, signature] = decoded.split(":");
    if (tokenIp !== ip) return false;
    const data = `${tokenIp}:${timestamp}`;
    const expectedSignature = await generateSignature(data);
    return signature === expectedSignature;
  } catch {
    return false;
  }
}


export default {
  async fetch(request) {
    const url = new URL(request.url);
    const ip = request.headers.get("cf-connecting-ip") || "unknown";
    const userAgent = request.headers.get("User-Agent") || "";


    if (userAgent.includes("sosal")) {
      return fetch(request);
    }


    if (/\.(css|js|jpg|jpeg|png|gif|ico|svg|woff2?)$/i.test(url.pathname)) {
      return fetch(request);
    }


    const cookie = request.headers.get("cookie") || "";
    const token = cookie.match(/__ddgmark_=([^;]+)/)?.[1];
    const hasRedirectFlag = url.searchParams.has("_r");


    if (token && await validateToken(token, ip)) {
      if (hasRedirectFlag) {
        url.searchParams.delete("_r");
        return new Response(null, {
          status: 302,
          headers: {
            "Location": url.pathname + url.search,
            "Cache-Control": "no-store",
            "Mitigated": "DDoS-Guard"
          }
        });
      }
      return fetch(request);
    }


    if (hasRedirectFlag) {
      return new Response(
        "Whoops... Try change browser or enable JavaScript and disable all extensions privacy",
        { status: 404 }
      );
    }


    const expirationTime = new Date(Date.now() + 5 * 60 * 1000).toUTCString();
    url.searchParams.set("_r", "1");


    return new Response(null, {
      status: 307,
      headers: {
        "Location": url.pathname + url.search,
        "Set-Cookie": `__ddgmark_=${await generateToken(ip)}; Path=/; Secure; HttpOnly; SameSite=None; Expires=${expirationTime}`,
        "Cache-Control": "no-store",
        "Mitigated": "DDoS-Guard"
      }
    });
  }
};


Скрипт выдаёт каждому посетителю уникальный токен (куку) который можно получить только если у тебя реально работает JavaScript (то есть если ты не бот)


работает это потому что -
Боты не исполняют твой JavaScript не получают валидные токены — значит не увидят твой основной контент
IP тоже учитывается — кука не подойдёт если траф идёт с других адресов
Это может защитить только от ботов и от модераторов гугла это же не спасет?

Это больше как дополнение к клоаке?
 
Это больше как дополнение к клоаке?
больше как дополнение, не полная защита
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх