Я лью блек. Щас хочу выйти на новую ступень, и я активно над этим работаю. У меня возник вопрос. На сколько сильно боты гугла и cf могут мне поднасрать, и как с ними бороться? Могу добавить, сайты я всегда ставлю на апач.
Спасибо. Если с редиректом всё понятно. То с клоакой и проксями мне ещё стоит разобраться. Попробую поискать треды, где про это подробнее расписаноХороший вопрос, используй редирект, клоаку или прокси
Всегда пожалуйста, посоветую почитать про клоаку, это даже интересно)Спасибо. Если с редиректом всё понятно. То с клоакой и проксями мне ещё стоит разобраться. Попробую поискать треды, где про это подробнее расписано
Не знаю о каких проксях он говорит. Клоака не решение. Клоака служит для прохождения модерации. А не фильтрации поисковых ботов (ии боты хрома, майкрософта), которые шарят по сайту, вешают кт и сливают стабы файлов. Пиши в ЛС список вопросов - подсказываю бесплатноСпасибо. Если с редиректом всё понятно. То с клоакой и проксями мне ещё стоит разобраться. Попробую поискать треды, где про это подробнее расписано
о реверс проксях. Клоака решение, она служит как раз таки для фильтрации, прохождение модерации - это как вариант её использования. Лучше накопить на клоаку по типу адспект или хайдклик, чем ставить свою и тренировать бд ботов, безусловно какой то бот, asn/ua/другие параметры которого нет у владельцев клоаки пролезет, но лучше с ней чем без неё.Не знаю о каких проксях он говорит. Клоака не решение. Клоака служит для прохождения модерации. А не фильтрации поисковых ботов (ии боты хрома, майкрософта), которые шарят по сайту, вешают кт и сливают стабы файлов. Пиши в ЛС список вопросов - подсказываю бесплатно
Клоакинг – лишь один из инструментов, но да, он не панацея. Если мы говорим о продвинутых ботах , то тут нужен комплексный подход разными методами.Не знаю о каких проксях он говорит. Клоака не решение. Клоака служит для прохождения модерации. А не фильтрации поисковых ботов (ии боты хрома, майкрософта), которые шарят по сайту, вешают кт и сливают стабы файлов. Пиши в ЛС список вопросов - подсказываю бесплатно
Правильно пишешь, служит для фильтарции ботов, на этапе модерации. Ты запускаешь рекламу и ставишь клоаку, что бы разделить модераторов/ботов условного гугла, от реальных пользователей. Тебе кроме клоаки еще необходимо закрывать сам блек от внешних ботов, проксирования. Что бы на сайт нельзя было попасть случайному человеку и или боту, даже по прямой ссылке.о реверс проксях. Клоака решение, она служит как раз таки для фильтрации, прохождение модерации - это как вариант её использования. Лучше накопить на клоаку по типу адспект или хайдклик, чем ставить свою и тренировать бд ботов, безусловно какой то бот, asn/ua/другие параметры которого нет у владельцев клоаки пролезет, но лучше с ней чем без неё.
CF боты это чаще всего боты их сканнера Radar. Самостоятельно cf врятли сидит и сканит потенциальные фиши, вешая на них плашки (ну разве что на совсем паленые, где тупо залили скачанный ориг чейза/майка). Это аверы и ресёрчеры делают, автоматическая абуза -> автоматическая плашка кф о фише, затем детекты от всяких аверов (из-за того что это trusted паттерн). А находят аверы их чаще всего с сканнеров типа urlscan/urlquery/radar/virustotal/пр., так что да, по-хорошему их тоже надо фильтровать.На сколько сильно боты гугла и cf могут мне поднасрать, и как с ними бороться?
[ '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' ];
А есть какое-то приемущество у апач, по сравнению с другим ПО для веб сервера ?Могу добавить, сайты я всегда ставлю на апач.
Это скорее, так, к словуА есть какое-то приемущество у апач, по сравнению с другим ПО для веб сервера ?
Спасибо за ответ. Как с пар освобожусь, гляну, что да как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.По большей части мне нужно защитить как раз сам файл от ботов
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"
}
});
}
};
Спасибо большое, на следующем проливе обязательно попробуюНастраиваешь промежуточную защиту можно на 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 тоже учитывается — кука не подойдёт если траф идёт с других адресов
больше как дополнение, не полная защитаЭто больше как дополнение к клоаке?