PHP mail-verifizierung - variable übernehmen

Sarius87

Banned
Registriert
Mai 2016
Beiträge
888
also probiere grad ein einfaches "mail-verify" zum programmieren , habe eine 1.php wo man seine mail eingibt , die form action weißt zu send.php wo das mail-send-script ist und wo einfach eine code-variable steht , noch kein random code :

Code:
$Code = '523';

außerdem halt die variable der Mailadresse die mit POST geholt wird zum senden an diese mailadresse :

Code:
$MailAn = $_POST['mail'];

nach dem senden kommt man zur 2.php , jetzt soll bei 2.php ein eingabefeld stehen wo man den code eingibt , bzw. erstmal will ich dass auf 2.php der code steht der bei der send.php festgelegt wird , doch wie geht das ? mit POST oder GET geht es nicht :/ man wird bei der send.php ja direkt weitergeleitet zu 2.php

send.php :

Code:
<?php
$adminName = 'Mail verify';
$adminMail = $_POST['mail'];

$formName = 'no-reply@SEITE.de';
$formMail = 'no-reply@SEITE.de';

$subject = 'Mail verify';
$Code = '5224';

if(!isset($_POST['mail'])) {
	?><meta http-equiv="refresh" content="0; URL=http://SEITE.de/1.php"><?php
	exit;}

if(isset($_POST['mail'])) {
$mail = trim($_POST['mail']);

echo true;
} elseif(isset($_GET['mail'])) {
$name = trim($_GET['mail']);

echo true;
}else{
echo false;
exit;
}

$mailTo = $adminName . ' <' . $adminMail . '>';
$mailFrom = $formName . ' <' . $formMail . '>';
$message = '
<html>
<head>
<title>Mail verify</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
</head>
<body>
<div class="container">
<p>
<div class="panel panel-info panel-small">
<div class="panel-heading">
</div>
<div class="panel-body">
Hallo! Dein Code: ' . $Code .'
</div>
</p>
</div>
</body>
</html>
';
$head = 'MIME-Version: 1.0' . "\r\n";
$head .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$head .= 'From: ' . $mailFrom . "\r\n";
$head .= 'Reply-To: ' . $name . ' <' . $email . ">\r\n";
$head .= 'X-Mailer: PHP/' . phpversion();

if(mail($mailTo, $subject, $message, $head)){
	header('Location: http://SEITE.de/2.php?msg=sent');
} ?>
 
Zuletzt bearbeitet:
Code als Tuple mit der Mailadresse in einer Datenbank zwischen speichern. Bei der Umleitung auf die 2. Seite die Mailadresse mit übergeben und dort den Code wieder aus der Datenbank auslesen.
 
Sobber schrieb:
Code als Tuple mit der Mailadresse in einer Datenbank zwischen speichern. Bei der Umleitung auf die 2. Seite die Mailadresse mit übergeben und dort den Code wieder aus der Datenbank auslesen.
Ich bin jetzt kein PHP-Freak, aber die Lösung klingt eklig.
 
Den Aktivierungscode musst du auf jedenfall irgendwo speichern. Wie soll es sonst gehen? Das hat jetzt nicht grundsaetzlich was mit PHP zu tun @ andy_m4 :)
Wie Sobber schon sagte, einfach mit am User speichern (extra Feld).
Also in 1.php die Mail Addresse angeben, in der send.php den Code generieren und mit der Mailaddresse (Benutzeraccount?) speichern. Danach in der 2.php nachschauen ob der Aktivierungscode in der Datenbank vorhanden ist und den passenden Benutzer freischalten.

z.B. habe ich gestern erst einen Link beim registrieren bei Planet Teamspeak bekommen.
https://www.planetteamspeak.com/register/activate/?key=82fb5924546bda3dba6a70708752xxxx
Beim aufrufen wird der Key in der Datenbank gesucht und mein Account wird aktviert. Ansonsten passiert halt nichts und der User bleibt deaktiviert. Hier noch ein anderer Beispiellink: http://www.mouse-sensitivity.com/fo...uid=76xx&aid=035fbe2ccfa5c2a69afcb09a8dc5xxxx

Hier ist ein Beispiel wie man das im PHP Framework Laravel macht: http://bensmith.io/email-verification-with-laravel
 
jo, die von sobber vorgeschlagene variante ist ne voellig typische implementation fuer mail verification ueber tokens.

wuerdest du den irgendwie generierten token nicht server-lokal zwischenspeichern, dann bedeutet das ja, dass alles vom client kommt (also von 1.php generierter token und aus der email entnommener token), und da kann dir der client ja bei bedarf viel vorluegen.

technisch gesehen koenntest du auch den token eindeutig abhaengig vom mailadressen-input generieren durch ein paar runden hashing fuehren, damit sparst du dir zwar die zwischenspeicherung eines verifikationstokens, das ist aber offensichtlich anfaellig fuer reverse engineering.🦋
 
r15ch13 schrieb:
Den Aktivierungscode musst du auf jedenfall irgendwo speichern. Wie soll es sonst gehen? Das hat jetzt nicht grundsaetzlich was mit PHP zu tun @ andy_m4
Kommt darauf an, wie man es sieht. Klar muss der Wert irgendwo gespeichert werden. Aber für den Programmierer sollte das nicht mehr Aufwand sein, als die Info in einer Variable zu speichern. Um den Rest sollte sich "das System" kümmern.
 
@andy_m4
Dann schlag doch einen besseren Lösungsweg vor.
 
In einer Variable speichern ist toll, zumindest solange das Programm/Skript läuft. Nur was passiert wenn es beendet wird? Dann ist alles vergessen. Bei Webservern gibt es in der Regel immer eine maximale Laufzeit für Skripts, damit sie unter Umständen (fehlerhaft) nicht den ganzen Server lahmlegen.
Daher kommt man imho um persistentes Zwischenspeichern nicht herum (wenn es zufallsgenerierte Codes sein sollen). Da man die Mail-Adressen meist eh in einer Datenbank speichern will, ist es auch nicht viel Mehraufwand den Code dort mitzuspeichern.
 
Bagbag schrieb:
Dann schlag doch einen besseren Lösungsweg vor.
Wie gesagt, PHP ist nicht mein Gebiet.


Sobber schrieb:
In einer Variable speichern ist toll, zumindest solange das Programm/Skript läuft. Nur was passiert wenn es beendet wird? Dann ist alles vergessen. Bei Webservern gibt es in der Regel immer eine maximale Laufzeit für Skripts, damit sie unter Umständen (fehlerhaft) nicht den ganzen Server lahmlegen.
Daher kommt man imho um persistentes Zwischenspeichern nicht herum (wenn es zufallsgenerierte Codes sein sollen).
Klar. Hier sind es zwei verschiedene Skripte. Das macht es etwas schwieriger. Alles in einem Programm wäre natürlich einfacher.
Aber ansonsten spricht da nix gegen. Und selbst wenn das Skript beendet wird, muss heißt das ja nicht, dass die Variableninhalte zwangsläufig weg sein müssen. Kommt eben ganz darauf an, wie das Laufzeitsystem das handhabt. Das kann die ja von mir aus auch auf Platte schreiben. Nur der Programmierer soll sich halt nicht damit herumplagen müssen. Klar soll er ruhigdie Möglichkeit haben darauf Einfluss zu nehmen, was da im Hintergrund passiert. Aber per default sollte er sich eben nicht drum kümmern müssen.

Mir wurde PHP immer als einfach verkauft und wenn man dann solche Sachen "zu Fuß" machen muss, dann sehe ich davon irgendwie nicht viel.

Sobber schrieb:
Da man die Mail-Adressen meist eh in einer Datenbank speichern will, ist es auch nicht viel Mehraufwand den Code dort mitzuspeichern.
Idealerweise will man überhaupt nicht in einer extra Datenbank speichern müssen. Weil damit kommt es ja wieder zu einem Bruch in der Sprache mit der man programmiert, weil man sich dann plötzlich mit SQL und Tabellen rumschlagen muss.

Was ich möchte ist halt mit den nativen Datenstrukturen arbeiten können. Das dann im Hintergrund vielleicht die Sachen in einer Datenbank gespeichert werden, ist ne andere Frage. Aber ich als Programmierer möchte damit nicht in Berührung kommen wenn ich nicht muss.
 

Ähnliche Themen

Zurück
Oben