Kontaktformular programmieren? Honey Pot einbinden?

3 Antworten

Zu deinem Code hat regex9 genug gesagt, deshalb von mir nur eine kleine Anmerkung zu deinem Honeypot: Achte darauf, dass dein Server über genügend Speicher für Logdateien verfügt!

Gerade in den letzten Wochen gibt es auf meine Server im Sekundentakt Angriffe (ca. 5000 bis 8000 Angriffe pro Tag), und da ich ausgiebig logge, kommen da mehrere GB am Tag zusammen.

Das meiste davon ist - zumindest bei mir - zwar automatisierter Skriptmüll von Spammern, aber jeden Tag kommen durchaus ein bis fünf "händische" Angriffe vor, die teilweise echt clever ausgeführt werden!

Also pass auf, dass da nix überläuft und dir der Speicherplatz ausgeht!

Viel Erfolg mit deinem Honigtopf! ;)

Naja, ohne form action wird da nix passieren :)

Hier ist ein simpler aber effektiver Honeypot Code:

https://gist.github.com/andrewlimaza/958826feac907114a57462bfc8d535ff

Das Prinzip ist, dass Spam-Bots alle Felder, die sie sehen ausfuellen. Fuer Menschen kann man das Feld per CSS verstecken. Wird das Honeypot Feld ausgefuellt, ist klar, dass es ein Bot war und du und du kannst das Formular schicken blockieren.

  1. Ich sehe da keinen PHP-Code.
  2. Das Markup ist nicht formatiert.
  3. Das Markup ist invalid aufgrund des fehlenden Grundgerüsts und Doctype.
  4. Du verwendest fast überall falsche (dt.) Anführungszeichen.
  5. Verwende doch required- und pattern-Attribute, wenn du clientseitig prüfen möchtest. Oder sollen noch ganz alte Browser unterstützt werden?
  6. Wie definierst du das Money-Pot-Verfahren?
blablacaaaar  04.03.2018, 16:35

Jo kann ich so blos unterstützen. Noch nie von einem Money-Pot Verfahren gehört..

0
djpaddyk 
Fragesteller
 04.03.2018, 16:56

Hey, ich meine natürlich Honey-Pot-Verfahren (6).

Hier ein Link mit der PHP (1). https://www.hastebin.com/udokitagud.pl

Leider habe ich mit required und Pattern noch nicht wirklich gearbeitet.

Hier mal meine style css (https://www.hastebin.com/meqiruxoku.swift).

Und die html um die es sich dreht. https://www.hastebin.com/apubeqaqen.xml

Das Gerüst müsste nun da sein oder?

0
regex9  04.03.2018, 18:57
@djpaddyk

Honeypot

Achso. Ja, das lässt sich ziemlich simpel implementieren. Füge einfach paar Eingabefelder mit hinzu, die via CSS ausgeblendet werden und Namen wie username, email o.ä. haben. Wenn sie ausgefüllt auf der Serverseite ankommen, kannst du die restliche Frage ignorieren. Hier findet sich ein einfaches praktisches Beispiel, vermutlich würde ich das Verstecken des Feldes durch einen konkreten, aber unbenannten CSS-Selektor lösen, damit ein Robot auch keinen Hinweis über den Namen von id- oder class-Attribut bekommt.

Exemplarisches Beispiel:

form input[type="text"]:nth-child(3) { display: none; }

Eine andere wohl ausreichende Möglichkeit zur Bekämpfung von Robots wäre ein Google Captcha.

HTML:

Ja, das Gerüst ist nun da.

Einen Fehler habe ich bereits gefunden, bei dem Wert des type-Attributs deines ersten script-Elements ist etwas schief gegangen. Lass das gesamte Attribut einfach weg, denn der Standardwert (text/javascript) ist bereits richtig.

Weitere Probleme bezüglich des Markups kannst du mit dem W3C Validator herausfinden.

CSS:

Ganz am Ende der Datei hast du eine schließende Klammer zu viel. Weiteres kannst du wieder mit einem Validator herausfinden.

JavaScript / Formular:

1) Das JSON-Objekt, welches du via AJAX versenden möchtest, ist invalid.

{ action : 'send' ,name:name, email:email, betreff:betreff, nachricht:nachricht }

Die Bezeichner der Properties werden in Anführungszeichen gesetzt, insgesamt sind nur doppelte Anführungszeichen erlaubt.

2) Daten wie E-Mail, Betreff, Nachricht usw. würde ich erst einholen, wenn sicher ist, dass die erforderlichen Felder ausgefüllt wurden. Wenn dem nämlich nicht so ist, werden sie doch nie gebraucht.

3) Wieso arbeitest du denn mit einem Timer, um die Texte (Fehler/Erfolg) auszugeben?

4) Generell würde ich mich an deiner Stelle für einen Versandweg entscheiden. Entweder nur via AJAX oder nur via Formular. Der Button, der den Versand triggert, braucht im derzeitigen Fall kein Submit-Button sein.

5) Ich gehe einmal davon aus, dass das ein hastebin-Problem ist, achte jedenfalls auf die Darstellung von Umlauten und Sonderzeichen.

PHP:

1) Variablen, die du nicht benutzt, würde ich rausschmeißen. Dazu zählt $absendermail.

2) In den Zeilen 13 und 19 sind falsche Anführungszeichen.

3) Wenn du Zeilenumbrüche in deinen Texten haben möchtest, wirst du wahrscheinlich noch weitere Whitespace-Character wie \n (linefeed) oder für Windows OS \r\n (carriage return) einfügen müssen.

4) Die Variable $betreff1 gibt es nicht und den Wert von $betreff überschreibst du einmal. Auch die Variable $absender ist nicht existent.

5) Du überprüfst die Inhalte, die von außen kommen und in der E-Mail eingesetzt werden, vor dem Versenden kein einziges Mal. So etwas kann fatal enden, wenn es denn mal jemand ausnutzt. Überprüfe Daten von außen also stets, bevor du sie verwendest. PHP bietet einige Filterfunktionen u.ä. an.

6) In Zeile 26 befindet sich ein Anführungszeichen zu viel.

All diese Syntaxfehler, die ich hier unter anderem aufgelistet habe, hättest du bereits selbst finden müssen. Verwende einen vernünftigen Editor (der Syntax-Highlighting unterstützt), wenn du das noch nicht tust. Auswahl gibt es genügend: PhpStorm, WebStorm, Visual Studio, NetBeans IDE, Notepad++, etc.. Und teste deine Anwendung, bevor du sie einsetzt. Mit einem Softwarepaket wie XAMPP kann man sich eine Serverumgebung ziemlich schnell und einfach lokal nachstellen. Wie man die mail-Funktion von PHP mit XAMPP testet, wird hier erklärt. Wie man sich einen richtigen Mailserver einrichtet, hier.

Leider habe ich mit required und Pattern noch nicht wirklich gearbeitet.

Das ist ziemlich unproblematisch, auf den von mir verlinkten Seiten wird es ja ziemlich simpel erklärt. Für E-Mails eignet sich des Weiteren übrigens der input-Typ email.

Ob du diese HTML5-Features einsetzen möchtest, ist aber natürlich dir überlassen.

0