php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 14-11-2006, 20:55
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard Mail Versand so sicher?

Hallo,
habe mir ein kleines Fahrtenbuch gebastelt, bei dem man sich zuvor registrieren muss, um sich eintragen zu können, dazu wird eine Mail an den Admin(mich ) mit generiertem Link geschickt. Nun ist die Frage nach der Sicherheit dieses Mailers..
Es geht um folgendes Formular:
PHP-Code:
echo "        <form action=\"registrieren.php?action=registrieren\" method=\"post\">\n"
echo 
"            <input type=\"text\" name=\"Name\" maxlength=\"20\"/>Mannschaftsname/Name<br>\n"
echo 
"            <input type=\"radio\" name=\"Typ\" value=\"einzel\">Einzel\n";
echo 
"            <input type=\"radio\" name=\"Typ\" value=\"mannschaft\">Mannschaft<br>\n";
echo 
"            <input type=\"text\" name=\"E-Mail\">E-Mail Adresse<br>\n";
echo 
"            <input type=\"password\" name=\"Password\" maxlength=\"10\"/>Passwort(max.10 Stellen)<br>\n"
echo 
"            <input type=\"password\" name=\"Passwordctrl\" maxlength=\"10\" />Passwort wiederholen<br>\n"
echo 
"            <input type=\"submit\" value=\"Registrieren\"/><br>\n"
echo 
"        </form>\n"
darauf hin wird die E-Mail Adress mit
PHP-Code:
function is_email_valid($email) {
 return 
preg_match("/^[a-zA-Z0-9_\.-]{2,}@[a-z0-9-]{3,}\.[a-z]{2,4}|museum$/i"$email);
    } 
auf Gültigkeit geprüft, wenn das so alles passt wird
PHP-Code:
maile($_POST['Name'],$_POST['Typ'],$_POST['E-Mail'],MD5($_POST['Password'])); 
aufgerufen, die folgendes beinhaltet
PHP-Code:
function maile($name,$typ,$email,$pw){
$empfaenger "test@test.de";
$betreff $name." möchte sich registrieren";
$text "$name möchte sich für das Fahrtenbuch registrieren. <br>
            <b>Name:</b> $name<br>
            <b>Typ:</b> $typ<br> 
            <b>E-Mail:</b> $email<br>
            <b>Passwort:</b> $pw<br>
            <a href=\"generiertet Link\">Link</a>;
$extra    = "
From$email ($name)n";
$extra   .= "
Content-Typetext/htmlnContent-Transfer-Encoding8bitn";
      mail($empfaenger, $betreff, $text, $extra); 
irgendwie wird bei extra das \n nicht dargestellt, naja darum gehts ja auch nicht, ist das soweit sicher, oder könnte man das in irgendeiner weise immer noch missbrauchen?

mfg Krel

Geändert von krel (14-11-2006 um 20:59 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 14-11-2006, 21:09
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard Re: Mail Versand so sicher?

Ist womöglich nicht sicher!

Rückwärts aufgedröselt:
mail($empfaenger, $betreff, ...);
$betreff = $name." möchte sich registrieren";
function maile($name, ...)
maile($_POST['Name'], ...);

Gib mal als Mannschaftsnamen "\r\nBcc: foo@example\r\nX-baz: " ein - natürlich mit einer (deiner) echten Mailadresse und schau was passiert.
Mit Zitat antworten
  #3 (permalink)  
Alt 14-11-2006, 21:13
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

naja das passt da schon nicht rein, weil das Feld auf 20 Zeichen begrenzt ist aber ich glaub ich weiß was du meinst. Wäre das Problem ausgemerzt, wenn ich vorher prüfe ob nl2br($name)==$name ist? Oder muss ich noch mehr pruefen?

mfg
Mit Zitat antworten
  #4 (permalink)  
Alt 14-11-2006, 21:29
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Und wenn der Vergleich false liefert, was dann? Willst du die Mail dann nicht verschicken? Vielleicht hat jemand seinen Namen irgendwoher ins Feld kopiert und da war zufällig ein \n drin.

Da $_POST['name'] Bestandteil des Subject werden soll und dieses per RFC keinen Zeilenumbruch enthalten kann, kannst du einfach mit str_replace() alle \n entfernen.

Oh Moment, jetzt sehe ich erst, dass du $name auch im From-Header verbaust. Und $email auch! Das geht natürlich auch nicht ungeprüft.

Btw: Wozu schickst du dir selbst den MD5-Hash des Passworts? Damit kannst du doch überhaupt nichts anfangen oder?
Mit Zitat antworten
  #5 (permalink)  
Alt 14-11-2006, 21:34
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von krel
naja das passt da schon nicht rein, weil das Feld auf 20 Zeichen begrenzt ist
Das interessiert niemanden, der dein Script zum Spammen benutzen will.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #6 (permalink)  
Alt 14-11-2006, 21:38
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wenn es false liefert, kann ich ihn darauf ja auch hinweisen und ihn zurückleiten, so wie ich es bei anderen Fehlern auch mache. Naja aber du meinst, ich soll jetzt aus $email und $name die \n entfernen. Ich weiß nämlich noch nicht so direkt worauf ich wirklich achten muss bei sowas, hab zwar auch schon nach gegoogelt, und nichts anständiges gefunden.. naja oder das falsche gesucht..

Zum Passwort ja das ist so´ne Sache, wenn die Registrierung des Useres geglückt ist, wird noch nichts in die Datenbank geschrieben sondern es wird ein Link generiert :
PHP-Code:
<a href="test.de/php/fahrtenbuch/registrieren.php?
action=reg&name=$name&typ=$typ&email=$email&pw=$pw\"> 
auf den kann ich einfach klicken, das kann ich dann nochmal überprüfen und mittels eingabe meines PWs kann ich die Sachen dann in die Datenbank schreiben. Ist wahrscheinlich auch nicht die beste Lösung, aber mir ist sonsts nichts eingefallen, wie ich die Sachen noch weiter gespeichert halten soll, ohne sie in ne Datei zu speichern..

mfg
Mit Zitat antworten
  #7 (permalink)  
Alt 14-11-2006, 22:43
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Das ist keine Antwort auf meine Frage: Wozu schickst du dir den Hash?

http://google.com/&q=php+mail+injection

Übrigens könntest du die Daten auch gleich in die DB schreiben und erst durch Klick auf den Link wird ein Flag gesetzt, ohne das die Daten nicht "öffentlich" sind.
Mit Zitat antworten
  #8 (permalink)  
Alt 14-11-2006, 23:21
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

naja ich will ja nicht das PW sehen, was die sich ausgesucht haben, wird doch eh so in die DB geschrieben.Oder hab ich deine Frage noch immer falsch verstanden?
mit den google ergebnissen werd ich mich morgen weiter beschäftigen, für heute ist erstmal schluss. Ich geh ins Bett..

mfg
Mit Zitat antworten
  #9 (permalink)  
Alt 14-11-2006, 23:40
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
naja ich will ja nicht das PW sehen, was die sich ausgesucht haben, wird doch eh so in die DB geschrieben.Oder hab ich deine Frage noch immer falsch verstanden?
Vermutlich schon. Denn was bringt es wenn du dem User einen md5 Hash seines Passwortes zuschickst ? Wenn er versucht diesen Wert als PW beim Login anzugeben, dann wird er eh nicht reinkommen. Wenn du dem User schon das PW zuschickst (sozusagen als Bestätigung der Registrierung) dann würde es für den User mehr Sinn machen, wenn er das PW im Klartext bekommt.
Nur beim Eintrag in die DB speicherst du das PW besser nicht als Klartext sondern als md5 Hash.

Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #10 (permalink)  
Alt 15-11-2006, 01:06
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von jahlives
Denn was bringt es wenn du dem User einen md5 Hash seines Passwortes zuschickst ?
Macht er nicht. Er schickt es sich selbst. Insofern korrekt, dass er sich das PW nicht im Klartext zeigen läßt. Aber gleichzeitig auch völlig überflüssig, denn dem Hash kann niemand eine sinnvolle Information abgewinnen.

Ist aber auch egal. Hat er halt ein paar Byte mehr in seiner Inbox. Zur eigentlichen Frage nach der Sicherheit des Scripts: Wenn du morgen gegoogelt, gelesen und gefixt hast, kannst du es gern nochmal posten. Obiger Schnipsel ist nach den Hinweisen soweit okay.

Geändert von onemorenerd (15-11-2006 um 01:09 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 15-11-2006, 19:42
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nabend

so hab jetzt n bisschen was gelesen und naja nicht wirklich alles verstanden, liegt wahrscheinlich einfach daran, dass ich heut nicht ganz auf der Höhe bin...
reicht folgende Funktion aus, oder sollte man einfach radikal alle "\n" und "\r" entfernen?
PHP-Code:
function valid_input($name,$email){
        return(
strpos($name,"\r\n")>|| strpos($name,"\n")>||strpos($email,"\r\n")>|| strpos($email,"\n")>0);
    } 
Also ich rufe die Funktion auf und wenn ich true zurückbekomme, brech ich einfach das Script ab und gib ne Fehlermeldung aus.
Achja was mich noch n bisschen verwundert: wenn ich das mal ausgebe, was in $_POST['Name'] stand, wenn ich nen \n eingebaut hat, dass er mir nen \\n ausgibt, liegt das an dem escapen von PHP?

mfg Krel
Mit Zitat antworten
  #12 (permalink)  
Alt 15-11-2006, 20:48
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von krel
Achja was mich noch n bisschen verwundert: wenn ich das mal ausgebe, was in $_POST['Name'] stand, wenn ich nen \n eingebaut hat,
Wenn du in einem Formularfeld die zwei Zeichen \n eingibst, dann bleiben das die zwei Zeichen \ und n, das ist deshalb noch kein Zeilenumbruch.
Zitat:
dass er mir nen \\n ausgibt, liegt das an dem escapen von PHP?
Ja, genauer magic_quotes_gpc.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #13 (permalink)  
Alt 15-11-2006, 21:53
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Meine Frage ist aber, ist das jetzt sicher, oder muss ich noch mehr machen?
Mit Zitat antworten
  #14 (permalink)  
Alt 15-11-2006, 23:57
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
function valid_input($name,$email){
    if(
strpos($name,"\r\n") !== false || strpos($email,"\r\n") !== false){
        return 
false;
    }else{
        return 
true;
   }

Bei strpos() ist es besser explizit auf den Boolean Type zu prüfen. Denn wenn die Zeichenkette mit einem \r\n beginnt, dann würde strpos() 0 zurückgeben, was aber nicht heisst, dass nix gefunden wurde, sondern dass der Treffer an Position 0 steht. Kommt der Suchstring nicht vor dann gibt die Fkt ein false zurück. Und Rückgaben von Boolean Typen solltest du immer mit === oder !== prüfen, sonst könnte eine 0 als Boolean false gewertet werden.
Ich würde nichts desto trotz eine Fkt bauen die einfach alle Zeilenumbrüche killt z.B.
PHP-Code:
function killNewLines($string){
    return 
str_replace(array("\r\n","\n"),'',$string);

Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:11 Uhr.