• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[PHP] In PHP-Datei E-Mail-Adresse speichern und je nach GET-Parameter versenden

HanZ

Aktiver NGBler

Registriert
16 Juli 2013
Beiträge
1.057
Hallo,

ich bin mit PHP nicht 100% konform, daher habe ich eine Frage. Ich habe eine Webseite mit einem Kontaktformular. Dieses Kontaktformular soll je nach GET-Parameter an unterschiedliche E-Mails versendet werden. Da ich nicht möchte, dass man diese E-Mails öffentlich sieht, dachte ich an folgendes Konzept:

URL-Aufruf:
xyz.de/contact.php?mail=12345

In der contact.php sind jetzt einmal die E-Mail-Adressen hinterlegt. Je nach value von mail wird eine andere E-Mail genommen und als Empfänger genommen.
Bei Python hätte ich jetzt einfach ein Dictionary genommen (Achtung, hier steht jetzt PHP/Python Mischmasch)

[src=python]mails = {'12345' : 'test@bla.de', '56789' : 'another@email.de'}[/src]

und dann
Code:
mail_empfaenger = mails[$_GET['mail']]

Dann hätte mail_empfaenger den wert test@bla.de ohne die E-Mail zu veröffentlichen.

Ist das generell unproblematisch, die E-Mails in der contact.php-Datei zu speichern? Oder gibt es hier andere Lösungen?

Ist die Idee mit dem Dictionary überhaupt in PHP umsetzbar? Andere Möglichkeiten? Die gesamte Idee scheiße? Direkt in die contact.php oder ne eigene PHP "mails.php"? Dann bei contact.php irgendwie Include? Und bei mails.php dann irgendwie Zugriff verweigern?

LG
HanZ
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Das geht, aber einen numerischen Index sollte man eher so definieren:
[src=php]$mails[0] = "0e@ma.il";
$mails[1] = "1e@ma.il";
...[/src]

folgendes geht auch:
[src=php]$mails["null"] = "0e@ma.il";
$mails["eins"] = "1e@ma.il";
...[/src]

Gibt halt keine strikte Typisierung. ist und bleibt eine zweischneidige Angelegenheit.

Das sollte auch gleich so funktionieren wie ich deinen Post verstehe. Also von der Abruftechnik her.
 
Zuletzt bearbeitet:

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
Also wenns nur ein mini-Projekt ist würde ich ein Switch-case schreiben, und da den Formularwert durchswitchen mit default value für ungültige Eingaben, etc.

Aber ja, du kannst auch zb ein json File erstellen, dort alle E-Mails abspeichern, das mit php jedesmal auslesen und ähnlich wie ein dictonary nutzen. Oder eben das Array direkt der PHP File definieren.

Eingabe cleanen wäre vermutlich auch gut, kommt eben darauf an, was erlaubt ist im Kontaktfeld.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Das wäre vermutlich die sauberste Lösung, zumindest aus Sicht "Prüfung der Usereingaben". Meine erste Antwort entspricht eher der nächsten Übersetzung.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Korrekt, nennt sich bei PHP assoziatives Array. Etwas das einem Dictionary näher kommt wirst du bei PHP nicht finden.
 

Shodan

runs on biochips

Registriert
14 Juli 2013
Beiträge
661
Ort
Citadel Station
Kürzere Array Syntax (mit => und Kommas )
[src=php]$mails = [
'support' => 'lvl1support@service.domain',
'techguy' => 'lvl2support@service.domain',
'business' => 'sales@service.domain',
];

if (isset($mails[$_GET['mail']]) {
$receiver = $mails[$_GET['mail']];
} else {
// client sent an unknown value. Could be a bug or an attack[/src]
Einfache Anführungszeichen: " und ' unterscheiden sich und wenn du " nicht brauchst, dann nimm '

du kannst auch zb ein json File erstellen, dort alle E-Mails abspeichern, das mit php jedesmal auslesen
Trennung Konfiguration und Code finde ich toll.
Konfig in JSON ist aber nur sinnvoll, wenn man sie woanders auch verwendet, z.B. mit einer GUI editiert.

Aber in einem kleinen PHP Projekt?

config/mail.php
[src=php]<?php return [
'receivers' => [
'support' => 'lvl1support@service.domain',
'technik' => 'lvl1support@service.domain',
'business' => 'sales@service.domain',
],
'otherStuff' => [ ]
];[/src]

logic.php
[src=php]<?php
$config = require 'config/mail.php';

$input = $_GET['mail'];

if (isset($config['receivers'][$input]) {[/src]

Ja das requiren wird hässlich, wenn Projekte größer werden, aber wenn Projekte größer werden wirft man auch mehr Boilerplate drauf ;-)

Was genau meinst du [mit Eingaben cleanen]?
Validate on Input, Escape on Output.

Validation z.B. durch Abgleich einer Liste der erlaubten Werten, siehe else Zweig im Code oben.

Kontextsensitives Escaping bedeutet den String umzuschreiben, damit Steuerzeichen des Kontextes, in den er gerendert wird, auf dessen Art "escaped" sind und daher nicht als Code interpretiert werden, wenn später der Interpreter jenes Kontextes (z.B. ein Browser oder ein E-Mail-Client oder eine Datenbanke) diese verarbeitet.

Einige Leute "Sanitizen" dazwischen noch, d.h. sie streichen alles aus dem String, was ihnen nicht gefällt und behalten nur den Rest als Eingabewert (der immer noch kontextsensitiv escaped werden muss, da man beim Sanitizen den Kontext nicht kennt).

Beispiel: Meine Input enthält HTML-Tags: <span color=green>Das NGB streicht mir den Tag nicht weg, dein Browser wertet es aber auch nicht aus, der Text wurde escaped</span>
 

HanZ

Aktiver NGBler

Registriert
16 Juli 2013
Beiträge
1.057
  • Thread Starter Thread Starter
  • #8
Danke, das grobe Gerüst steht und funktioniert soweit. Morgen gehts erstmal in Urlaub, danach guck ich mir das nochmal genauer an mit dem cleanen.
 

LetMe

Neu angemeldet

Registriert
16 Aug. 2019
Beiträge
8
Man sollte NIE ein HTTP GET Request wichtige Daten wie Email und PWs uerbermitteln. GET wird mit der Antwort uebertragen und kann auch schnell trotz einfacher base64 oder md5 etc. Verschluesselung abgegriffen werden. Ich wuerde es als POST definieren. POST uebermittel nicht per Header sondern als inhalt der Message auf welche man schwirieger zugreifen kann. Erlaube allg. nur bestimmte HTTP request Parameter und erstelle nicht unabsichtlich einen HTTP proxy. Aber bitte die POST stark beschraenken und reglementieren. Sonst laden man dir so viel Schrott hoch.

Absolut wichtig ist, das du die die php dateien entsprechend configurierst und davor schuetzt, dass unautoresierte user .php files mittels url testingen finden und manipulieren koennen. Du solltest auch die cookies filtern und jede input moeglichkeit fuer user mit entsprechender filtern ausrueusten und festhalten, dass keine .php dateien oder andere heraufgeladen werden koennen und mit unvorsichtig gestallteten Rechten auf deinem Server ausgefuehrt werden koennen.

und bitte... hide und filtere deine urls vor bestimmten Eingaben und .dateien wie urlpaths mit .php?iwasCMD=<angriff> vor injection Angriffen. Das ist einfach so der klassiker, den man wirklich vermeiden kann und der wird mal schnell trollige Eigenschaften in kurzer Zeit annehmen.
 
Oben