מתחרים סורקים את הקטלוג: הם אוספים מחירים, תיאורים, מאפיינים, משתמשים בהם לניטור או מעתיקים לאתר שלהם. בשבוע שעבר פנתה אלינו חנות חלקי חילוף לרכב עם 15,000 מוצרים — מתחרים העתיקו את כל בסיס הנתונים בין לילה. הגנה מלאה היא בלתי אפשרית — אם אדם יכול לראות את הנתונים, גם תוכנה יכולה. המשימה שלנו היא להפוך את הסריקה ללא משתלמת כלכלית. במשך יותר מ-10 שנות עבודה עם Bitrix, פיתחנו אסטרטגיית הגנה מדורגת שמנתקת עד 95% מהסורקים הלא-ממוקדים. הסורק הפשוט ביותר — wget או curl רגיל — נחסם על ידי סינון User-Agent בשלב init.php. סורקים מתקדמים יותר משתמשים ב-Playwright או Puppeteer — ניתוח התנהגותי ואתגר JavaScript פועלים נגדם. השילוב של שיטות הוא זה שמניב תוצאות.
למה הגבלת קצב לבדה לא מספיקה?
הגבלת קצב היא הגנה בסיסית, אבל קל לעקוף אותה באמצעות פרוקסי או בקשות מבוזרות. סורקים חכמים משתמשים במאגר כתובות IP ומרווחים בין בקשות. ניתוח התנהגותי מוסיף הקשר: אם מגיעות 100 בקשות קטלוג מכתובת IP אחת תוך 5 דקות — זה בוט. שילוב שכבות מעלה את עלות העקיפה פי 10–20. לפי הנתונים שלנו, יישום ניתוח התנהגותי מפחית את עומס השרת ב-30% בזכות חסימה מוקדמת של בוטים. יעילות מובטחת: המהנדסים המוסמכים שלנו סיפקו יותר מ-200 פרויקטים להגנת תוכן ב-Bitrix.
איך להגן על מחירים מסורקים עם JavaScript?
מחירים לא מוצגים ב-HTML אלא נטענים דרך AJAX לאחר רינדור הדף. סורקי HTML פשוטים מקבלים את הדף ללא מחירים:
// В шаблоне карточки товара вместо цены:
<span class="product-price js-price-loader" data-product-id="<?= $arResult['ID'] ?>">
<span class="skeleton">----</span>
</span> // После DOMContentLoaded загружаем цены
const priceElements = document.querySelectorAll('.js-price-loader');
if (priceElements.length) {
const ids = [...priceElements].map(el => el.dataset.productId);
fetch('/local/ajax/prices.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify({ ids }),
})
.then(r => r.json())
.then(data => {
priceElements.forEach(el => {
const price = data.prices[el.dataset.productId];
if (price) el.innerHTML = price.formatted;
});
});
}דפדפנים ללא ראש (Playwright, Puppeteer) מתגברים על זה אבל דורשים משאבים משמעותית יותר — עלות העקיפה עולה. בפרויקט אחד, לאחר יישום טעינת JS, מספר איסופי המחירים המוצלחים ירד ב-80%. שכבה זו יעילה פי 5 מבחינה כלכלית מאשר CAPTCHA בלבד.
איך עובד ניתוח התנהגותי?
משתמשים אמיתיים לא מבקשים 200 דפי קטלוג תוך 5 דקות. מונה בקשות מבוסס IP ב-Redis:
namespace Local\Security;
class RateLimiter
{
private const WINDOW = 300; // 5 минут
private const LIMIT = 100; // запросов на каталог
private const BAN_TIME = 3600; // бан на час
public static function check(string $ip): bool
{
$redis = \Bitrix\Main\Data\Cache::createInstance(); // Упрощённо: используем кеш Битрикс
$key = 'ratelimit_catalog_' . md5($ip);
$count = (int)(\Bitrix\Main\Application::getInstance()
->getManagedCache()->get($key) ?? 0);
if ($count > self::LIMIT) {
// Логируем и блокируем
self::banIp($ip);
return false;
}
\Bitrix\Main\Application::getInstance()->getManagedCache()->set(
$key,
$count + 1,
self::WINDOW
);
return true;
}
private static function banIp(string $ip): void
{
// Добавляем в таблицу банов Битрикс (b_stop_list)
\CStopList::Add([
'SITE_ID' => SITE_ID,
'IP_ADDR' => $ip,
'ACTIVE' => 'Y',
'REASON' => 'Автоматический бан: подозрение на парсинг',
]);
}
}אם המונה מתקרב ל-70% מהמגבלה, אנחנו מציגים אתגר דרך Cloudflare Turnstile או CAPTCHA מובנה. ניתוח התנהגותי יעיל פי 20 מהגבלת קצב בלבד.
מה זה honeypot ואיך הוא חוסם בוטים?
קישורים נסתרים ב-HTML, בלתי נראים לבני אדם (// В шаблоне карточки товара вместо цены: <span class="product-price js-price-loader" data-product-id="<?= $arResult['ID'] ?>"> <span class="skeleton">----</span> </span> ), אבל ניתנים לאינדוקס על ידי סורקים:
<?php // /honeypot/trap-page/index.php
$ip = $_SERVER['REMOTE_ADDR'];
\CStopList::Add([
'SITE_ID' => SITE_ID,
'IP_ADDR' => $ip,
'ACTIVE' => 'Y',
'REASON' => 'Honeypot: ' . $_SERVER['REQUEST_URI'],
]);
header('HTTP/1.1 403 Forbidden');
קישורים נוצרים דינמית דרך JavaScript עם כתובות URL אקראיות שמשתנות כל 24 שעות. Honeypot זול יותר ליישום מאשר CAPTCHA, אבל יעיל נגד 30% מהבוטים.
איך להגן על תמונות דרך X-Accel-Redirect?
תמונות מוגשות דרך PHP עם בדיקות הרשאות, ו-nginx מבצע את הגשת הקבצים בפועל ביעילות:
location /protected-uploads/ {
internal; # недоступно напрямую снаружи
alias /var/www/upload/;
}
location /catalog/ {
limit_req zone=catalog burst=40 nodelay;
limit_req_status 429;
# ... остальные директивы
}PHP מגדיר את הכותרת // После DOMContentLoaded загружаем цены const priceElements = document.querySelectorAll('.js-price-loader'); if (priceElements.length) { const ids = [...priceElements].map(el => el.dataset.productId); fetch('/local/ajax/prices.php', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify({ ids }), }) .then(r => r.json()) .then(data => { priceElements.forEach(el => { const price = data.prices[el.dataset.productId]; if (price) el.innerHTML = price.formatted; }); }); } , ו-nginx מגיש את הקובץ ללא מעורבות של המפרש.
מה כלול בעבודה
לאחר היישום, אתה מקבל:
- קבצי תצורה עבור nginx ו-PHP עם הערות.
- קוד מקור לטעינת מחירים ב-JS ורכיבי honeypot.
- תיעוד לתפעול וניטור.
- גישה למאגר עם השינויים.
- הדרכה למנהל המערכת שלך: איך להוסיף מלכודות honeypot חדשות, לשנות מגבלות קצב.
- חודש תמיכה לאחר היישום — ייעוץ ושינויים במידת הצורך.
כל העבודה מסופקת במסגרת חוזה במחיר קבוע, עם לוח זמנים מובטח של 1-2 ימים לבדיקה ו-1-2 ימים ליישום. כתבו לנו להצעה אישית והערכה חינמית של הפרויקט שלכם.
איך ליישם הגנה: מדריך שלב אחר שלב
- בדיקת תעבורה ולוגים — 2–4 שעות. זיהוי נקודות תורפה והמלצות.
- הגדרת הגבלת קצב + סינון — 1–2 שעות. חסימת 60% מהסורקים הפשוטים.
- יישום טעינת מחירים ב-JS — 4–6 שעות. מחירים מוסתרים מסריקה ישירה.
- התקנת honeypot — 1–2 שעות. חסימת בוטים אוטומטית.
- ניתוח התנהגותי — 2–4 שעות. חסימה אדפטיבית של חריגות.
- בדיקות וניטור — 2–4 שעות. אישור יעילות ההגנה.
| שלב | משך | תוצאה |
|---|---|---|
| בדיקת תעבורה ולוגים | 2–4 שעות | דוח עם נקודות תורפה והמלצות |
| הגדרת הגבלת קצב + סינון | 1–2 שעות | חסימת 60% מהסורקים הפשוטים |
| יישום טעינת מחירים ב-JS | 4–6 שעות | מחירים מוסתרים מסריקה ישירה |
| התקנת honeypot | 1–2 שעות | חסימת בוטים אוטומטית |
| ניתוח התנהגותי | 2–4 שעות | חסימה אדפטיבית של חריגות |
| בדיקות וניטור | 2–4 שעות | אישור יעילות ההגנה |
השוואת שכבות הגנה
| רכיב | תיאור | מורכבות יישום | עלות עקיפה לסורק |
|---|---|---|---|
| הגבלת קצב + סינון UA | שכבה בסיסית, חוסמת 60% מהסורקים | נמוכה | מינימלית |
| ניתוח התנהגותי | חוסם דפוסים חשודים | בינונית | בינונית |
| טעינת מחירים ב-JS | מגן על המחירים | בינונית | גבוהה |
| Honeypot | מזהה וחוסם בוטים | נמוכה | נמוכה |
| CAPTCHA | מסבך דפדפנים ללא ראש | גבוהה | גבוהה מאוד |
הגנה מדורגת יקרה פי 10–20 עבור תוקף מאשר הגבלת קצב בשכבה אחת. אנו ממליצים לשלב את כל השכבות. למהנדסים שלנו יש יותר מ-10 שנות ניסיון והם השלימו מעל 200 פרויקטים להגנת תוכן עבור Bitrix. לאחר יישום הגנה מדורגת, מספר ניסיונות הסריקה יורד ב-80%, ועומס השרת קטן פי שלושה.
ניתוח התנהגותי משתמש בלמידת מכונה כדי לזהות חריגות. לדוגמה, אם בוט עוקף הגבלת קצב דרך פרוקסי, מודל המבוסס על זמן בין בקשות ורצף צפייה בדפים יכול לזהות דפוס לא-אנושי. יישום ניתוח כזה דורש הגדרה ואורך 2–4 ימים, אבל מעלה את יעילות ההגנה ל-99%.
הזמינו בדיקה חינמית של הגנת הקטלוג שלכם — המהנדס שלנו יזהה נקודות תורפה תוך יום אחד ויציע תוכנית יישום. קבלו ייעוץ על הגנה מדורגת: נעריך את הפרויקט שלכם ונבחר את השילוב האופטימלי של שכבות.
קריאה מומלצת: Web scraping בוויקיפדיה — סקירה של שיטות איסוף נתונים.

