Unerwünschte Aufrufe blockieren oder umleiten
Veröffentlichungsdatum: 10. Mai 2021
Änderungsdatum: 12. März 2026
weblication cms aufrufe zugriffe unerwünschte bots umleiten blockieren schablone zugriffsfilter
Das Weblication® Server-Monitoring gibt Ihnen Auskunft darüber, welche Aufrufe im Projekt stattfinden und bildet somit eine wichtige Grundlage, um z.B. unerwünschte Aufrufe zu blockieren oder umzuleiten.
Die BASE liefert Ihnen bereits im Standard eine Umsetzung, um unerwünschte Bots/Robots/Spider o.ä. zu blockieren.
Zusätzlich können Sie auch sehr individuell an globaler Stelle über die pre.php diverse Aufrufe blockieren oder umleiten, welche nicht erwünscht sind.
- Beispiel 1: Nur pageId1 bis pageId9 zulassen, sonst umleiten
- Beispiel 2: Bot blockieren, wenn falsche Parameter gesendet werden
- Beispiel 3: Aufrufe von "ExampleBot" blockieren
- Beispiel 4: Aufrufe bestimmter / alter Pfade blockieren oder umleiten
- Beispiel 5: Diverse Aufrufe nur für diverse Bots blockieren
- Beispiel 6: pageId-Parameter bei Bots nur einmal zulassen
- Beispiel 7: selectedXXX-Parameter bei Bots komplett löschen
- Beispiel 8: Bot-Aufrufe mit diversen URL-Parametern blockieren
- Allgemeine Hinweise
- Weiterführende Links
Beispiel 1: Nur pageId1 bis pageId9 zulassen, sonst umleiten
Beispiel: Auszug aus der pre.php
// nach Include der grid.php setzen
if(preg_match('/pageId\w\w+=/i', $_SERVER['QUERY_STRING'])){
wResponse::redirect($_SERVER['SCRIPT_NAME'], true);
}Beispiel 2: Bot blockieren, wenn falsche Parameter gesendet werden
Beispiel: Auszug aus der pre.php
// nach Include der grid.php setzen
if(wRequest::isProbablyBot()){
//Falls ein Bot falsche Parameter sendet
if(strpos($_SERVER['QUERY_STRING'], 'NaN') !== false || strpos($_SERVER['QUERY_STRING'], ';amp;') !== false || strpos($_SERVER['QUERY_STRING'], 'amp%3B') !== false || strpos($_SERVER['QUERY_STRING'], '&&') !== false){
header('HTTP/1.1 400 Bad Request');
exit;
}
}Beispiel 3: Aufrufe von "ExampleBot" blockieren
Beispiel: Auszug aus der pre.php
// nach Include der grid.php setzen
if(strpos($_SERVER['HTTP_USER_AGENT'], 'ExampleBot') !== false){
header('HTTP/1.1 400 Bad Request');
exit;
}Beispiel 4: Aufrufe bestimmter / alter Pfade blockieren oder umleiten
Beispiel: Auszug aus der pre.php
// nach Include der grid.php setzen
if(preg_match('/\/alter-pfad\//', $_SERVER['REQUEST_URI'])){
// wenn blockiert werden soll:
header('HTTP/1.1 403 Forbidden');
header('Status: 403 Forbidden');
exit;
// wenn z.B. auf Startseite umgeleitet werden soll:
// wResponse::redirect('/IHR-PROJEKT/index.php', true);exit;
}Beispiel 5: Diverse Aufrufe nur für diverse Bots blockieren
Beispiel: Auszug aus der pre.php
// nach Include der grid.php setzen
$queryUserAgents = preg_match('/bingbot|googlebot/i', $_SERVER['HTTP_USER_AGENT'])
&& (preg_match('/redirectresize/i', $_SERVER['QUERY_STRING'])
|| preg_match('/highlight/', $_SERVER['QUERY_STRING'])
|| preg_match('/firstletter/', $_SERVER['QUERY_STRING'])
|| preg_match('/pageid\w\w+=/', $_SERVER['QUERY_STRING'])
|| preg_match('/firstletter=.*firstletter=/i', $_SERVER['QUERY_STRING'])
|| preg_match('/\?\&+/', $_SERVER['REQUEST_URI'])
|| preg_match('/\&(\w+)=.*\&\1=/', '&'.$_SERVER['QUERY_STRING'], $matches))
;
if($queryUserAgents){
// wenn blockiert werden soll:
header('HTTP/1.1 403 Forbidden');
header('Status: 403 Forbidden');
exit;
// wenn z.B. auf Startseite umgeleitet werden soll:
// wResponse::redirect('/IHR-PROJEKT/index.php', true);exit;
}Aufrufe werden mit einem Statuscode 403 quittiert, wenn:
- der User-Agent bingbot oder googlebot enthält
und- redirectresize im Querystring enthalten ist
(Groß-/Kleinschreibweise wird nicht beachtet) - hightlight im Querystring enthalten ist
(Groß-/Kleinschreibweise wird beachtet) - firstletter im Querystring enthalten ist
(Groß-/Kleinschreibweise wird beachtet) - pageidXXX im Querystring enthalten ist
(XXX steht für alphanummerische Zeichen, Groß-/Kleinschreibweise wird beachtet)
In Projekten wird pageId mit großem I verwendet, womit es pageid nicht gibt. - firstletter zweimal im Querystring enthalten ist
(Groß-/Kleinschreibweise wird beachtet) - ?& in der aufgerufenen URL enthalten ist
(Groß-/Kleinschreibweise wird nicht beachtet) - wenn ein URL-Parameter mehrmals im Querystring enthalten ist
- redirectresize im Querystring enthalten ist
Beispiel 6: pageId-Parameter bei Bots nur einmal zulassen
Beispiel: Auszug aus der pre.php
// nach Include der grid.php setzen
// Lässt bei Bots nur die erste pageId durch
if(wRequest::isProbablyBot()){
$matches = array();
if(preg_match('/[\?\&]*(pageId[^&]+)/i', $_SERVER['QUERY_STRING'], $matches)){
$firstPageId = $matches[1];
$queryStringNew = $_SERVER['QUERY_STRING'];
$queryStringNew = preg_replace('/&pageId[^&]+/i', '', '&'.$queryStringNew);
$queryStringNew .= '&'.$firstPageId;
$queryStringNew = preg_replace('/&+/', '&', $queryStringNew);
$queryStringNew = preg_replace('/^&/', '', $queryStringNew);
$queryStringNew = preg_replace('/&$/', '', $queryStringNew);
$_SERVER['REQUEST_URI'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']).'?'.$queryStringNew;
if($queryStringNew != $_SERVER['QUERY_STRING']){
wResponse::redirect($_SERVER['REQUEST_URI']);
}
}
}Aufrufe werden bei erkannten Bots auf dieselbe URL mit nur dem ersten pageId-Parameter umgeleitet, wenn mehrere pageId-Parameter aufgerufen wurden.
Beispiel 7: selectedXXX-Parameter bei Bots komplett löschen
Beispiel: Auszug aus der pre.php
// nach Include der grid.php setzen
// Löscht bei Bots die selectedDay, selectedMonth, selectedYear Parameter
if(wRequest::isProbablyBot()){
$matches = array();
if(preg_match('/[\?\&](selected(day|month|year)=[^&]+)/i', $_SERVER['QUERY_STRING'], $matches)){
$queryStringNew = $_SERVER['QUERY_STRING'];
$queryStringNew = preg_replace('/&selected(day|month|year)[^&]+/i', '', '&'.$queryStringNew);
$queryStringNew = preg_replace('/&+/', '&', $queryStringNew);
$queryStringNew = preg_replace('/^&/', '', $queryStringNew);
$queryStringNew = preg_replace('/&$/', '', $queryStringNew);
$_SERVER['REQUEST_URI'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']);
if($queryStringNew != $_SERVER['QUERY_STRING']){
wResponse::redirect($_SERVER['REQUEST_URI']);
}
}
}Aufrufe werden bei erkannten Bots auf dieselbe URL ohne selectedXXX-Parameter umgeleitet.
Beispiel 8: Bot-Aufrufe mit diversen URL-Parametern blockieren
Beispiel: Auszug aus der pre.php
// nach Include der grid.php setzen
// Blookiert Bot-Aufrufe mit diversen URL-Paramtern
if(wRequest::isProbablyBot()){
// falls ein Blockieren nur bei bestimmten Pfaden greifen soll (z.B. Pfad enthält /meldungen/) folgende Zeile aktiv schalten und darauffolgende if-Abfrage auskommentieren:
//if(preg_match('/\/meldungen\//', wPageCur::getPath()) && preg_match('/(selectedYear|selectedMonth|categoriesJobLocation|categoriesJobFunction|categoriesJobLevel|ajaxId|typeFilter|hash|values|cont|lang|projectPath|pageid|moreId|wsessionid|variant)/i', $_SERVER['QUERY_STRING'])){
if(preg_match('/(selectedYear|selectedMonth|categoriesJobLocation|categoriesJobFunction|categoriesJobLevel|ajaxId|typeFilter|hash|values|cont|lang|projectPath|pageid|moreId|wsessionid|variant|highligt)/i', $_SERVER['QUERY_STRING'])){
header('HTTP/1.1 403 Forbidden');
header('Status: 403 Forbidden');
exit;
}
}Aufrufe werden bei erkannten Bots mit den abgefragten URL-Parametern blockiert.
Allgemeine Hinweise
Ab CMS-Version 20 steht Ihnen zudem ein Zugriffsfilter als Werkzeug zur Verfügung, , um unerwünschte Zugriffe mit unnötigen bzw. nicht benötigten Parameteraufrufen zu blockieren (siehe weiterführende Links unten).
- Welche Bedeutung hat das Server-Monitoring für das Blockieren oder Umleiten unerwünschter Aufrufe?
- Das Weblication® Server-Monitoring zeigt, welche Aufrufe im Projekt stattfinden. Dadurch erhalten Sie eine wichtige Grundlage, um z. B. unerwünschte Aufrufe zu blockieren oder umzuleiten.
- Welche Standard-Umsetzung bietet das System zum Blockieren unerwünschter Bots/Robots/Spider?
- Laut Seite liefert das System bereits im Standard eine Umsetzung, um unerwünschte Bots/Robots/Spider o. ä. zu blockieren.
- Kann man zusätzliche, individuelle Blockierungen oder Umleitungen global umsetzen?
- Ja. Zusätzlich können Sie an globaler Stelle über die im Projekt diverse Aufrufe blockieren oder umleiten, die nicht erwünscht sind.
- Wie kann man bei Bots nur bestimmte pageId-Werte zulassen und den Rest umleiten?
- Beispiel 1: Über einen Abgleich der Query-Parameter kann geprüft werden, ob pageId im erlaubten Bereich (z. B. nur pageId1 bis pageId9) vorkommt. Wenn nicht, wird umgeleitet (z. B. per redirect zur Startseite). In der pre.php wird dafür u. a. geprüft, ob pageId-Parameter im Querystring vorkommen.
- Wie blockiert man Bots, wenn diese bestimmte „falsche“ oder verdächtige Parameter senden?
- Beispiel 2: Wenn wRequest::isProbablyBot() true ist, kann im Querystring auf verdächtige Inhalte geprüft werden (z. B. 'NaN', ';amp;', 'amp%3B' oder '&&'). Trifft dies zu, wird der Request mit HTTP 400 Bad Request quittiert (header('HTTP/1.1 400 Bad Request'); exit;).
- Wie kann man Aufrufe eines bestimmten Bots (z. B. „ExampleBot“) blockieren?
- Beispiel 3: Prüfen Sie den HTTP_USER_AGENT auf einen bestimmten Wert (z. B. 'ExampleBot'). Wenn der User-Agent den Bot enthält, geben Sie HTTP 400 Bad Request zurück und beenden den Request (header('HTTP/1.1 400 Bad Request'); exit;).
- Wie blockiert oder leitet man Aufrufe bestimmter (alter) Pfade um?
- Beispiel 4: In der pre.php kann geprüft werden, ob der REQUEST_URI einen bestimmten Pfad enthält (z. B. '/alter-pfad/'). Je nach gewünschtem Verhalten werden entweder 403 Forbidden gesendet und der Request beendet oder alternativ auf eine andere URL umgeleitet (z. B. Startseite).
- Wie kann man „dossieren“ und bestimmte Aufrufe nur für bestimmte Bots blockieren?
- Beispiel 5: Es wird überprüft, ob der User-Agent zu bingbot/googlebot gehört und ob bestimmte Querystring-/Request-URI-Muster passen (z. B. redirectresize, highlight, firstletter, pageid…, doppelte Parameter). Trifft die Logik zu, wird mit HTTP 403 Forbidden geblockt (header('HTTP/1.1 403 Forbidden'); exit;).
- Wann wird auf der Seite typischerweise mit HTTP 403 Forbidden geblockt?
- Laut Seite u. a. dann, wenn: (1) der User-Agent bingbot oder googlebot enthält und redirectresize im Querystring vorkommt (Groß-/Kleinschreibung bei dieser Prüfung nicht beachtet), (2) highlight im Querystring vorkommt (Groß-/Kleinschreibung beachtet), (3) firstletter im Querystring vorkommt (Groß-/Kleinschreibung beachtet), (4) pageidXXX im Querystring vorkommt (XXX alphanumerisch, Groß-/Kleinschreibung beachtet; außerdem Hinweis: Projekte verwenden pageId mit großem I, daher gibt es pageid nicht), (5) firstletter zweimal im Querystring vorkommt (Groß-/Kleinschreibung beachtet), (6) '?&' in der aufgerufenen URL enthalten ist (Groß-/Kleinschreibung nicht beachtet), oder (7) wenn ein URL-Parameter mehrfach im Querystring enthalten ist.
- Wie lässt sich bei Bots der pageId-Parameter auf genau einen Wert begrenzen (Umleitung)?
- Beispiel 6: Wenn wRequest::isProbablyBot() true ist und mehrere pageId-Parameter erkannt werden, wird die URL so umgebaut, dass nur der erste pageId-Parameter erhalten bleibt. Anschließend wird auf dieselbe URL umgeleitet (wResponse::redirect(...)), wenn die neue Querystring von der ursprünglichen abweicht.
- Wie kann man bei Bots bestimmte selectedXXX-Parameter komplett entfernen und umleiten?
- Beispiel 7: Bei erkannten Bots werden die Parameter selectedDay, selectedMonth und selectedYear (selected(day|month|year)=...) aus dem Querystring gelöscht. Danach wird auf dieselbe URL ohne diese Parameter umgeleitet (wResponse::redirect(...)), wenn sich die Querystring geändert hat.
- Wie blockiert man Bot-Aufrufe mit bestimmten (unerwünschten) URL-Parametern?
- Beispiel 8: Bei wRequest::isProbablyBot() wird die Query auf eine Liste unerwünschter Parameter geprüft (z. B. selectedYear, selectedMonth, categoriesJobLocation, categoriesJobFunction, categoriesJobLevel, ajaxId, typeFilter, hash, values, cont, lang, projectPath, pageid, moreId, wsessionid, variant; außerdem in der Vorlage 'highligt'). Wenn ein Treffer vorliegt, wird mit HTTP 403 Forbidden geblockt und der Request beendet (header('HTTP/1.1 403 Forbidden'); exit;). Zusätzlich kann optional eingeschränkt werden, dass die Logik nur für bestimmte Pfade gilt (z. B. '/meldungen/').
- Gibt es ab einer bestimmten CMS-Version einen zusätzlichen Zugriffsfilter zum Blockieren unerwünschter Parameteraufrufe?
- Ja. Ab CMS-Version 20 steht ein Zugriffsfilter als Werkzeug zur Verfügung, um unerwünschte Zugriffe zu blockieren—insbesondere auch solche mit unnötigen bzw. nicht benötigten Parameteraufrufen.