Hallo zusammen,
ein Kollege hat ein Problem: Die Suchfunktion seines Shops wird mit mehreren Tausend Suchanfragen nach EAN-Codes täglich geflutet, und zwar von vielen verschiedenen IP's. Das geht so weit, dass es die Datenbank umhaut.
Was könnte dahinterstecken - ist das irgend etwas wie ein Repricer? Und am wichtigsten: Was kann man dagegen tun?
Ist das ein Repricer?
Re: Ist das ein Repricer?
Zumindest scheint jemand zu versuchen automatisch die jeweiligen Produktseiten aufzurufen und davon Daten auszulesen. Das es dabei primär um die Preise gehen könnte liegt nahe, wenn der Shop sonst keine wichtigen Dinge wie besonders gute Produkttexte oder ähnliches bietet.
Kommen die IP-Adressen aus einem IP-Block, also z.B. 156.12.122.X? Wenn ja, und der Block nicht auch normale Kundenanfragen beinhaltet, den gesamten Block sperren.
Wenn die Anfragezahl pro IP deutlich über dem zu erwartenden Niveau eines normalen Kunden liegt ein entsprechendes Limit setzen. Wie man das machen kann hängt stark von den eingesetzten Systemen ab.
Wenn die Anfragezahl pro IP nicht signifikant über der von normalen Kunden liegt, kann man sich die Anfragen etwas genauer ansehen. Wie sehen die Daten im HTTP-Header aus, was wird z.B. als Browser-ID mitgeschickt. Möglicherweise kann man danach filtern und aussperren.
Unabhängig davon sollte man sich mal die Performance der Suche anschauen. Eine einfache Anfrage mittels EAN sollte eigentlich eine der unaufwendigsten Abfragen sein und für normale Datenbanken auf aktueller Hardware kein Leistungsproblem darstellen. Wenn die Auslieferung der Seiten der Flaschenhals ist, sollte man über Cachesysteme nachdenken oder diese deutlich optimieren, wenn bereits vorhanden.
Kommen die IP-Adressen aus einem IP-Block, also z.B. 156.12.122.X? Wenn ja, und der Block nicht auch normale Kundenanfragen beinhaltet, den gesamten Block sperren.
Wenn die Anfragezahl pro IP deutlich über dem zu erwartenden Niveau eines normalen Kunden liegt ein entsprechendes Limit setzen. Wie man das machen kann hängt stark von den eingesetzten Systemen ab.
Wenn die Anfragezahl pro IP nicht signifikant über der von normalen Kunden liegt, kann man sich die Anfragen etwas genauer ansehen. Wie sehen die Daten im HTTP-Header aus, was wird z.B. als Browser-ID mitgeschickt. Möglicherweise kann man danach filtern und aussperren.
Unabhängig davon sollte man sich mal die Performance der Suche anschauen. Eine einfache Anfrage mittels EAN sollte eigentlich eine der unaufwendigsten Abfragen sein und für normale Datenbanken auf aktueller Hardware kein Leistungsproblem darstellen. Wenn die Auslieferung der Seiten der Flaschenhals ist, sollte man über Cachesysteme nachdenken oder diese deutlich optimieren, wenn bereits vorhanden.
Re: Ist das ein Repricer?
erst mal in den Server-Logs nachsehen, ob sich der "Besucher" zB als bot zu erkennen gibt.
// IP blocked
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == '999.999.999.99') die('shop offline');
...
in der index.php einbauenWoody-HH hat geschrieben:...
Und am wichtigsten: Was kann man dagegen tun?
// IP blocked
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == '999.999.999.99') die('shop offline');
...
Re: Ist das ein Repricer?
Woher weißt du, das es eine index.php gibt?patchwork.de hat geschrieben:in der index.php einbauen
Das könnte etwas aufwendiger werden:patchwork.de hat geschrieben:if ($ip == '999.999.999.99') die('shop offline');
Woody-HH hat geschrieben:von vielen verschiedenen IP's
Re: Ist das ein Repricer?
[/quote]robertt hat geschrieben:Woher weißt du, das es eine index.php gibt?patchwork.de hat geschrieben:in der index.php einbauen
ist bei allen mir bekannten Shopsystemen Standard. Falls evtl. ein "fertiger" Shop von einem Provider verwendet wird, wirst du wohl mit dem Hoster Kontakt aufnehmen müssen.
man kann auch ganze Bereiche blocken, muß aber vorsichtig sein dass dabei nicht zuviel geblockt wirdDas könnte etwas aufwendiger werden:patchwork.de hat geschrieben:if ($ip == '999.999.999.99') die('shop offline');Woody-HH hat geschrieben:von vielen verschiedenen IP's
if (strpos($ip, '999.999.999.') die('shop offline');
-
- Beiträge: 1980
- Registriert: 22. Jun 2014 00:55
Re: Ist das ein Repricer?
Achtung Halbwissen!patchwork.de hat geschrieben:erst mal in den Server-Logs nachsehen, ob sich der "Besucher" zB als bot zu erkennen gibt.
in der index.php einbauenWoody-HH hat geschrieben:...
Und am wichtigsten: Was kann man dagegen tun?
// IP blocked
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == '999.999.999.99') die('shop offline');
...
Was, wenn der Besucher gar nicht über die index.php in den Shop kommt? Bietet sich da nicht eher ein Eintrag in der .htaccess an? Wenn aus den log-files ersichtlich ist, dass es sich um immer wiederkehrende IPs handelt, wäre das vielleicht schon mal ein Schritt in die richtige Richtung.
Halbwissen Ende.
_________________
Denken ist wie googeln, nur viel spannender!
Denken ist wie googeln, nur viel spannender!
Re: Ist das ein Repricer?
Ich würde
1) auch einmal die Namensauflösung testen und schauen wer dahinter steckt bzw. mal schauen zu wem die IPs gehören, z. B. https://www.whois.com/whois/
2) Bei root Zugriff entsprechende System Tools nutzen um die gewünschten Anfragen auszusperren, unter Linux vorzugsweise iptables oder ggf. fail2ban. Falls das nicht möglich, über die .htaccess. Nur falls das auch nicht möglich ist, würde ich die Blockierung über die Scriptspache (vermutlich php) wählen.
3) Präventivmaßnahmen ergreifen. Z. B. fail2ban entsprechend einsetzen.
1) auch einmal die Namensauflösung testen und schauen wer dahinter steckt bzw. mal schauen zu wem die IPs gehören, z. B. https://www.whois.com/whois/
2) Bei root Zugriff entsprechende System Tools nutzen um die gewünschten Anfragen auszusperren, unter Linux vorzugsweise iptables oder ggf. fail2ban. Falls das nicht möglich, über die .htaccess. Nur falls das auch nicht möglich ist, würde ich die Blockierung über die Scriptspache (vermutlich php) wählen.
3) Präventivmaßnahmen ergreifen. Z. B. fail2ban entsprechend einsetzen.
Re: Ist das ein Repricer?
Schauen wir mal bei einem der aktuell populärsten Shop-Systeme - shopware:patchwork.de hat geschrieben:ist bei allen mir bekannten Shopsystemen Standard.
Das Ändern in den Stammdateien eines Shopsystems ist für gewöhnlich eine schlechte Lösung, da spätestens bei einem Update des Systems die Änderungen still und leise entsorgt werden oder deswegen das Update des Systems scheitert und man erst auf Ursachensuche gehen muss.patchwork.de hat geschrieben:man kann auch ganze Bereiche blocken, muß aber vorsichtig sein dass dabei nicht zuviel geblockt wird
Außerdem kenne ich einige Hoster, bei denen der Zugriff auf $_SERVER['REMOTE_ADDR'] dir eine IP aus deren Infrastrukturbereich liefert und nicht unbedingt die des Zugreifenden. Damit würde deine Lösung auch nicht greifen.
Re: Ist das ein Repricer?
viele Wege führen nach Rom
nur können sich umfangreiche Abfragen in der .htaccess auf die Performance auswirken - in php dagegen nicht messbar.
nur können sich umfangreiche Abfragen in der .htaccess auf die Performance auswirken - in php dagegen nicht messbar.
-
- Beiträge: 99
- Registriert: 11. Jul 2016 14:01
Re: Ist das ein Repricer?
Der mir bekannte resourcenärmste Weg ist das Kernelrouting:
route add -net 192.168.34.0 netmask 255.255.255.0 reject
Natürlich NetzIP und NetzMaske anpassen.
Setzen wir u.a. bei ungeliebten Bots ein, die sich nicht an die robots.txt halten.
Nachteil:
Muss nach einem Reboot neu eingetragen werden.
Es müssen Root-Rechte auf dem Server genutzt werden.
LG Heinz
route add -net 192.168.34.0 netmask 255.255.255.0 reject
Natürlich NetzIP und NetzMaske anpassen.
Setzen wir u.a. bei ungeliebten Bots ein, die sich nicht an die robots.txt halten.
Nachteil:
Muss nach einem Reboot neu eingetragen werden.
Es müssen Root-Rechte auf dem Server genutzt werden.
LG Heinz
Re: Ist das ein Repricer?
Dabei kann dir Cron behilflich sein. Mittels "crontab -e" folgendes eintragen:heinzfriedrich hat geschrieben:Nachteil:
Muss nach einem Reboot neu eingetragen werden.
Code: Alles auswählen
@reboot route add -net 192.168.34.0 netmask 255.255.255.0 reject
Ansonsten würde ich jetzt erstmal auf Rückmeldung des Thread-Erstellers warten, bevor wir noch die einzelnen Kernel-Optionen durchgehen
Re: Ist das ein Repricer?
Hier der derzeitige Stand der Erkenntnisse:
Die Abfragen kommen über eine entsprechende URL
und nicht über das im Shop befindliche Suchformular.
Wir werden jetzt in das Formular mal einen zusätzlichen Parameter einbauen (als "hidden") und die Suchfunktion so ändern, dass sie nur bei Angabe dieser Parameter läuft. Den Parameter werden wir variabel gestalten (Datum, Mondphase, irgendwas), so dürfte er nicht ganz so einfach nachzubauen sein.
Damit dürfte vorerst Ruhe sein.
Danke für die Tipps!
Die Abfragen kommen über eine entsprechende URL
Code: Alles auswählen
http://...search?page=search&page_action=...
Wir werden jetzt in das Formular mal einen zusätzlichen Parameter einbauen (als "hidden") und die Suchfunktion so ändern, dass sie nur bei Angabe dieser Parameter läuft. Den Parameter werden wir variabel gestalten (Datum, Mondphase, irgendwas), so dürfte er nicht ganz so einfach nachzubauen sein.
Damit dürfte vorerst Ruhe sein.
Danke für die Tipps!
-
- Information
-
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 16 Gäste