php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.11.2006, 23:07  
Neuer Benutzer
 
Registriert seit: 26.11.2006
Beiträge: 8
xarok
Standard Spamversand unterbinden

Hallo zusammen, ich habe ein Formular auf meiner Homepage. Angeblich soll über dieses Spam verschickt werden und zwar nicht an mich, sondern an 60 andere eMailadressen. Daher meine Fragen

1. Ist das mit dem Script möglich?
2. Falls ja, was muss ich noch machen, damit es mehr oder minder sicherer ist?
3. Könnte es an Sicherheitslücken beim Hoster liegen? Denn ich benutze dieses Script auch bei anderen Homepages (schon seit 3 Jahren), die bei anderen Hoster liegen und dort gab es bis lang keine Probleme.

Für eure Hilfe bin ich sehr dankbar.

PHP-Code:
<?php
$mail
=1;
if (
$_POST["firma"] == "") { $result=0; }
if (
$_POST["vorname"] == "") { $result=0; }
if (
$_POST["name"] == "") { $result=0; }
if (
$_POST["strasse"] == "") { $result=0; }
if (
$_POST["plz"] == "") { $result=0; }
if (
$_POST["ort"] == "") { $result=0; }
if (
$_POST["land"] == "") { $result=0; }
if (
$_POST["email"] == "") { $mail=0; }

if (
$mail == 1){
    
$head "Content-Type: text/plain; charset=iso-8859-1\n";
    
$head .= "From: <".$_POST["email"].">\n";
    
$head .= "X-Sender-IP: ".$_SERVER["REMOTE_ADDR"]."\n";
    
$head .= "Reply-To: ".$_POST["email"]."\n";
    
$head .= "Return-Path: ".$_POST["email"]."\n";
    
    
$body "Firma: ".$_POST["firma"]."\n";
    
$body .= "Anrede: ".$_POST["anrede"]."\n";
    
$body .= "Vorname: ".$_POST["vorname"]."\n";
    
$body .= "Name: ".$_POST["name"]."\n";
    
$body .= "Strasse: ".$_POST["strasse"]."\n\n";
    
$body .= "PLZ / Ort: ".$_POST["plz"]." ".$_POST["ort"]."\n";
    
$body .= "Land: ".$_POST["land"]."\n\n";
    
$body .= "Telefon: ".$_POST["telefon"]."\n";
    
$body .= "Telefax: ".$_POST["telefax"]."\n";
    
$body .= "E-Mail: ".$_POST["email"]."\n";
    
$body .= "Internet: ".$_POST["internet"]."\n\n";
    
$body .= "Format: ".$_POST["format"]."\n";
    
    
$subject "eMail\n";
        
    @
mail("example@example.tld"$subject$body$head);
    
$success 1;
}
elseif (
$mail == 0) {    $success 0; }

?>
xarok ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.11.2006, 04:19  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Du solltest dem Sender nicht so viele Recht geben im $head herum zu fuschen ^^

Bin grad etwas raus aus PHP, aber wenn er im $_POST['email'] noch einzelne Blindcopies oder Copies einsetzt, dann wird dass eben an die auch verschickt ^^

Du solltest alles prüfen, was reinkommt

Ich betone das gerne wieder: Mein alter Informatik-Lehrer sagte immer "Alles was von draußen kommt ist erstmal schlecht und feindlich!". Also prüfen, ob es korrektes Format hat
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 27.11.2006, 07:42  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 642
kid01 befindet sich auf einem aufstrebenden Ast
kid01 eine Nachricht über Skype™ schicken
Standard

fehlt bei den script was?

Ich stolper grad über die if abfrage
if ($mail == 1){
in zeile 2 setzt du $mail doch auf 1
Ich würde nie ne "angeschaltete" Variabel ausschalten. Eher andersrum!

Kannst du die vielen ifs nich schon im formular per javascript prüfen?
kid01 ist offline  
Alt 27.11.2006, 09:16  
Neuer Benutzer
 
Registriert seit: 26.11.2006
Beiträge: 8
xarok
Standard

Danke für eure Antworten

1. Die Variable ist nun beim Start ausgeschaltet
2. $_POST["email"] ist auf 50 Zeichen reduziert (vielleicht übertrieben, fiel mir aber nichts besseres ein)
3. mit RegExp wird die Gültigkeit der eMail überprüft.

Gibt es weitere Verbesserungsvorschläge?

PHP-Code:
<?php
$mail
=0;
if (
$_POST["firma"] != "" && $_POST["vorname"] != "" && $_POST["name"] != "" && $_POST["name"] != "" && $_POST["strasse"] != "" && $_POST["plz"] != "" && $_POST["ort"] != "" && $_POST["land"] != "" && $_POST["email"] != ""){ 
  
$mail=1;
}

$_POST["email"] = substr($_POST["email"], 0,50);

$regex "/^([a-zA-Z0-9._%-]+@";
$regex .= "[a-zA-Z0-9._%-]+\.[A-Za-z]{2,4})$/";
if(
preg_match($regex$_POST["email"])){
  
$mail=1;
}

if (
$mail == 1){
    
$head "Content-Type: text/plain; charset=iso-8859-1\n";
    
$head .= "From: <".$_POST["email"].">\n";
    
$head .= "Reply-To: ".$_POST["email"]."\n";
    
$head .= "Return-Path: ".$_POST["email"]."\n";
    
    
$body "Firma: ".$_POST["firma"]."\n";
    
$body .= "Anrede: ".$_POST["anrede"]."\n";
    
$body .= "Vorname: ".$_POST["vorname"]."\n";
    
$body .= "Name: ".$_POST["name"]."\n";
    
$body .= "Strasse: ".$_POST["strasse"]."\n\n";
    
$body .= "PLZ / Ort: ".$_POST["plz"]." ".$_POST["ort"]."\n";
    
$body .= "Land: ".$_POST["land"]."\n\n";
    
$body .= "Telefon: ".$_POST["telefon"]."\n";
    
$body .= "Telefax: ".$_POST["telefax"]."\n";
    
$body .= "E-Mail: ".$_POST["email"]."\n";
    
$body .= "Internet: ".$_POST["internet"]."\n\n";
    
$body .= "Format: ".$_POST["format"]."\n";
    
    
$subject "Newsletter-Anmeldung\n";
        
    @
mail("example@examle.tld"$subject$body$head);
    
$success 1;
}
elseif (
$mail == 0) {    $success 0; }

?>
xarok ist offline  
Alt 27.11.2006, 09:45  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

http://forum.developers-guide.net/showthread.php?t=688
durchlesen und schaun was man da noch machen könnte.

du nimmst einfach nur die ersten 50 Zeichen ??? Mach doch lieber so das du die Länge des Strings checkst ... ????

Weiterhin solltest du mal error_reporting(E_ALL); an den anfang setzen und schaun das du die Warnings alle raus bekommst.

Schau dir mal die Funktion: empty() an.

Ausserdem evtl. schaun ob du nicht doch lieber die phpmailer Klasse benutzt:
http://phpmailer.sourceforge.net/

Prüfst du was in den Post Daten steht ?? Oder kann ich dort einfügen was ich will
M3g4Star ist offline  
Alt 27.11.2006, 12:59  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von kid01
fehlt bei den script was?

Ich stolper grad über die if abfrage
if ($mail == 1){
in zeile 2 setzt du $mail doch auf 1
Ich würde nie ne "angeschaltete" Variabel ausschalten. Eher andersrum!

Kannst du die vielen ifs nich schon im formular per javascript prüfen?
Ansich ist es egal ob die Variable "an" ist und dann später "aus" geschaltet wird oder ob sie "aus" ist und irgendwann "an" geschaltet wird. Ist doch nur ne Definitionssache und wenn es richtig programmiert ist egal.
Aber ansich programmiere ich auch nach der Art "alles ist falsch bis ich gecheckt hab ob es doch richtig ist" und nicht nach "alles ist richtig bis ich einen Fehler finde".

Genauso sollten die vielen "if" Abfragen schon im PHP Code stehen da JavaScript immer umgehen werden kann! Eine Fehlerabfrage mit JS nutzt nichts, in PHP muss unbedingt nochmal geprüft werden.
Man kann zwar mit JS teilweise die Userfreundlichkeit erhöhen aber ne schöne Fehlermeldung mit eingefärbter Beschreibung des Feldes ist es meiner Meinung nach einfacher den Fehler zu finden.
Flor1an ist offline  
Alt 29.11.2006, 04:07  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

zum thema email injection
nikosch ist offline  
Alt 29.11.2006, 09:09  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von xarok
Danke für eure Antworten

1. Die Variable ist nun beim Start ausgeschaltet
PHP-Code:
<?php
$mail
=0;
if (
$_POST["firma"] != "" && $_POST["vorname"] != "" && $_POST["name"] != "" && $_POST["name"] != "" && $_POST["strasse"] != "" && $_POST["plz"] != "" && $_POST["ort"] != "" && $_POST["land"] != "" && $_POST["email"] != ""){ 
  
$mail=1;
}

$_POST["email"] = substr($_POST["email"], 0,50);

$regex "/^([a-zA-Z0-9._%-]+@";
$regex .= "[a-zA-Z0-9._%-]+\.[A-Za-z]{2,4})$/";
if(
preg_match($regex$_POST["email"])){
  
$mail=1;
}
?>
1. Die Super-Globals $_POST werden von vielen als Read-Only bezeichnet. PHP schreibt das zwar nicht vor, es wäre aber doch besserer Programmierstil.

2. Egal was in Deiner ersten Prüfung rauskommt, wird danach in der zweiten Prüfung $mail doch noch auf 1 gesetzt, wenn die EMail-Adresse passt.
Auch wenn Du ganz oben $mail mal auf 0 setzt, musst Du damit rechnen, dass sie an dieser Stelle auf 1 steht. Somit musst Du doch wieder auf 0 setzen, wenn Du einen Fehler findest.
Insofern war Dein erste Ansatz, das Ding gleich auf 1 zu setzen und dann der Reihe nach bei jeder Prüfung evtl. auf 0 zurückzusetzen, doch deutlich konsequenter.

3. Bei Deinem ersten Posting verstehe ich nicht ganz, warum am Anfang so oft $result auf 0 gesetzt wird. Das hätte da wohl auch schon $mail sein sollen. Zumindest ist in Deiner überartbeitetn Version kein $result mehr zu finden.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 01.12.2006, 14:40  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 243
mAy^daY
Standard

Noch ein kleiner Hinweis, Header sollten durch \r\n getrennt werden.

Zitat:
[...]
Weitere Headerzeilen sind durch \r\n zu trennen.
Quelle: http://faq-phpfriend.de/q/q-mail-absender.html
mAy^daY ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
spam versand unterbinden, spam versand

Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.