PHP gegen direkten Aufruf schützen

Hallo,

ich schreibe gerade eine PHP von der aus eine EMail versendet wird. Dazu werden die Daten in einer HTML in ein Formular eingetragen. Die HTML ruft dann die PHP auf.

Mein Problem:
Die PHP kann auch direkt aufgerufen werden. Damit können von meinem Server Spams versendet werden.

Wie kann ich die PHP so sperren, daß sie nur von meiner HTML gestartet werden kann. Direkte Aufrufe über die URL sollen abgewiesen werden.

Danke im Voraus,
Isomer

hi
Einfach in deinem Formular eine hidden variable einbauen die mit einem zufallswert belegt ist

Diesen wert trägst du wenn du die HTML mit PHP auslieferst auch in die Session ein und wenn der selbe user das Formular abschickt vergleichst du.

Ruft er deine PHP direkt auf gibt es weder die Session variable noch die Form (POST) Variable und schon sagst du „Du kommst hier net rein“

Gruß Lamer

Hallo

Gibt es denn irgend einen Zugriffsschutz auf die HTML-Datei? Wenn nicht, dann bringt dich dieser Ansatz nicht weiter, weil jeder der Spam versenden will, dann den Umweg über die HTML-Datei gehen kann.

sigterm

Hallo,

ich schreibe gerade eine PHP von der aus eine EMail versendet
wird. Dazu werden die Daten in einer HTML in ein Formular
eingetragen. Die HTML ruft dann die PHP auf.

Nur mal zur begriff klärung , eine HTML datei ruft keine PHP datei auf, auch kann die Datei nicht senden .
Was du meisnt ist das du ein Formular in einer HTML Datei hast und diese als ziel der zu sendenen Daten die php datei hat.

Es soll ja leute geben die denken immernoch das eine HTML datei alleine irgentwas tuen kann.
HTML ob nunr aus einer HTML datei oder via PHP an den Browser ausgeliefert wird immer im Browser angezeigt und verhält sich auch ganz genauso.

Mein Problem:
Die PHP kann auch direkt aufgerufen werden. Damit können von
meinem Server Spams versendet werden.

Wie kann ich die PHP so sperren, daß sie nur von meiner HTML
gestartet werden kann. Direkte Aufrufe über die URL sollen
abgewiesen werden.

man könnte mit referern arbeiten, leider kann man das manipulieren.
desweiteren könnte man natürlich das formular wenns in einer html.datei steckt, selber in einen geschützten bereich stecken , das leider problem wenn es um ein kontakt formular geht.

Hat man einen Eingeloggten user ist es ganz einfach :smile:
Wie der kollege unten schon sagt, nimmt man dafür aber dann keine html.datei mit Formular sondern lässt das ein PHP machen.

Das PHP legt dann eine sogenannte session (speichert ein wert auf dem server unter einer nummer) , diese session id packt man in ein unsichtbares feld.

In dem Auswertenden PHP wird dann dieses unsichtbare feld ausgelesen und geprüft ob diese session nummer auf dem server existiert, ist dem nicht der fall, wird keine email versendet.

Um spam zu vermeiden hilft aber nur http://de.wikipedia.org/wiki/CAPTCHA zu benutzen.

Am besten ist natürlich ein Login vorher, das vereinfacht das ganze problem, dann brauch mann nur bei der registrierung ein gutes chaptcha :smile:

ReHi,
naja, die HTML muss offen liegen, damit sie aufgerufen werden kann.

Ich prüfe jetzt in der PHP die übergebenen Daten auf missbrauchsverdacht. Lieber wäre es mir aber ich könnte direkt die PHP schützen. Ich stelle mir das eigentlich so vor: Die PHP prüft ob sie von der HTML aus aufgerufen wird. Ist das nicht der Fall wird die Bearbeitung abgebrochen.

ReHi,

Einfach in deinem Formular eine hidden variable einbauen die
mit einem zufallswert belegt ist

Funktioniert auch nicht. Wenn jemand die PHP zu Spammen benutzen will kann er im HTML-Source die Variabele einsehen.

Ich brauche also eine Lösung, wie ich die PHP möglichst Serverseitig schützen kann. Wenn ich also aus der HTML eine Variabele übergeben will muss sie verborgen bleiben.

Ich habe schon überlegt, ob ich so eine Variabele über JavaScript erstellen kann. Wenn ich das Script in eine .js-Datei auslagere ist es ja erstmal in der HTML-Source nicht mehr sichtbar. Aber kann der Angreifer die .js-Datei aus seinem Cache auslesen ?

Nur mal zur begriff klärung , eine HTML datei ruft keine PHP
datei auf, auch kann die Datei nicht senden .
Was du meisnt ist das du ein Formular in einer HTML Datei hast
und diese als ziel der zu sendenen Daten die php datei hat.

Es soll ja leute geben die denken immernoch das eine HTML
datei alleine irgentwas tuen kann.
HTML ob nunr aus einer HTML datei oder via PHP an den Browser
ausgeliefert wird immer im Browser angezeigt und verhält sich
auch ganz genauso.

  1. Der Form-Tag ist Bestandteil der HTML-Spezifikation. Damit ist es selbstverständlich legitim zu sagen „Die HTML macht…“
  2. Wer, anstelle auf eine Frage zu antworten, der Meinung ist andere Belehren zu müssen sollte die Rechtschreibung beherrschen.
  3. Dein Antwortversuch bringt mich der Lösung meines Problemes nicht näher. Du solltest also davon Abstand nehmen zu antworten, wenn du nichts zu sagen hast. Das würde im Forum allen helfen.

Hi

Dann mußt du auch deine Frage präzise stellen

Die PHP kann auch direkt aufgerufen werden. Damit können von meinem Server Spams versendet werden.

Genau das verhindert mein Vorschlag, da immer erst die HTML Seite aufgerufen werden muß.

So jetzt also meine Gedanken zu deinem Nachsatz:

$_SERVER[‚REFERER‘] enthält die aufrufende Seite, zusammen mit dem hiddenfeld wäre das dann ein weiterer Schritt zum nicht direkt aufrufen.

Allerdings auch das kann man umgehen in dem man z.B. Curl benutzt und einfach sagt ich komme von. Dennoch muß zuvor die HTML seite geladen werden und Analysiert werden da der der Spamen will ja immer noch das hidden feld braucht.

Weiterhin kannst du die IP speichern einmal die IP die die HTML seite aufruft und einmal die die MailPHP aufruft … beides in eine Logdatei und beim Aufruf der MailPHP gucken, gibt es die IP im HTML IP LOG wenn ja, wie lang ist das her. Dann eine Zeitspanne festlegen wie lange wohl der schnellste User dazu braucht dein Formular auszufüllen.

Weiter wäre da noch Capcha das man einbauen kann und jeder der eine Mail verschicken will muß auch das noch mit ausfüllen.

Versionen gibt es da sicher noch einige mehr aber das sollten so die geläufigsten sein.

Zu überprüfen ob die Eingaben sinnvoll sind oder Spam … wirst du wohl nie wirklich schaffen außer du hast ein Wörterbuch mit 100%igen Spamwörtern die nirgends wo anders bernutzt werden. Aber damit beschneidest du auch die normalen Mail sender.

Hoffe das zumindest ein Lösungsansatz für dich ist oder eventuell eine Kombination aus den jeweiligen.

Gruß Lamer

Technisch gesehen gibt es zwischen dem Aufruf aus einer HTML-Datei heraus und dem direkten Aufruf keinen Unterschied. Das Script wird aufgerufen und bekommt dabei Daten übergeben. Ob die Daten gefährlich sind muss das Script selbst entscheiden. Z.B. sollte es keine beliebige Empfängeradresse akzeptieren. Schutz vor Massenmails bekommst du mit nem Captcha.

Oder anders ausgedrückt: ein Aufruf über die HTML-Datei birgt genau die gleichen Gefahren wie der direkte Aufruf. Es bringt also nichts zu untersuchen, ob der Aufruf von der HTML-Datei kommt.

sigterm

ReHi,

Einfach in deinem Formular eine hidden variable einbauen die
mit einem zufallswert belegt ist

Funktioniert auch nicht. Wenn jemand die PHP zu Spammen
benutzen will kann er im HTML-Source die Variabele einsehen.

hi isomer,

Ich brauche also eine Lösung, wie ich die PHP möglichst
Serverseitig schützen kann. Wenn ich also aus der HTML eine
Variabele übergeben will muss sie verborgen bleiben.

Ich habe schon überlegt, ob ich so eine Variabele über
JavaScript erstellen kann. Wenn ich das Script in eine
.js-Datei auslagere ist es ja erstmal in der HTML-Source nicht
mehr sichtbar. Aber kann der Angreifer die .js-Datei aus
seinem Cache auslesen ?

die idee mit dem script ist schon recht gut. den script verstecken auch.
die meisten spammer sind recht faul :smile:))
und wenn erstmal nichts „offentsichtlich“ im quelltext steht merken die nur, dass es nicht funktioniert, aber gucken nicht warum.
einfach als externe-datei laden reicht wohl nur bei den ganz faulen :smile:)
es gibt aber ein paar interessesante js-befehle, die den script-code schon um einiges schwieriger zu lesen machen.
wie zb. toString, escape, charCodeAt, eval
per js kannst du z.b. ganz einfach, dem hidden-feld ein anderes value geben. der spammer schickt das im quelltext liegende und wundert sich.
ist zwar alles zu knacken … logo … aber aus eigener erfahrung kann ich sagen, es hat gereicht, um mir spam-einträge im gästebuch abzuhalten.

ip-blocker sind nie verkehrt, aber in der letzten zeit sehe ich an meinen logs, dass sowieso höchstens 2 versuche kurz hintereinander erfolgen … hat sich rumgesprochen mit den blockern :smile:)

gruß
klaus

  1. Der Form-Tag ist Bestandteil der HTML-Spezifikation. Damit
    ist es selbstverständlich legitim zu sagen „Die HTML macht…“

Es war ein Versuch, das Problem auf diese Art und Weise zu erklären. Es gibt keinen Unterschied, ob das Script direkt aufgerufen wird oder von einem Formular. Es kommt genau dasselbe beim Server an bzw. ein Script kann leicht so tun.
HTML tut nichts, es stellt dir nur das Formular bereit, und der Browser bastelt daraus einen Request nach der CGI-Spezifikation.

  1. Wer, anstelle auf eine Frage zu antworten, der Meinung ist
    andere Belehren zu müssen sollte die Rechtschreibung
    beherrschen.

„belehren“ sollte hier kleingeschrieben werden.
Nach „müssen“ sollte ein Komma stehn.
Glashaus, Steine *g*

  1. Dein Antwortversuch bringt mich der Lösung meines Problemes
    nicht näher. Du solltest also davon Abstand nehmen zu
    antworten, wenn du nichts zu sagen hast.

Er hat dir gesagt, dass es keine Lösung gibt, wie du dir eine wünschst.
Ein Spammer-Script kann sich genauso wie ein Browser verhalten.
Die einzig brauchbare Lösung ist leider wie gesagt ein Captcha, was aber je nach Qualität eben auch automatisch gelöst werden kann.
Wenn dir jemand sagt, dass es keine triviale Lösung gibt, ist das auch eine Hilfe. Alle anderen wiegen dich in falscher Sicherheit. Wer spammen will, schafft das auch, du kannst es ihm höchstens ein klein wenig schwerer machen.

Ich finde es ziemlich unfreundlich, eine *hilfreiche* Antwort derart abzuweisen, nur weil dir die Antwort nicht gefällt. Du solltest also davon Abstand nehmen, deinen Helfern derart vor den Kopf zu stossen.

Nur mal zur begriff klärung , eine HTML datei ruft keine PHP
datei auf

kein problem aus einer html-datei heraus eine php-datei aufzurufen … ohne user-aktion … ohne formular

auch kann die Datei nicht senden .

  1. wo steht das html senden könnte?
  2. klar macht das der browser
  3. kannst auch sagen, ausführbarer programm-code kann nichts, nur wenn er in den arbeitsspeicher geladen wird.

Es soll ja leute geben die denken immernoch das eine HTML
datei alleine irgentwas tuen kann.
HTML ob nunr aus einer HTML datei oder via PHP an den Browser
ausgeliefert wird immer im Browser angezeigt und verhält sich
auch ganz genauso.

genau … und da gibt es sehr viele dinge, die der browser dann ausführen kann, von denen RR wahrscheinlich keine ahnung hat.

  1. Der Form-Tag ist Bestandteil der HTML-Spezifikation. Damit
    ist es selbstverständlich legitim zu sagen „Die HTML macht…“
  2. Wer, anstelle auf eine Frage zu antworten, der Meinung ist
    andere Belehren zu müssen sollte die Rechtschreibung
    beherrschen.
  3. Dein Antwortversuch bringt mich der Lösung meines Problemes
    nicht näher. Du solltest also davon Abstand nehmen zu
    antworten, wenn du nichts zu sagen hast. Das würde im Forum
    allen helfen.

stimme dir voll zu, dass der kommentar von RR sinnlos ist.

es soll ja immer noch leute geben, die meinen es gibt in einer html-datei/ausgabe nur html :smile:)

mir fällt zu deinem eigentlichen thema noch ein:
einen cookie setzen, den dann mittels js auslesen und dem formular mit auf den weg geben.

gruß
klaus

Bringt nix
Hallo Isomer,

es gibt keinen 100%igen Schutz davor, dass Deine Seite zum Spammen benutzt wird. Es ist nämlich mit wenigen Handgriffen auch für Anfänger möglich, mittels VBS einen Browser fernzusteuern, so dass es aussieht, als ob jemand vor dem Computer sitzt und die Mail abschickt.

Jetzt könnte man natürlich die IP nach einer zu großen Mailanzahl, die pro Zeiteinheit abgeschickt wird, sperren. Das ist schon besser, aber im Prinzip einfach zu umgehen, indem eine Liste von den tausenden Proxys da draußen abgearbeitet wird, über welche Deine Seite per VBS angesteuert wird. (Oder ein Botnetz, auch eine Möglichkeit.)

Und die Captchas sind mittlerweile kein unüberwindbares Problem mehr.

Eine Kombination dieser Sicherheitsvorkehrungen kann aber zumindest eine Erschwernis darstellen. (Wer wiederum genug Zeit und/oder Know-How und/oder die richtige Software hat, wird diese wahrscheinlich umgehen können.)

Schöne Grüße,

Mohamed.

hallo mohamed,

es gibt keinen 100%igen Schutz davor, dass Deine Seite zum
Spammen benutzt wird.

das stimmt … aber es reicht schon, wenn man nicht offen wie ein scheuentor die seite reinstellt.

durch einen js-script ist seit dem 01.02.2010 bei mir kein unerwünschter eintrag mehr vorgekommen … und das bei über 4000 versuchen eines direkt-aufrufes!!!

gruß
klaus

OT^4: PHP gegen direkten Aufruf schützen

Nur mal zur begriff klärung , eine HTML datei ruft keine PHP
datei auf

kein problem aus einer html-datei heraus eine php-datei
aufzurufen … ohne user-aktion … ohne formular

auch kann die Datei nicht senden .

  1. wo steht das html senden könnte?
  2. klar macht das der browser
  3. kannst auch sagen, ausführbarer programm-code kann nichts,
    nur wenn er in den arbeitsspeicher geladen wird.

wenn du du ein persöhnliches Problem mit mir hast, dann bitte kläre da persöhnlich.
Wenn ich dir mal was erklär weil du unsinn produzierst, brauchste nicht gleich überalll „hauptsache dagegen“ schreiben.

Ich merk schon du willst hier privat werden und nicht objectiv.

Also lassen wir das gell.

Der schlauere gibt nach.

P.S. nicht immer mit dem finger auf andere zeigen, lieber mal in den spiegel.

P.P.S. du solltest seine Frage nochmal genau lesen, vielleicht merkst auch du dann was er sich da alles zusammenreimt, schlieslich sagt er ja das er keine ahnung hat wie er es schützen soll.

Guten Tag

  1. Der Form-Tag ist Bestandteil der HTML-Spezifikation. Damit
    ist es selbstverständlich legitim zu sagen „Die HTML macht…“

ohne interaktion , ob script oder user , macht das HTML rein garnichts :smile:
es wird geladen und angezeigt.

Schönen guten morgen, der rest erklärte dir tina schon.

durch einen js-script ist seit dem 01.02.2010 bei mir kein
unerwünschter eintrag mehr vorgekommen … und das bei über
4000 versuchen eines direkt-aufrufes!!!

gruß
klaus

Durch ein JavaScript ??? Meinst du das wirklich :smile:
Das hilft nur wenns auf der Seite absolut nix gibt, leider sind aber mailer ein gern genutztes ziel.
Und sobald sich ein User wirklich dafür interressiert , hebelt er dir dein JavaScript aber sowas von einfach aus.

Was du meinst ist , das diverse standart spam scripts nicht funktionieren.

Auf meiner Seite dauert es genau 2 Tage, dann hat er sowohl meine captchas gehackt und im jedenfall alle JavaScript versuche , sowie coockie dreck.

Ergo kämpfe ich wie alle , mit immer neuen captchas und veränderungen.

Beispiele sind z.b. Cryptload etc, die cracken captchas JavaScripts und und und :smile: Wer das an dein Formmailer anpasst , braucht wirklich nicht lange um viel viel geld mit email-spam zu machen.

Aber wenn du eine funktionierende lösung hast , die eben bei wichtigen seiten auch halten, bin ich gerne bereit dir geld dafür zu bezahlen.

Wer das an dein Formmailer anpasst
, braucht wirklich nicht lange um viel viel geld mit
email-spam zu machen.

gilt natürlich nur wenn der formmailer nicht nur an ein selber schickt, was das geld verdienen angeht, ansonsten ist er schon glücklich damit zu nerfen :smile: Und von solchen reinen scriptkiddys gibt es immernoch ganz ganz viele :smile:

Beispiele sind z.b. Cryptload etc, die cracken captchas
JavaScripts und und und :smile: Wer das an dein Formmailer anpasst
, braucht wirklich nicht lange um viel viel geld mit
email-spam zu machen.

bei mir kann generell nur 1 mail per aufruf des formmailers versendet werden. also für spam-versender uninteressant.
außerdem liegt dieser service im user-bereich und da wird die absender-addi entsprechend der user-addi fest vorgegeben.

deine domain scheint wohl mehr wegen der „offenheit“ so beliebt zu sein :smile:)

Kontakt anfragen macht man bestimmt nicht mit einem registrierten Nutzer , dafür will ich keine AGB anerkennen müssen. Da geht man doch lieber zum Mitbewerber.

)

bei mir kann generell nur 1 mail per aufruf des formmailers
versendet werden. also für spam-versender uninteressant.

naja, wenn er sich mit dem script mal eben 1000 neue accounts macht und sendet , was schon X mal passiert ist bei so einigen registrierungsystemen (captcha hacking durch download seiten)

außerdem liegt dieser service im user-bereich und da wird die

naja wie oben schon beschrieben, auch registrierungs scripts sind heiss begehrt, multimail domain und ab gehts. Ich hoffe du prüfst auf zu häufige anmeldungen durch liebe hotmail (oder die noch beliebteren freenet http://board.gulli.com/thread/128115-ftp-login-probs… ) kontos.

Ausser bei vorgegebenen (hardcoded) Body und Subject stimm ich Dir zu, damit kann man wirklich nix spammen (alias passwort recover email)

absender-addi entsprechend der user-addi fest vorgegeben.

jup hilf aber nicht wenn der absender auch eine fake registrierung ist. Dann schickt er immernoch mit deinem Script den Spam an andere.

Wenns nur an sich selber geht „hardcoded“ dann gibbet halt nur für deine eigene mail spam (was bei kinderpornolinks mir immernoch übelst aufstößt)

deine domain scheint wohl mehr wegen der „offenheit“ so
beliebt zu sein :smile:)

ja logisch , aber wie oben beschrieben auch bei regstrierungen gibt es genügend böse leutzt.
Ich seh fast überall auf den Gameseiten so eine ShoutBox die auch der Gast sehen kann und glaub mir, die werden gerne gespammt, solange bis man das auf „muss vom moderator überprüft werden“ stellt.
Und das nerft :smile:

P.P.S. eben alles nicht so trivial , aber schwer machen ist immer gut :smile: Ich denk du weisst das auch gell :smile:

Sicher gibts nicht , das mal sicher !!!