Fake-Shops
Während der Betrug in Handelplattformen zumeist auf einige wenige Artikel beschränkt ist, wird hier ein ganzer Shop mit nicht existenten Artikeln, die niemals geliefert werden, erstellt.
Wer nun denkt, dass es ein beträchtlicher Aufwand sei einen kompletten Shop mit tausenden Artikel zu füllen, den muss ich an dieser Stelle leider enttäuschen.
Viele Shops bieten eine API an, mit der Partner oder Wiederverkäufer ganze Warengruppen oder sogar den ganzen Warenbestand auslesen können. Außerdem gibt es viele Preisvergleichsportale, die von den Shops Daten in Form einer einfachen CSV-Datei oder XML-Datei zur Verfügung gestellt bekommen.
Daher haben wir ein einfaches Script in der Programmiersprache Python erstellt, das nach genau solchen Dateien sucht.
#!/usr/bin/python3
import requests
pages="""fotoXXXXXX.at
YYYYYY.at
ZZZZ-online.at""".split("\n")
files="""preise.txt
preise.csv
liste.txt
liste.csv
preisliste.txt
preisliste.csv
XX.txt
XX.csv
XXXXXXXX.txt
XXXXXXXX.csv
XXXXXXXXpreise.txt
XXXXXXXXpreise.csv
XXXXXXXXliste.txt
XXXXXXXXliste.csv
preiseXXXXXXXX.txt
preiseXXXXXXXX.csv
preise_XXXXXXXX.txt
preise_XXXXXXXX.csv
listeXXXXXXXX.txt
listeXXXXXXXX.csv
liste_XXXXXXXX.txt
liste_XXXXXXXX.csv
YYYYYY.xml
merchant.xml
shopping.xml
YYYYYY_shopping.xml
YYYYYY_merchant.xml""".split("\n")
for page in pages:
print("TESTING " + url)
for file in files:
link = "https://" + page + "/" + file
r = requests.get(link)
if r.status_code == 200:
print(link + "... WORKING!")
Zuerst wird ein so genanntes Modul (requests
) mittels import
geladen. Dieses Modul stellt die Funktionalität zum Laden von Daten über das Internet zur Verfügung.
Mit pages = """...""".split("\n")
erstellen wir eine Liste der zu prüfenden Seiten. Hierbei steht zwischen den """
die Liste der Webseiten (eine pro Zeile).
Genau so erstellen wir die files
-Liste, die die gesuchten Dateinamen enthält.
Mit dem for
-Schleifen durchlaufen wir zuerst jede Domain und dann für jede Domain alle Dateinamen.
Mit link = "https://" + page + "/" + file
wird https://
, die Domain und der Dateiname zu einer URL zusammengefügt. Diese URL wird danach mit r = requests.get(link)
abgerufen und sollte der status_code
der Zahl 200
(alles OK) entsprechen wird eine Erfolgsmeldung ausgegeben:
TESTING fotoXXXXXX.at
https://fotoXXXXXX.at/XXXXXXXX.csv... WORKING!
https://fotoXXXXXX.at/preiseXXXXXXXXcsv... WORKING!
https://fotoXXXXXX.at/preise_XXXXXXXX.csv... WORKING!
TESTING YYYYYY.at
TESTING ZZ-Z.at
Natürlich haben wir die Domainnamen geändert. Außerdem haben wir die Liste von ca. 300 Webshops auf drei reduziert, um hier weniger Platz für die Abbildung zu benötigen.
Die Entwicklung des Scriptes und das heraussuchen der Domainnamen aus der Preisvergleichs-Seite hat nicht mal zwei Stunden gedauert. Wer möchte kann aber selbst das Heraussuchen der Webseiten aus dem Preisvergleichsportal automatisieren.
Ein einfacherer Ansatz, der nicht einmal 2 Minuten dauern würde nennt sich Google-Hacking - hierbei werden spezielle Suchausdrücke genutzt um die Suchergebnisse besser zu filtern. Wenn Sie online nach "Google Dorks" oder "Google Hacking" suchen werden Sie einige sehr gute und ausführliche Anleitungen finden.
Wir haben an dieser Stelle diesen Suchbegriff verwendet:
(ext:csv OR ext:txt) intext:coolpix
Die Klammerung hat an dieser Stelle die gleiche Bedeutung wie in der Mathematik. Frei übersetzt bedeutet dieser Suchausdruck: "Alle Dateien mit der Dateierweiterung csv
oder txt
, die im Inhalt den Begriff coolpix
enthalten".
Dies setzt natürlich voraus, dass die gesuchte Datei auch im Google-Index aufgenommen wurde. Das Python-Script kann auch Dateien finden, die nicht in den Google-Suchergebnissen gelistet sind.
Bei näherer Betrachtung der gefundenen Datei merken wir, dass wir für über 6.800 Artikel folgende Daten haben:
Artikelid | Hersteller | Artikelbez |
Preis | Gewicht | Versandkosten-AT |
Versandkosten-DE | Verfügbarkeit | Deeplink |
Vorkasse-AT | Vorkasse-DE | Nachname-AT |
Nachname-DE | Kreditkarte-AT | Kreditkarte-DE |
Bankomat-AT | Bankomat-DE | Abholung |
Damit haben wir schon einiges, aber wichtige Angaben wie Kategorie, Bild und Beschreibung fehlen natürlich noch. Diesbezüglich ist die Spalte Deeplink für uns besonders interessant... Hier finden wir den direkten Link zum Artikel im Webshop des Betreibers. Getreu dem Motto "Frechheit siegt" und nachdem wir uns schon an der Artikelliste bedient haben, können wir auch gleich die Texte, Kategorien und Bilder von der Homepage des Shop-Betreibers "ausleihen".
Dazu rufen wir eine der Artikel-Seiten auf und analysiere den HTML-Code:
<div id="path_container" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="aut_de_html-1-start.php" itemprop="url"><span itemprop="title">Start</span></a> »
<a href="aut_de_html-4-online_shop.php" itemprop="url"><span itemprop="title">Online Shop</ span></a> »
<a href="aut_de_html-4-online_shop. php?view=cat&cat=leica-systeme-188" itemprop="url"><span itemprop="title">Leica Systeme</ span></a> »
<a href="aut_de_html-4-online_shop. php?view=cat&cat=leica-s-989" itemprop="url"><span itemprop="title">Leica S</span></a> »
<a href="aut_de_html-4-online_shop. php?view=cat&cat=s-objektive-994" itemprop="url"><span itemprop="title">S-Objektive</ span></a> »
<a href="aut_de_html-4-online_shop. php?view=cat&cat=s-objektive-994&product=leicaobjektiv-elmarit-s-1-2-8-30mm-asph-11073--1736" class="active" itemprop="url"><span itemprop="title">Leica Objektiv Elmarit-S 1:2,8 / 30mm ASPH (11073)</span></a>
</div>
In einem <div>
-Element (was das genau ist, ist für den Augenblick irrelevant) mit der ID path_container
finden wir die benötigten Kategorien. Wir haben Ihnen die wichtigen Inhalte fett markiert. Alles was wir hier quasi machen müssen ist den HTML-Code zu entfernen und die Texte an den »
-Zeichen zu trennen.
<section class="detail_contenthead_left_container">
<a id="detail_desc_pic_container" href="module/helper/img_gallery/pix/7013.jpg" rel="shadowbox[product_ pic_gallery_1736]" target="_blank"><img src="module/helper/img_gallery/pix/7012.jpg" alt="" itemprop="image"></ a>
</section>
Das nächste Puzzle-Element finden wir in einem <section>
-Element im <img>
-Tag als src
-Eigenschaft. Dies ist der relative Pfad zur Bild-Datei, ausgehend von der Homepage. Diesen müssen wir lediglich extrahieren, um die Homepage-URL ergänzen und dann die Datei herunterladen.
<div class="detail_description" itemprop="description">
Das S-Objektiv eröffnet ... bla bla bla.
</div>
Die Beschreibung wartet in einem <div>
-Element mit der Klasse detail_description
darauf, extrahiert zu werden.
Da dies händisch sehr viel Arbeit wäre, lassen wir hier ebenfalls ein Script die Arbeit erledigen:
import requests
from bs4 import BeautifulSoup
url="https://www.fotoXXXXXX.at/aut_de_html-4-online_shop.php?view=cat&cat=s-objektive-994&product=leica-objektiv-elmarit-s-1-2-8-30mm-asph-11073--1736"
r = requests.get(url)
r.encoding = r.apparent_encoding
if...