Formular sicher gegen Spam machen

Peter Kluge

Angesehenes Mitglied
Hallo.

Und zwar wurde unser Formular benutzt und als Spamschleuder benutzt.
Hier den Form Tag:

QUOTE <FORM name="user_form" onsubmit="javascript: return check()" action="<? echo $PHP_SELF ?>" method="post";


Wie ich einen Tipp bekommen habe müßte/könnte es geschützt so aussehen:


QUOTE <FORM name="user_form" onsubmit="javascript: return check()" action="<? echo $PHP_SELF ?>" method="post";
if (strpos($from,"\n") || strpos($from,"\r")) die("No spamming please");>



Bringt das was oder gibt es bessere Lösungen?

Gruß Peter
 
und wie wird das als Spamschleuder genutzt?
Ich steh ein wenig auf dem Schlauch.

gib mir mal an besten die URL per PN durch
 
Ich nutze zwar PHP nicht allzusehr.

Aber warum wird die $from - Adresse überhaupt übergeben?

Praktisch genügt es, für $from so etwas wie

QUOTE karlbert@domain.de
CC:erste-mailadresse,zweite-mailadresse usw.

Viel Spamtext

.




zu übergeben, dann werden diverse Mails auf einmal versandt und der eigentliche Text unten abgeschnitten.

Wird $from nach \n durchsucht (also nach einem Return) und - falls gefunden - abgelehnt, dann ist zumindest dieses Loch zu. Vermutlich gibt es dann aber noch diverse andere Löcher.
 
Ich verstehe nicht, warum es in diesem Prozess überhaupt eine $From Adresse braucht, abgesehen von der, des users der sich anmeldet??

Wie gesagt, ich stehe auf dem Schlauch, ich werde wahrscheinlich erst kulg, wenn ich das Ding sehe.
 
Jürgen, du sprichst in Rätseln.
Bin doch nur Laie.
sad.gif
 
es braucht aber kein form2mail damit sich neue mitglieder anmelden können.
Ich raffe noch immer nicht, warum ein mail verschickt werden soll.
 
also ich habe da einen kleinen trick den ich anwende und bisher wurde das noch NIE überlistet.

bei einem formular gibts unten vorm abschickenbutton eine kleine zahl

dort lass ich eine randomzahl anzeigen so 1-100 und daneben ein leeres feld.
der user muss nun die zahl in dieses feld eintragen.

beim verarbeiten der daten wird zuerst überprüft ob die randomzahl und die vom user eingegebene zahl übereinstimmt und dann kann die verarbeitung weitergehen - ansonst gibts ne fehlermsg

dieser kleine trick kostet nur 4 zeilen php code und nützt wirklich.
 
genau und die meisten spamschleuder sind ja von bots verursacht.

natürlich sollte man schon schauen das man ned wirklich mit injects was anstellen kann. aber das muss ich glaub ned noch erwähnen...

aber mit diesen mitteln ist die chance gross das nix mehr passiert
 
CAPTCHA heisst das Zauberwort.

Ohne das ganze Formular zu sehen kann man keine gescheite Antwort auf die Frage geben.
 
Mit CAPTCHA hält man den Bot nur von den Sicherheitslücken fern; man sollte diese auch schließen, d.h. Zeilenumbrüche aus allen Feldern filtern, die als Emailheader verwendet werden (Absender, Empfänger, Betreff etc.).
 
In der Tat helfen dir CAPTCHAs und extra Eingabefelder überhaupt nichts gegen Mail injection, das geht dezent am Thema vorbei.
Es geht nicht darum einen Bot aufzuhalten, es geht darum die Eingabe von manipulierenden Strings abzufangen. Die können, grade in der Testphase des Cracks, auch manuell eingegeben werden.

Hier hilft nur eine saubere Filterung der vom Formular übergebenen Daten.
Irgendwo hatten wir schon Threads zu dem Thema, ich suche hier gleich mal...

Edit:
z.B.: http://www.ayom.com/topic-24443.html

 
@ Tsc

Wie genau läßt sich soetwas denn jetzt umsätzen. Wie gesagt ich bin nur Laie.
unsure.gif

Captcha wäre sicherlich eine mögliche Option etwas dagegen zu tun. Zumindest ein Anfang.
 
Na, das ist doch klar:

Jedes Feld kann nur bestimmte Zeichen aufnehmen.
Bei dir handelt es sich um eine Registrierung?

Der User gibt also beispielsweise an:
- E-Mail
- Benutzername
- Passwort
- Vorname
- Nachname
- Geburtsdatum

So in etwa...

Wenn das Formular abgeschickt wird, prüfst du, ob der übergebene Wert den Anforderungen entspricht.

Grundsätzlich als erstes Mal ein trim(), ein strip_tags() und ein utf8_encode() über alle Formular-Werte machen.

Dann weiter:
Es gibt genaue Richtlinien, wie eine eMail-Adresse syntaktisch auszusehen hat. Mit RegEx also überprüfen, ob das passt.
Benutzername sollte m.E. aus nichts anderem bestehen, als a-zA-Z0-9-_
Dies mit RegEx überprüfen. Ist ein Wert drin, der nicht in a-zA-Z0-9-_ aufgeführt ist: Vorgang abbrechen, Fehlermeldung ausgeben.
Passwort so ähnlich. Genau definieren, welche Werte drin stehen dürfen, bei anderen dann Fehlermeldung.
Vorname und Nachname können nur aus a-zA-Z, leerzeichen und dem Bindestrich bestehen.
Das Geburtsdatum am Besten mit 3 Selectboxen angeben lassen.
Die übergebenen Werte für Tag, Monat und Jahr mit intval() oder is_numeric() prüfen.
Außerdem können Tage und Monate nur maximal aus 2 Stellen bestehen, das Jahr aus maximal 4.
Also mit strlen() könnte man zusätzlich die Länge prüfen.
Dies kannst du übrigens bei allen Werten machen:
strlen() prüft, wie lang ein Wert ist. Der Benutzername wird i.d.R. wahrscheinlich maximal 20 bis 32 Zeichen lang sein, Beim Vornamen reichen auch 20, Nachname vielleicht 32... Sowas in der Art...

Also:
Die übergebenen Werte einfach auf Ihre Gültigkeit prüfen, bevor du sie weiter verarbeitest.
In PHP5 beispielsweise gibt es auch sehr schöne integrierte Filter-Funktionen.
Schau dir mal dazu filter_input etc. an, falls ihr PHP5 nutzt.

Beim "Sicher machen" von Formularen sollte das Hauptaugenmerk nicht auf Bots liegen, die eMails versenden wollen.
Wenn ein potentieller Hacker auf deine Seite kommt und erstmal merkt, dass du Variablen ungefiltert weiter verarbeitest, kann er im extrem ALLES mit deiner Anwendung machen.
Wenn in deiner Anwendung ein Zugriff auf die Datenbank gemacht wird und der Nutzer weiß, wie er was muchen muss, um das zu manipulieren, kann er ganz schnell an alle deine Daten rankommen, im extremsten Fall vielleicht sogar löschen.


Nachtrag:
Sowas wie "onsubmit="javascript: return check()" im Formular kannste knicken.
Ich vermute, das ist eine Werte-Prüfung in javaScript.
Das allein reicht niemals aus.
Hat der Benutzer JavaScript deaktiviert, würde er damit die Prüfung problemlos umgehen.
Werte sind SERVERSEITIG zu prüfen.
 
@ Heiko

Meld dich doch mal über PM beim mir. Vielleicht solltest du dir das mal bei mir anschauen und
noch mal genau sagen was getan werden kann. Vielleicht springt ja ein Auftrag raus.
wink.gif


 
Zurück
Oben