Veröffentlichungsdatum: 10. Mai 2021
Änderungsdatum: 20. Dezember 2024
weblication cms aufrufe zugriffe unerwünschte bots umleiten blockieren schablone
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.
// nach Include der grid.php setzen
if(preg_match('/pageId\w\w+=/i', $_SERVER['QUERY_STRING'])){
wResponse::redirect($_SERVER['SCRIPT_NAME'], true);
}
// 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'], '&&') !== false){
header('HTTP/1.1 400 Bad Request');
exit;
}
}
// nach Include der grid.php setzen
if(strpos($_SERVER['HTTP_USER_AGENT'], 'ExampleBot') !== false){
header('HTTP/1.1 400 Bad Request');
exit;
}
// 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;
}
// 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:
// 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.
// 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.
// 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.