Zum Inhalt springen

[PHP] tipps zur sicherheit bei externem include


Empfohlene Beiträge

hi und hallo,

ich sehe gerade erstaunt und entsetzt in unserer datenbank einträge die von irgendwelchen werbe und xxx-seiten stammen.

die sache ist aber die, dass eigentlich niemand einträge in diese db machen kann.

hintergrund:

- es handelt sich um eine sehr einfach strukturierte statistik anwenwendung, um pagehits aufzuzeichnen.

- die anwendung selbst liegt auf einem server bei uns.

- auf kundenseiten wird beim aufruf einer seite immer unsere anwendung EXTERN includiert und zwar so:

include("http://www.unseredomain.de/inc/statistik.inc?kundenID=".$kundenID."&pageID=".$pageID."&pageName=".$pageName.....etc....

damit ich dann in der statistik.inc über $_GET auf die variablen zugreifen kann

tja, und nun entdecke ich heute in der datenbank einträge von xxx anbietern und so weiter.

offensichtlich hängen die sich dazwischen und manipulieren die variable pageName und tragen ihre schmuddelseiten ein.

mir ist im moment sehr klar, dass die anwendung offen wie einscheunentor ist.

die fragen, die ich mir aber stelle sind

1. wie kommt den jemand da drauf genau auf diesen seiten einen versteckten datenstrom zu analysieren und sich da reinzuhängen?

ich meine das includieren bekommt doch niemand so einfach von aussen mit?

2. was wären denn schutzmassnamen, dass jemand da erst gar nicht rankommt?

3. könnte ich die ganze sache eventuell auch noch anders lösen? das externe include habe ich gemacht damit ich wirklich immer nur eine einzige datei brauche um die statistik von allen domains der welt aus anzusteuern...

klar ist mir, dass ich meine anwendung besser absichern kann z.b. durch verschlüsselte kundeIDs, aber mir gehts noch mehr um das "interne" wie oben beschrieben....

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm

noch ein versuch:

- kundenseite liegt auf http://kunde.de/index.php

- dort wird vom benutzer eine seite http://kunde.de/index.php?page=100&kundenID=xxx&anotherInfo=test aufgerufen

- die index.php sieht dann so aus:

### php code zum anzeigen der seite 100

### externes include("http://unseredomain.de/statistik.inc.php?pageID=100&kundenID=xxx

die datei http://unseredomain.de/statistik.inc.php sieht dann so aus:

### $pageID = $_GET['pageID'] = 100

### $kundenID = $_GET['kundenID'] = xxx

### $info = $_GET['anotherInfo'] = test

### schreibe statistik, füge ein kudenID = $kundenID, pageID = $pageID, info = $info

naja, und da kann sich ja jeder easy reinhängen indem er offensichtlich irgendwie den datenstrom analysiert und mitkriegt, dass die seite http://unseredomain.de/statistik.inc.php?pageID=100&kundenID=xxx aufgerufen wird.

anber wie kriegt man das denn raus? das steht doch nur im php code...??

und wie kann ich das ganze eventuell besser/sicher lösen

Link zu diesem Kommentar
Auf anderen Seiten teilen

nein! die get variablen sieht man nicht wegen des includes!!!

also noch einmal, das hier ein auszug aus dem php code:


<html>

<head>

	<title><?= $title ?></title>

</head>

<body>

<div>

text der kundenseite

</div>

<?

$pageID = 100;

$kundenID = xxx;

$pageName = "test";

include("http://www.unseredomain.de/verwaltung/statistik.php?clientIP=".$_SERVER['REMOTE_ADDR']."&kundenID =".$kundenID ."&pageName =".$pageName");

?>

</body>

</html>

wer sieht denn da die $_GET variablen??? keiner. weil einfach nur eine externe (statistik schreibe seite) includiert wird.

versteht jemand mein problem??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe es ja soweit kapiert, aber wieso muss die Kundenseite eigentlich mit eurer Seite direkt in Kontakt treten? Könnte das nicht auch genausogut auf Kundenseite ablaufen? :rolleyes: Dann wäre zumindest schonmal diese eine Gefahr durch Verfälschungen der Daten ausgeschlossen.

Nicht ohne Grund verbieten einige Webhoster das include() oder require() von externen Webseiten. Alleine schon aus dem Grund, dass sich die Datei ja auch ohne fremdes zutun verändern und so schädlicher Code eingefügt werden könnte ist davon abzuraten. (Das trifft jetzt zwar bei dir nicht zu mit der Veränderung der includierten Seite, aber so könnte ja theoretisch jede Seite von eurem Webserver von extern eingebunden und missbraucht werden.)

Link zu diesem Kommentar
Auf anderen Seiten teilen

du hast völlig recht. ich dachte mir aber, dass es einen erheblichen aufwand bedarf das dann alles unter kontrolle zu halten wenn updates der anwendung vorliegen.

das würde dann nämlich bedeuten, dass ich über ftp auf jeder unserer kundendomains immer wieder bei updates alle dateien erneuern müsste.

nehmen wir mal an wir hätten 1000 kunden (hihi), dann wäre ich sicherlich mehrere tage damit beschäftigt updates (und sei es auch nur eine zeile in einer php datei der statistik anwendung) aufzuspielen.

so habe ich eine einzige datei die für alle kunden zentral liegt.

das ist der hintergrund warum ich überhaupt auf diese externe include sache gestossen bin.

ich wäre auch glücklich wenn jemand einen besseren vorschlag als diese (offenbar sehr unsichere) methode hätte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das includen der DAtei über den Webserver liefert nicht die php-Datei, sondern nur genau das, was du mit dem Browser siehst. Die anfrage geht ja an den Webserver, der liest die Datei aus dem Filesystem, merkt, dass es eine PHP-Datei ist und die durch den Interpreter muss, jagt sie dadurch und liefert das Ergebnis aus.

Verbieten kannst du das auch nicht auf deinem Server, oder einzig und allein dadurch, dass du die Datei aus dem Webpfad nimmst.

Das Problem mit allow_url_fopen (also z.B. include von einem fremden Server) ist, dass du die Dateien u.U. nicht selber unter Kontrolle hast, und damit u.U. schädlichen Code auf deinem Server zur Ausführung bringst, oder aber, wenn das ganze in einem Shared-Host Environment geschieht, wo eben viele, die du u.U. gar nicht kennst, den Server nutzen und so u.U. irgendwelchen fremden (schädlichen) Code zur Ausführung bringen können.

Zu deinem Problem:

Wenn du diese fremden Server in der Statistik hast, schau doch einfach mal die Seite an, die euer Skript aufgerufen hat. Natürlich siehst du den Aufruf u.U. nicht direkt, aber dein aufruf der Seite müsste ja in der Statistik gespeichert werden. Wenn dem so ist, informier dich mal über den Betreiber und schreib den an und frag, wie er dazu kommt, euer Skript einzubinden, was das soll.

Alternativ, oder zusätzlich zu dem Nachforschen oben, änderst du dein Skript so, dass es die Kunden-IP prüft. Die wird ja mit übergeben, und ein Kundenserver hat wohl genau eine IP. Die sollte bei euch hinterlegt werden und wird vor dem loggen geprüft.

Dennoch würde ich mich an der "Fremdaufrufer" wenden, da er ja durch sein vorgehen Traffic bei euch verursacht und da könntest du IMHO schon von ihm verlangen, dass er das einstellt. Gerade xxx-Seiten werden ja in der Regel oft aufgerufen und jeder Aufruf führt ja dann den Include aus. Da könntest du u.U. sogar gerichtl vorgehen zur Not, auch wegen evtl. Schadenersatz, IMHO.

EDIT:

Das ist also keine Sicherheitslücke auf deiner Seite o.ä.! Wenn du eine fremde URL includen kannst, kannst du das mit jeder im Web verfügbaren Datei tun. Offen ist da gar nichts, ausser du hast unsichere Daten im Netz. Die könnten dann aber auch von jedem Browser aufgerufen werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

sauber! also ich war vorhin ehrlich gesagt etwas in panik und onnte nicht wirklich rational denken. ich dachte nun wirklich dass und da jemand gehackt hat bzw. dass da jedem auf der welt tür und tor geöffnet ist.

nun nach einiger zeit der beruhigung und jesterDays zusatzlicher beruhigung ist mir klar, dass das ganze doch so funktionieren kann und vor allem sicher ist wenn (!) ich noch einige abfragen vor dem speichrn (eben z.b. die oben genannte kundennummer und zusätzlich auch die existenz der seitenID bei genau diesem kunden überprüfe).

vielen dank an alle

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also das mit der IP-Adresse halte ich schonmal für eine sinnvolle Idee. Leider liegen auf einem Server jedoch oft mehrere Domains auf der selben IP-Adresse.

Wie siehts denn mit https aus? Wäre das nicht eine Möglichkeit? So könnten nur Clients die Datei vom Server anfordern, die ein entsprechendes Zertifikat dafür aufweisen bzw. denen der Server vertraut.

[...]EDIT:

Das ist also keine Sicherheitslücke auf deiner Seite o.ä.! Wenn du eine fremde URL includen kannst, kannst du das mit jeder im Web verfügbaren Datei tun. Offen ist da gar nichts, ausser du hast unsichere Daten im Netz. Die könnten dann aber auch von jedem Browser aufgerufen werden.

Doch - ist es. Man kann Seiten includen von denen man nicht genau weiss, was sie machen. Wenn das keine Sicherheitslücke ist, dann weiss ich nicht...

Oder meintest du das andersherum? Also wenn die eigene Seite von wem includet werden kann?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Doch - ist es. Man kann Seiten includen von denen man nicht genau weiss, was sie machen. Wenn das keine Sicherheitslücke ist, dann weiss ich nicht...

Oder meintest du das andersherum? Also wenn die eigene Seite von wem includet werden kann?

Es geht darum, dass seine Seite von irgendwelchen Server includet wird, und er war der Meinung, dass das eine Sicherheitslücke ist. Ist es aber nicht und es ist auch nicht, zumindest nicht wirklich praktikabel für eine Seite ohne sehr geheime Inhalte, verhinderbar.

Dass es eine Lücke sein kann, wenn man fremde Skripte auf dem eigenen Server ausführt hatte ich ja geschrieben!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...