Zum Inhalt springen

IP des Servers, der Formular abschickt - PHP


Empfohlene Beiträge

Also... Ich denke mal das du es so ungefähr meinst.

Du hast Server A, welcher das Formular an den Client ausliefert. Im action-Attribut des Formulars ist nun Server B angegeben.

In diesem Fall dürfte es für dich nahezu unmöglich sein, die Addresse des ursprünglichen Servers (A) herauszufinden. Dies ergibt sich einfach daraus, das die Daten direkt vom Client zum Server B geschickt werden, da es im action-Attribut ja so angegeben ist.

Gegebenenfalls könntest du mal versuchen ob in einem solchen Fall der Referrer gesetzt wird, aber darauf verlassen kann man sich bei den heutigen Browsern auf keinen Fall.

Eine andere Lösung wäre, das Server A in seinem Formular die Quelle per hidden-Tag angibt, aber so wie alle Userdaten ist auch das natürlich manipulierbar.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

auf den Hidden-Tag bin ich natürlich auch schon gekommen... aber ein Schutz ist das eigentlich nicht....

Inspiration war eigentlich das "sagenumwogene" Script aus Matt's Scriptarchive -> Formmail.cgi/pl.

Das Perlscript bietet die Möglichkeit IP bzw. Domains anzugeben, die autorisiert sind, das Script zu verwenden:

Ein kleiner Auszug:

Hier die Einträge der Clients, die verarbeiten dürfen (auf IP und/oder Domainnamen Basis)

# @referers allows forms to be located only on servers which are defined #

# in this field. This security fix from the last version which allowed #

# anyone on any server to use your FormMail script on their web site. #

@referers = ('scriptarchive.com','209.196.21.3');

Hier die erste Verarbeitung

sub check_url {

# Localize the check_referer flag which determines if user is valid. #

local($check_referer) = 0;

# If a referring URL was specified, for each valid referer, make sure #

# that a valid referring URL was passed to FormMail. #

if ($ENV{'HTTP_REFERER'}) {

foreach $referer (@referers) {

if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) {

$check_referer = 1;

last;

}

}

}

else {

$check_referer = 1;

}

# If the HTTP_REFERER was invalid, send back an error. #

if ($check_referer != 1) { &error('bad_referer') }

}

Sie gehen hier also auf den Referer!?! Bin nicht besonders Perl-fest...

Wie kann ich diese Information in PHP bekommen?

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

http://www.php.net/manual/en/reserved.variables.php#reserved.variables.server

Nutze lieber $_SERVER['HTTP_REFERER']. Die andere Variante ist veraltet, und funktioniert nur mit register_globals = on, was theoretisch eine Sicherheitslücke sein kann.

Das Perl-Script geht tatsächlich über den Referer, allerdings wie gesagt, lässt sich das leicht manipulieren. Es überliegt nunmal dem Browser ob und mit welchem Eintrag er diesen Header sendet. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für Deine Hinweise:

Ich stimme Dir selbstverständlich vollkommen zu... der Referer ist nicht besonders sicher (aber immerhin besser, als das "hidden"- Tag in HTML;-) ).

Habe jedoch folgenden Fall bei zwei Freunden gesehen, was auch letztendlich Anlass war, die Scripte umzustricken:

- PHP Script verarbeitet Formular und versendet Email

- beide Scripte wurden gesperrt vom Provider

- beide Provider verweisen auf "formmail"!

Beim nächsten Sperren kann ich dann auf die Pseudo-"Validierung" hinweisen...

Nochmal Danke für Deine Hilfe!

Link zu diesem Kommentar
Auf anderen Seiten teilen

...der Referer ist nicht besonders sicher (aber immerhin besser, als das "hidden"- Tag in HTML;-) ).

Finde ich überhaupt nicht! Den Referer ändern (faken) ober abschalten kann eigentlich jeder, da es dafür entweder eine einfache Einstellung im Browser gibt oder es viele entsprechende Programme gibt (bzw. auch das selbstprogrammieren kein Problem ist, wenn man programmieren kann). Das ändern eines Hidden-Fields ist natürlich auch möglich, aber setz doch mehr Kenntnisse und Willen, das zu tun, vorraus.

EDIT:

Zu deinem "Problem": Die Skripte wurden wohl gesperrt, weil sie von irgendjemand zum spammen ausgenutzt wurden (kann mir nicht erklären, dass ein Provider einfach so Skripte checkt und evtl. sperrt) und dies auch leicht zuliesen. Wenn ein Spammer dein Skript mit Referer-Check findet, wird ihn das auch nicht davon abhalten, deinen "Trick" ebenso auszutricksen.

IMHO

Du solltest also nicht den Referer o.ä. prüfen, der kann ja ersten leicht gefakt werden und ist 2. ja sogar korrekt, wenn der User eine andere Lücke in deinem Skript nutzt um es zu mißbrauchen. Beschränke dein Skript lieber auf eine feste Adresse oder Domain (fix im Quelltext oder eine Configdatei, nicht über PArameter), an die es Mails nur senden kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

... ich stimme doch vollkommen zu! Der "Referer" ist kein besonders guter Schutz. (steht das nicht im letzten Thread?)

ABER: Das Referenzprodukt (zumindest des Providers der oben genanntes Script gelöscht hat) verweist auf das Formmail aus Matt's Scriptarchive. Und dieses Script arbeitet auf Basis des Referers (siehe Quellcodeauszug oben).

Du sprichst desweiteren eine Validierung durch z.B. die IP an. Wie willst Du denn "sicher" die IP überprüfen. In dem verarbeitenden Script schreibst Du die IPs rein die zulässig sind... bis hierhin verstehe ich Deine Argumentation... aber woher soll das Script die Information nehmen, wer der Absender ist?

Hättest Du denn ein Stichwort zu diesem Thema, wo Du die Lösung siehst?

Ich beschreibe nocheinmal kurz meine Umgebung:

auf ww w.meine homepage.de liegt

senden.html

mit einem formular das 3 Variablen an verarbeitung.php übergibt.

Der 1. Schritt soll sein zu überprüfen, wo die Anfrage herkommt (Referer) um diesen Wert mit einem festeingetragenen Wert in der verarbeitung.php zu vergleichen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

EDIT:

Zu deinem "Problem": Die Skripte wurden wohl gesperrt, weil sie von irgendjemand zum spammen ausgenutzt wurden (kann mir nicht erklären, dass ein Provider einfach so Skripte checkt und evtl. sperrt) und dies auch leicht zuliesen. Wenn ein Spammer dein Skript mit Referer-Check findet, wird ihn das auch nicht davon abhalten, deinen "Trick" ebenso auszutricksen.

IMHO

-> Das kann ich nur bestätigen. Ich denke nicht, das der Provider Sie überprüft hat... der Traffic war auffällig!

Die Scripte wurden tatsächlich gelöscht!

Link zu diesem Kommentar
Auf anderen Seiten teilen

.. aber woher soll das Script die Information nehmen, wer der Absender ist?

Hättest Du denn ein Stichwort zu diesem Thema, wo Du die Lösung siehst?

Es ist mir völlig egal, wer der Absender ist. Aber das Skript von mir wäre für einen Spammer völlig uninteressant, weil ich das Skript nur an eine fixe Adresse (oder eine fixe Domain) senden lasse. Der Absender wird ja auch mithilfe deines Skriptes gefüllt, also kannst du den zum einen überprüfen, oder auch mit einem fixen Wert füllen.

Alles was der Spammer mit so einem Skript machen kann ist, deine Mailbox (bzw. die zugelassene im Skript) überfluten. Aber auch das kannst du mit z.B. einen Hashwert als Hiddenfeld abfangen. Der Hashwert wird erzeugt beim generieren des Formulars und wenn die Daten vom Formular an den Server zurückkommen geprüft. Jeder aufruf des Formulars darf genau 1 Mail verschicken. (Hashwert irgendwo speichern und vor dem Mailsenden prüfen und dann inaktiv setzen oder löschen). Außerdem wird ja die Adresse des Users mitgesendet (zwangsweise, er will ja eine Antwort haben ;) ) Und damit könntest du eine Reload-Sperre realisieren, wenn z.B. mehr als 3 Mail sin einem kurzen Zeitraum versandt werden sollen.

Also Möglichkeiten sehe ich genug, ganz ohne Refererprüfung o.ä.

EDIT:

... ich stimme doch vollkommen zu! Der "Referer" ist kein besonders guter Schutz. (steht das nicht im letzten Thread?)

Ich meinte damit auch nur deine Aussage, dass der Referer immerhin besser als das Hiddenfeld ist.

EDIT2:

Außerdem ist der "Thread" alle "Posts" (oder Beiträge, um es mal einzudeutschen) hier. Also thread = alles, Posts = einzelne Beiträge.

Link zu diesem Kommentar
Auf anderen Seiten teilen

... dennoch möchte ich noch folgendes anmerken.

Es ist mir ein leichtes eine Schleife zu bauen in der ein Formular immer wieder neu geladen wird und mit den passenden Variablen übergeben wird. Der Trick mit dem Hashwert würde dann nicht funktionieren, da der Hashwert immer wieder (auch valide) mit übergeben wird.

Auch die Überprüfung der Antwortemailadresse ist selbstverständlich eine Möglichkeit. Ich gebe Dir vollkommen recht, das der Absender eine Antwort haben will. Aber der Kunde Otto Müller ist mir ziemlich egal... er kann mir in seiner Dusseligkeit auch 40 Mails schreiben, wenn er jedesmal etwas vergessen hat. Aber Spammer haben selten die gleiche (Absende-) Adresse.

Die 100 % Lösung gibt es meiner Ansicht hier auch nicht... wenn man mich zumüllen möchte, dann passiert das auch!

Trotzdem möchte ich mich ganz herzlich für die Hinweise bedanken... ein Paar Komponenten werde ich wohl verknüpfen (gerade das mit den Hashwerten gefällt mir) um es so schwer wie möglich zu gestalten.:)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist mir ein leichtes eine Schleife zu bauen in der ein Formular immer wieder neu geladen wird und mit den passenden Variablen übergeben wird. Der Trick mit dem Hashwert würde dann nicht funktionieren, da der Hashwert immer wieder (auch valide) mit übergeben wird.

siehe dazu meine Worte zur "Reload-Sperre" im Beitrag oben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

... um jetzt wieder alles gerade zu biegen:

Ich denke, das wir grundsätzlich vom gleichen sprechen :-), aber vielleicht kann ich Dir nicht komplett folgen.

Meine Zusammenfassung:

- Selbstverständlich geht die Auswertung ausschliesslich an eine Emailadresse. Wie Du schon sagst -> sonst sollte man z.B. GMX nehmen

- Jedes "Hiddenfeld" ist im Quellcode sichtbar. (Thema: Hashwert) Alles was sichtbar ist, kann auch umgangen werden... stimmst Du mir da zu? Oder habe ich einen Hänger?

- Ich verstehe das ich die Emailadresse z.B. in einer DB ablegen kann, um zu überprüfen, ob und "wie oft" jemand in einem kurzen Zeitraum geschrieben hat... hier sehe ich keine Problematik. Bzw. hier möchte ich keine Abstriche machen. Wenn mich jemand x mal an einem Tag kontaktieren möchte, dann soll er das.

- Sicher kann ich statt des Referers, der mir als URL übergeben wird, auch die IP kontrollieren. Aber wer sagt mir, das das die richtige ist? Wie würde denn die Abfrage des verarbeitenden Formulars aussehen, wenn die IP abgefragt wird?

Habe ich eine Kernaussage von Dir nicht verstanden?

-> ich bleibe dabei: bei den oben genanannten Ansätzen gibt es immer, wie auch beim Referer, eine Möglichkeit vorbeizukommen... oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die IP des Servers auf dem das Skript läuft brauche ich nicht. Ein Ansatz wäre beim Formular die IP mitabzufragen und mit-zu-übergeben...

Um das ganze zu beenden:

Deine Hinweise, JesterDay, waren super. Einige Sachen werde ich zumindest erstmal zu Papier bringen und ggf. wegprogrammieren.

Danke an alle

Chris

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...