XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   Vorbildliches und sicheres Kontaktformular? (http://xhtmlforum.de/showthread.php?t=73843)

AndreasB 14.05.2019 12:15

Vorbildliches und sicheres Kontaktformular?
 
Moin.


Immer wieder liest man Hinweise, wie es wichtig sei, ein Kontaktformular hinreichend abzusichern, damit es nicht zur Spamschleuder wird.


Beispiel:
https://www.freecontactform.com/email_form.php


Ich suche nun ein Skript, welches auf vorbildliche Weise aufgebaut ist und welches sich leicht um weitere Felder (natürlich HTML5) von mir erweitern lässt.


Ideal fänd ich ein Skript, wo der auszugebenden HTML-Code nicht mitten im PHP-Skript stehen muss. Aber wenn ich es richtig verstehe geht dies nur, wenn die Technik "DOM" (https://www.php.net/manual/en/book.dom.php) verwendet wird - die wohl unter Programmierern als kompliziert gilt.

Zur Spamvermeidung:
Gilt <https://www.google.com/recaptcha/intro/v3.html> als empfehlenswert?

Beispiel HTML für ein minimales Kontaktformular:

HTML-Code:

<form method="post" id="kontakt-formular" action="">
    <div>
      <label for="mail">Mail *</label>
      <input id="mail" name="foo-mail" type="email" required  />
    </div>
    <div>
      <label for="nachricht">Deine Nachricht an uns</label>
      <textarea id="nachricht" name="foo-nachricht"></textarea>
    </div>
    <div>
        <label for="kopie-senden">Kopie an meine Mailadresse senden</label>
        <input id="kopie-senden" type="checkbox" value="bar-kopie-senden" name="foo-kopie-senden" />
    </div>
    <div>
      <button type="submit">Senden</button>
    </div>
    <p>* Bitte fülle dieses Feld unbedingt aus, denn sonst könnten wir Dir nicht antworten und das wäre doch schade.</p>
</form>

Als sinnvolle Rückgabe vom Server nach erfolgreichem Senden stelle ich mir vor, dass der gesamte gesendete Inhalt gezeigt wird und oben drüber irgendwas steht wie "Deine Nachricht wurde an uns übermittelt, wir melden uns bei Dir."


Eine clientseitige Validierung durch JS soll erstmal außen vor bleiben. Clientseitig soll HTML5 genügen.



Kann jemand von euch ein Skript empfehlen, welches den genannten Kriterien genügt?

Ich würde mich über einen Rat freuen.
Danke.

Kleinigkeit am Rande:
Wenn ich es richtig verstehe, ist es nötig/üblich zusätzlich zu einem Wert für das Attribut id auch die Attribute value und name anzugeben. Falls es skripttechnisch jedoch möglich wäre auf value und name zu verzichten, hätte man weniger Redundanz im System.

Noch eine Kleinigkeit:
Ist es sinnvoll bei der Rückmeldung eines erfolgreichen Versands eine neue URL zurückzugeben?
Also z.B. "example.tld/kontaktformular-erfolgreich-versendet" oder würdet ihr für die Erfolgsmeldung die gleiche URL zurückgeben, auf der auch das Kontaktformular liegt, wie z.B. "example.tld/kontakt"?

cloned 15.05.2019 09:16

Ich ignoriere einfach mal das vorbildlich weil das kann nicht bewertet werden.
Was man sagen kann: Dein HTML-Formular schaut doch ganz ok aus, dann musst du damit doch nur noch das backend dafür schreiben. Muss es in PHP sein?

Hier hast du zb ein relativ aktuelles Beispiel https://code.tutsplus.com/tutorials/...php--cms-32314

google recaptcha wird auf millionen Websites eingesetzt, das kann also bedenkenlos eingesetzt werden, sofern man es denn verwenden will und die Datenschutzrichtlinien von google ausreichend sind etc.

Du wirst aber kein Skript finden welches exakt deinen Anforderungen entspricht, um kleine Anpassungen wirst du nicht herumkommen.

Kleinigkeit eins wurde damals in deinem letzten Thread schon besprochen, hier aber gerne nochmal die Zusammenfassung: Du brauchst name um den Wert auch im Backend verarbeiten zu können. value und id brauchst du nur fürs HTML, die kannst du also weglassen. Dank Variablen braucht dich die redundanz aber nicht zu stören, du kannst eine Variable definieren und diese dann als Wert in id, value und name einfügen, dann hast du dadurch dann 0 redundanz in deinem Code.

Sicher kann es sinnvoll sein eine neue URL zurückzugeben, du musst dann nur darauf achten was passiert wenn jemand die URL aufruft ohne Daten mitzuschicken.

AndreasB 15.05.2019 11:01

@cloned
Vielen Dank für den Hinweis zu dem Tutorial.


Da ich ja hier in der Kategorie "serverseitige Skripte" gepostet habe, ging es mir um die Vorbildlichkeit des Skriptes und weniger um die des HTML.


Wie bewertet ihr erfahrenen Programmierer das Skript aus dem von Dir genannten Tutorial?


Und weiterhin interessiert mich:
Ist euch schonmal eines untergekommen, wo die Technik "DOM" sinnvoll eingesetzt wird? Oder sollte ich davon die Finger lassen, weil es von einem Laien wie mir ganz sicher nicht angepasst werden kann?

cloned 15.05.2019 11:03

Für mich, als jemand, der sich kaum mit PHP auskennt schaut das Skript nach einem sehr guten Startpunkt aus.

Deshalb kann ich dir auch nichts zur "DOM" Technik sagen, aber was genau ist dein Problem damit, dass der Code im File steht? Du baust das Formular ja sowieso nur einmal und irgendwo muss der Code doch stehen?

AndreasB 15.05.2019 11:19

Zur "DOM"-Technik:
Ich halte es für einen sehr eleganten Ansatz, wenn das Skript auf strukturierten HTML-Code zugreifen kann.
Und dies wiederum erlaubt eine (stärkere) Trennung von Skript-Code und auszugebendem Code. Das ist - so vermute ich - deutlich übersichtlicher und auch leichter erweiterbar.


Aber wir sollten in diesem Thread keine Zeit auf solche Debatten verschwenden.


Mich interessiert einfach ein PHP-Skript für ein Kontaktformular, welches diese Technik einsetzt.


Bisher konnte ich keines finden.

cloned 15.05.2019 11:45

Soweit ich das jetzt mit 5 Minuten googlen herausgefunden habe ist die DOM Technik in PHP nicht viel anders als der DOM welcher im Javascript / Browser schon existiert. Daher frage ich mich, wieso du darauf kommst, damit ein Login Formular zu bauen? Das ist doch dazu gedacht, ein bereits bestehendes Dokument zu parsen? Sprich du musst vorher dein HTML woanders stehen haben.

Gibt bestimmt auch ein PHP Framework womit du dir deine Elemente dynamisch erstellen kannst. Dann hast du aber erheblichen Overhead welcher für ein einfaches Kontaktformular nicht notwendig ist.
Du kannst auch dein PHP File so aufbauen dass Skript- und auszugebender Code sauber getrennt ist, siehe hier zB wieder mein Beispiel -> HTML und Skript Code sind voneinander getrennt.
Dort hast du, der einfachheit halber, den Ausgabestring in einer Zeile stehen, damit es einfacher lesbar ist. Du kannst natürlich auch an der Stelle einfach eine gesamte HTML Datei ausgeben lassen: https://stackoverflow.com/questions/...ml-file-in-php

Aber um so etwas wirst du nicht herumkommen, du wirst deine Logik haben und in dieser dann sagen -> Wenn X, dann zeig "ABC" an, wenn Y, dann zeig "DEF" an. Daran führt dir kein Weg vorbei. Du musst nur selber entscheiden in wie viele einzelne Dateien du das aufteilen musst.

protonenbeschleuniger 16.05.2019 08:50

Wie immer etwas abegedriftet.

Wie kommst du hier darauf, dass das DOM eine Rolle für dich spielt?
Das DOM brauchst du Serverseitig nur, wenn du bestehende fremde Seiten parsen möchtest, aber nicht um neue Seite aufzubauen.

Für ein Mailerskript ist als aller erstes relevant, dass die Empfänger sicher sind. wenn du diese fest "verdrahtest" kann es auch nicht als Spamschleder benutzt werden.
Dann ist es wichtig wie die Mail angezeigt wird. Wenn dort HTML oder gar Javascript ausgeführt wird, dann muss dieses auf jeden Fall gefiltert oder entsprechned maskiert werden werden. Wer sich Mails nur als Text anzeigen läßt, muss darauf nicht achten.

Das erste Skript erfüllt diese Anforderung z.T. läßt aber keine Umlaute beim Namen zu. Das von cloned schon und filtert darüber hinaus genauer.

cloned 16.05.2019 10:45

Zitat:

Zitat von protonenbeschleuniger (Beitrag 553669)
Das erste Skript erfüllt diese Anforderung z.T. läßt aber keine Umlaute beim Namen zu. Das von cloned schon und filtert darüber hinaus genauer.


Ich empfehle sowieso bei jedem solchen Inhalt vom Internet, sei es nun für PHP oder sonst was zu überprüfen, ob auch die eigenen Anforderungen erfüllt sind. Bei vielen englisch-sprachigen Tutorials wird (verständlicherweise) nur auf die englische Sprache geschaut, deutsche Sprache muss oft erst hinzugefügt werden.
Was dann aber nicht heißt dass eine Variante schlechter ist, es kann ja durchaus gewünscht sein, dass gewisse Zeichen nicht zugelassen sind. Das sind dann also beides "vorbildliche" Kontaktformulare.

Diese Überprüfung auf die eigenen Bedürfnisse beinhaltet nicht nur deutsche Zeichen, sondern auch zB bei der Überprüfung auf Telefonnummer oder PLZ muss das eigentlich immer angepasst werden. Deshalb kann es auch gar keine einheitliche Vorlage für ein Kontaktformular geben sondern immer nur Startpunkte.

protonenbeschleuniger 16.05.2019 11:58

und man sollte sich evtl. auch über "overblocking" Gedanken machen. Also wie wichtig ist es, dass das Formular möglichst einfach funktioniert und niemand abschreckt (was Captchas immer tun)

cloned 20.05.2019 13:25

Dafür eignet sich dann recaptcha v3, da gibt es dann nämlich kein captcha mehr für den User zum ausfüllen. Das arbeitet unsichtbar im Hintergrund.

AndreasB 27.05.2019 13:59

Zitat:

Zitat von cloned (Beitrag 553670)
Ich empfehle sowieso bei jedem solchen Inhalt vom Internet, sei es nun für PHP oder sonst was zu überprüfen, ob auch die eigenen Anforderungen erfüllt sind. Bei vielen englisch-sprachigen Tutorials wird (verständlicherweise) nur auf die englische Sprache geschaut, deutsche Sprache muss oft erst hinzugefügt werden.

Wenn die Einschränkung "Keine Umlaute" nicht explizit über einen regulären Ausdruck als restriction gesetzt wurde, sondern durch die Wahl eines anderen Zeichensatzes als UTF-8, dann würde ich es als nicht vorbildlich bezeichnen.

Wie auch immer, ich finde bisher kein Skript, welches für den Zweck "nur noch kleinere Anpassungen sind nötig" programmiert wurde, welches also ausführlich kommentiert ist, welches versucht minimalistisch zu bleiben, welches so übersichtlich wie möglich PHP und HTML trennt, etc.


Insgesamt glaube ich weiterhin, dass ein Kontaktformular als generische Aufgabe angesehen werden kann, wo es zu vielen Funktionsdetails eine weitgehend objektive beste Lösung gibt.

Aber im Web wird typischerweise das "Rad immer wieder von jedem Entwickler neu erfunden".

Ich gebe auch diese Aufgabe erstmal auf.

basti1012 05.06.2019 22:27

Schei.... auf Captcha.
Die meisten kennen den Link schon aber nicht alle
WebDesign - Tips und Tricks: Captcha-Alternativen

Funktioniert sogar recht gut . Hatte bis jetzt nur ein Spam gehabt und der wahr wahrscheinlich sogar ein Mensch und kein bot


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:51 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023