php script Problem.........

Ich habe hier ein kleines mail script geschrieben das mit PHP 4
funktioniert aber nicht mit PHP 5, da sagt mit das script immer "ein
Fehler ist aufgetreten". Wo liegt der Fehler?

--------------------------------

<HTML>

<style type="text/css">
body {
margin-top:5px;
color:#FFFFFF;
background-color:#000000;
font-size:0.9em;
}
</style>

<?php

$error=false;

if($abschicken)
{
if(empty($name))
{
echo "Haben Sie denn keinen Namen bei Ihrer Geburt von Ihren
Eltern bekommen?<br><br>";
$error=true;
}
if(empty($email))
{
echo "Haben Sie auch eine gültige E-Mail Adresse, damit ich Ihnen
evtl. antworten kann?<br><br>";
$error=true;
}
if(empty($text))
{
echo "Was soll ich denn mit einer leeren Nachricht
anfangen?<br><br>";
$error=true;
}
if($error==true)
{
echo"<br><br>Bitte Benutzen Sie den Rückwärts Button Ihres
Browsers
und beheben Sie die Fehler!";
}
else
{
$ip=getenv("REMOTE_ADDR");
$host=gethostbyaddr($_SERVER['REMOTE_ADDR']);
$datum=date("d.m.Y");
$zeit=date("H:i:s");

$mailnachricht.="\nIP : $ip";

$mailnachricht.="\nHost : $host";

$mailnachricht.="\nName : $name";

$mailnachricht.="\nE-Mail : $email";

$mailnachricht.="\nDatum : $datum";

$mailnachricht.="\nZeit : $zeit";

$mailnachricht.="\n\n$text";

$mailbetreff="Kontakt : $auswahl";

mail("webmaster [at] domain.de", $mailbetreff, $mailnachricht,"From:
$email");
echo "Vielen Dank für Ihre eMail,
folgende Daten wurden übermittelt.<br><br>";
echo "<b>IP Adresse :</b> $ip<br>";
echo "<b>Host :</b> $host<br>";
echo "<b>Name :</b> $name<br>";
echo "<b>E-mail :</b> $email<br>";
echo "<b>Datum :</b> $datum<br><b>Zeit :</b> $zeit<br><br>";
}
}
else
{
echo "Ein Fehler ist aufgetreten.";
}

?>

</HTML>

--
http://www.aschershain.de
Heiko Ernst [ So, 13 Januar 2008 15:03 ] [ ID #1906788 ]

Re: php script Problem.........

Heiko Ernst schrieb:
> Ich habe hier ein kleines mail script geschrieben das mit PHP 4
> funktioniert aber nicht mit PHP 5, da sagt mit das script immer "ein
> Fehler ist aufgetreten". Wo liegt der Fehler?

11.1. Wie übergebe ich Variablen aus einem Formular an ein PHP-Script?
http://www.php-faq.de/q/q-formular-variablen.html

11.20. Warum funktionieren meine Formulare nicht?
http://www.php-faq.de/q/q-formular-register-globals.html

6.1. Welche Variablenarten gibt es in PHP und wie greife ich auf sie zu?
http://www.php-faq.de/q/q-php-variablen.html

--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
dafox [ So, 13 Januar 2008 15:12 ] [ ID #1906789 ]

Re: php script Problem.........

Heiko Ernst schrieb:
> Ich habe hier ein kleines mail script geschrieben das mit PHP 4
> funktioniert aber nicht mit PHP 5, da sagt mit das script immer "ein
> Fehler ist aufgetreten". Wo liegt der Fehler?
> ...
> if($abschicken)
> {
> ...
> }
> else
> {
> echo "Ein Fehler ist aufgetreten.";
> }

Wahrscheinlich ist $abschicken immer false, weil du es nicht initialisierst.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ So, 13 Januar 2008 15:08 ] [ ID #1906790 ]

Re: php script Problem.........

Heiko Ernst schrieb:
> Ich habe hier ein kleines mail script geschrieben das mit PHP 4
> funktioniert aber nicht mit PHP 5, da sagt mit das script immer "ein
> Fehler ist aufgetreten". Wo liegt der Fehler?

Ach, und was ich noch vergessen hab: Dein Formular ist unsicher, also
man kann damit spammen, weil du die importierte Variable $email
ungeprüft in den Header der Nachricht übernimmst.

Spam-Gefahr durch Kontaktformulare
http://www.drweb.de/webmaster/kontakt-formulare.shtml

12.11. Prüfe importierte Parameter. Traue niemandem
http://www.php-faq.de/q/q-sicherheit-parameter.html

12.1. Wie unterscheide ich böse Variablen von guten?
http://www.php-faq.de/q/q-security-variablen.html

--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
dafox [ So, 13 Januar 2008 15:16 ] [ ID #1906792 ]

Re: php script Problem.........

Thomas Hamacher schrieb:

> Ach, und was ich noch vergessen hab: Dein Formular ist unsicher, also
> man kann damit spammen, weil du die importierte Variable $email
> ungeprüft in den Header der Nachricht übernimmst.

Naja, wäre es, wenn es liefe... ;-)

MfG
Niels

--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Niels Braczek [ So, 13 Januar 2008 15:17 ] [ ID #1906794 ]

Re: php script Problem.........

Heiko Ernst schrieb:

>Ich habe hier ein kleines mail script geschrieben das mit PHP 4
>funktioniert aber nicht mit PHP 5, da sagt mit das script immer "ein
>Fehler ist aufgetreten". Wo liegt der Fehler?

Ich möchte als gut verständliche Einführung noch
<http://isys53.informatik.htw-dresden.de/fprdipl/proj-sec/multrus/phpsicherheit.html>
ergänzen.

--
Wolfgang Fellger
Wolfgang Fellger [ So, 13 Januar 2008 15:16 ] [ ID #1906795 ]

Re: php script Problem.........

Heiko Ernst schrieb:

> if($abschicken)

Wo kommt $abschicken her? Dieser Teil fehlt in Deinem Script-Ausschnitt.

Gruß. Claus
Claus Reibenstein [ So, 13 Januar 2008 15:34 ] [ ID #1906797 ]

Re: php script Problem.........

Claus Reibenstein schrieb:
> Heiko Ernst schrieb:

>> if($abschicken)
> Wo kommt $abschicken her? Dieser Teil fehlt in Deinem Script-Ausschnitt.

Das sind importierte Parameter, wie alle anderen globalen Variablen in
dem Code auch. Hast du noch nie ein PHP-Buch gelesen? ;)

--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
dafox [ So, 13 Januar 2008 15:57 ] [ ID #1906798 ]

Re: php script Problem.........

Thomas Hamacher schrieb:
>
> 11.1. Wie übergebe ich Variablen aus einem Formular an ein PHP-Script?
> http://www.php-faq.de/q/q-formular-variablen.html
>

Also bei den if Abfragen habe ich das mit der Variable $_POST gelöst
"IF(empty($_POST[´name´])) das geht aber warum geht damit folgene Zeile
nicht

$mailnachricht.="\nname : $_POST[´name´]";

Da bringt er mir na fehlermeldung, irgendwas mit Sytax fehler.

Mfg de Heiko

--
http://www.aschershain.de
Heiko Ernst [ So, 13 Januar 2008 18:12 ] [ ID #1906804 ]

Re: php script Problem.........

Heiko Ernst schrieb:
> Thomas Hamacher schrieb:
>>
>> 11.1. Wie =C3=BCbergebe ich Variablen aus einem Formular an ein PHP-Sc=
ript?
>> http://www.php-faq.de/q/q-formular-variablen.html
>
> Also bei den if Abfragen habe ich das mit der Variable $_POST gel=C3=B6=
st
> "IF(empty($_POST[=C2=B4name=C2=B4])) das geht

Glaube ich nicht.
IF(empty($_POST['name']))
"ginge" vielleicht.

> aber warum geht damit folgene Zeile
> nicht
>
> $mailnachricht.=3D"\nname : $_POST[=C2=B4name=C2=B4]";
> Da bringt er mir na fehlermeldung, irgendwas mit Sytax fehler.

Syntax-Fehler hei=C3=9Ft: Falsche Rechtschreibung und/oder Zeichensetzung=
=2E
Hier steht, warum das nicht funktioniert:
http://www.php.net/manual/en/language.types.string.php

MfG
Niels

--
| http://www.kolleg.de =C2=B7 Das Portal der Kollegs in Deutschland |=

| http://www.bsds.de =C2=B7 BSDS Braczek Software- und DatenSysteme |=

| Webdesign =C2=B7 Webhosting =C2=B7 e-Commerce =C2=B7 Joomla! Content Ma=
nagement |
------------------------------------------------------------ ------
Niels Braczek [ So, 13 Januar 2008 18:27 ] [ ID #1906806 ]

Re: php script Problem.........

Heiko Ernst schrieb:

> Also bei den if Abfragen habe ich das mit der Variable $_POST gelöst
> "IF(empty($_POST[´name´])) das geht aber warum geht damit folgene Zeile
> nicht
>
> $mailnachricht.="\nname : $_POST[´name´]";
>
> Da bringt er mir na fehlermeldung, irgendwas mit Sytax fehler.

Der "Sytax fehler" - Du meinst sicher "Syntax error" - bezieht sich wohl
eher auf das "IF"-Statement, welches angeblich "geht". Dort stecken
gleich mehrere drin.

Im Übrigen wäre es hilfreich, wenn Du sowohl das gesamte Script, welches
den Fehler produziert, als auch die komplette Fehlermeldung posten
würdest. Besser jedenfalls, als irgendwelche vermurksten (abgetippten)
Codeschnipsel oder Beschreibungen wie "irgendwas mit Sytax fehler".

Gruß. Claus
Claus Reibenstein [ So, 13 Januar 2008 19:14 ] [ ID #1906809 ]

Re: php script Problem.........

Thomas Hamacher schrieb:
>

So, ich habe das Script geändert und nun funktioniert es, wollte blos
noch mal nachfragen ob es noch irgendwelche Sicherheitsbedenken gibt.


------------------------

<HTML>

<style type="text/css">
body {
margin-top:5px;
color:#FFFFFF;
background-color:#000000;
font-size:0.9em;
}
</style>

<?php

$error=false;
$auswahl=$_POST['auswahl'];
$abschicken=$_POST['abschicken'];
$name=$_POST['name'];
$email=preg_replace("/[^a-z0-9
!?:;,.\/_\-=+ [at] #$&\*\(\)]/im","",$_POST['email']);
$email=preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im" ,"",$email);
$text=preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im", "",$_POST['text']);

if($abschicken)
{
if(empty($name))
{
echo "Haben Sie denn keinen Namen bei Ihrer Geburt von Ihren
Eltern bekommen?<br><br>";
$error=true;
}
if(empty($email))
{
echo "Haben Sie auch eine gültige E-Mail Adresse, damit ich Ihnen
evtl. antworten kann?<br><br>";
$error=true;
}
if(empty($text))
{
echo "Was soll ich denn mit einer leeren Nachricht
anfangen?<br><br>";
$error=true;
}
if($error==true)
{
echo"<br><br>Bitte Benutzen Sie den Rückwärts Button Ihres
Browsers
und beheben Sie die Fehler!";
}
else
{
$ip=getenv("REMOTE_ADDR");
$host=gethostbyaddr($_SERVER['REMOTE_ADDR']);
$datum=date("d.m.Y");
$zeit=date("H:i:s");

$mailnachricht.="\nIP : $ip";

$mailnachricht.="\nHost : $host";

$mailnachricht.="\nName : $name";

$mailnachricht.="\nE-Mail : $email";

$mailnachricht.="\nDatum : $datum";

$mailnachricht.="\nZeit : $zeit";

$mailnachricht.="\n\n$text";

$mailbetreff="Kontakt von domain : $auswahl";

mail("webmaster [at] domain.de", $mailbetreff, $mailnachricht,"From:
$email");
echo "Vielen Dank für Ihre eMail,
folgende Daten wurden übermittelt.<br><br>";
echo "<b>IP Adresse :</b> $ip<br>";
echo "<b>Host :</b> $host<br>";
echo "<b>Name :</b> $name<br>";
echo "<b>E-mail :</b> $email<br>";
echo "<b>Datum :</b> $datum<br><b>Zeit :</b> $zeit<br><br>";
}
}
else
{
echo "Ein Fehler ist aufgetreten.";
}

?>

</HTML>


--
http://www.aschershain.de
Heiko Ernst [ So, 13 Januar 2008 19:54 ] [ ID #1906811 ]

Re: php script Problem.........

Heiko Ernst schrieb:

> So, ich habe das Script geändert und nun funktioniert es, wollte blos=

> noch mal nachfragen ob es noch irgendwelche Sicherheitsbedenken gibt.

Ich habe das jetzt nicht im Detail durchgesehen, aber ...

> $email=3Dpreg_replace("/[^a-z0-9
> !?:;,.\/_\-=3D+ [at] #$&\*\(\)]/im","",$_POST['email']);
> $email=3Dpreg_replace("/(content-type:|bcc:|cc:|to:|from:)/i m","",$emai=
l);
> $text=3Dpreg_replace("/(content-type:|bcc:|cc:|to:|from:)/im ","",$_POST=
['text']);

=2E.. das ist nicht sinnvoll. Korrigiere nicht die Daten, sondern hau sie=

dem Anwender um die Ohren. Also

if ( !empty( $_POST['abschicken'] ) ) {
$error =3D false;
if ( !preg_match( ... ) ) {
$error =3D true;
}
...
}
=2E..

MfG
Niels

--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Niels Braczek [ So, 13 Januar 2008 20:25 ] [ ID #1906813 ]

Re: php script Problem.........

Heiko Ernst schrieb:
> So, ich habe das Script geändert und nun funktioniert es, wollte blos
> noch mal nachfragen ob es noch irgendwelche Sicherheitsbedenken gibt.
> ...
> $auswahl=$_POST['auswahl'];
> $abschicken=$_POST['abschicken'];
> $name=$_POST['name'];

vorher prüfen, ob im POST der Index überhaupt enthalten ist, entweder
isset oder empty.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Mo, 14 Januar 2008 09:00 ] [ ID #1907607 ]

Re: php script Problem.........

Christoph Herrmann schrieb:
>
> Heiko Ernst schrieb:
> > So, ich habe das Script geändert und nun funktioniert es, wollte blos
> > noch mal nachfragen ob es noch irgendwelche Sicherheitsbedenken gibt.
> > ...
> > $auswahl=$_POST['auswahl'];
> > $abschicken=$_POST['abschicken'];
> > $name=$_POST['name'];
>
> vorher prüfen, ob im POST der Index überhaupt enthalten ist, entweder
> isset oder empty.

Hmm und wie mach ich das am dümmsten? Ich überprüfe das ja eigendlich
weiter unten.

--
http://www.aschershain.de
Heiko Ernst [ Mo, 14 Januar 2008 11:00 ] [ ID #1907618 ]

Re: php script Problem.........

Heiko Ernst schrieb:
> Hmm und wie mach ich das am dümmsten? Ich überprüfe das ja eigendlich
> weiter unten.

Ob du das unten überprüfst ist unwichtig, wenn es hier oben nicht passt.
Wenn die Werte nicht vorhanden sind bekommst nämlich im Moment NOTICE
Meldungen (wenn diese im error_reporting nicht abgeschaltet sind bzw.
display_errors nicht deaktiviert ist).

Daher überprüfen:
$auswahl = '';
if(isset($_POST['auswahl']))
{
$auswahl = $_POST['auswahl'];
}

usw. für jeden Index.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Mo, 14 Januar 2008 11:35 ] [ ID #1907620 ]

Re: php script Problem.........

Heiko Ernst schrieb:
> Thomas Hamacher schrieb:

Also die Sicherheitslöcher sind jetzt soweit ich das sehe gestopft, wenn
auch unschön. Ich würde das Ding nochmal überarbeiten, so viel ist es ja
nicht. Schau dir dazu mal folgende Artikel an:

27.2. Von HTML zu PHP: Schreibe Formularverarbeitungen in Normalform
http://www.php-faq.de/q/q-stil-normalform.html

Probier das einfach so aufzubauen, dass du am Anfang der Datei den
ganzen PHP-Kram stehen hast und danach dann die HTML-Ausgabe. Dann ist
es von da nur noch ein kleiner Schritt zum trennen von Code und Inhalt.

Ansatz:

<?php
$errors = array();
$pattern = "/^[\w.+-]{1,64}\ [at] [\w.-]{1,255}\.[a-z]{2,6}$/";

if(isset($_POST['abschicken'])) {
if(empty($_POST['email']) || !preg_match($pattern, $_POST['email'])) {
$errors[] = "Ungültige Mailadresse.";
}

// ... weitere überprüfungen

if(count($errors) == 0) {
// Mail senden
mail(...);

// Weiterleiten
header("Location: http://example.org/danke.php");
exit(0);
}
}
?>

<html>
<head>
<title>Kontakt</title>
<style type="text/css">
...
</style>
</head>

<body>
<h1>Kontakt</h1>

<?php if(count($errors) > 0): ?>
<ul>
<?php foreach($errors as $error): ?>
<li><?php echo $error ?></li>
<?php endforeach ?>
</ul>
<?php endif ?>

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" action="post">
<label>Name: <input name="name" value="<?php echo
[at] htmlspecialchars($_POST['name']) ?>"></label>
<label>Mail: <input name="email" value="<?php echo
[at] htmlspecialchars($_POST['email']) ?>"></label>

<input type="submit" name="abschicken" value="Go">
</form>
</body>

</html>

> $error=false;
> $auswahl=$_POST['auswahl'];
> $abschicken=$_POST['abschicken'];
> $name=$_POST['name'];

Das gibt Fehler, wenn das Formular nicht abgesendet wurde. Du musst
entweder überprüfen, ob die Werte existieren (isset()/empty()) oder die
Hinweise mit einem vorangestellten [at] ignorieren.

> $email=preg_replace("/[^a-z0-9
> !?:;,.\/_\-=+ [at] #$&\*\(\)]/im","",$_POST['email']);
> $email=preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im" ,"",$email);
> $text=preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im", "",$_POST['text']);

Ich weiss, das steht so in dem von mir genannten Artikel, aber Niels hat
völlig recht. Anstatt hier den Text zu ersetzen solltest du lieber
überprüfen, dass die Daten das von dir gewünschte Format haben.

Der Text der Nachricht ist egal, da kann eigentlich drin stehen was
will. Du musst hier $_POST['email'] und $_POST['auswahl'] validieren.

Mit der Email-Adresse kannst du es dir einfach machen und einen
regulären Ausdruck wie /^[\w.+-]{1,64}\ [at] [\w.-]{1,255}\.[a-z]{2,6}$/
verwenden. Das erschlägt zwar nicht alle gültigen Adressen und wird ggf.
auch gültige (im Sinne von RFC 822) Adressen zurückweisen. Alternativ
kannst du eine Klasse wie <http://pear.php.net/package/Mail> verwenden,
die die Adresse gemäß dem RFC validiert.

$_POST['auswahl'] kommt - nehme ich an - aus einer Select-Liste. Hier
ist das validieren noch einfacher, da du ja fest definierte Werte hast.
Hier kannst du z.B. mit in_array() testen, ob $auswahl wirklich einen
der vorgegebenen Werte hat.


--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
dafox [ Mo, 14 Januar 2008 13:54 ] [ ID #1907628 ]

Re: php script Problem.........

Christoph Herrmann schrieb:

> Daher überprüfen:
> $auswahl = '';
> if(isset($_POST['auswahl']))
> {
> $auswahl = $_POST['auswahl'];
> }

Oder kürzer:

$auswahl=isset($_POST['auswahl'])?$_POST['auswahl']:'';
Mathias Haimerl [ Di, 15 Januar 2008 13:22 ] [ ID #1908646 ]

Re: php script Problem.........

Mathias Haimerl schrieb:

> $auswahl=isset($_POST['auswahl'])?$_POST['auswahl']:'';

Ich hasse solche gequetschten Statements. Leerzeichen existieren:

$auswahl = isset($_POST['auswahl']) ? $_POST['auswahl'] : '';

Ist doch wesentlich besser zu lesen, oder etwa nicht?

Gruß. Claus
Claus Reibenstein [ Di, 15 Januar 2008 17:22 ] [ ID #1908655 ]
PHP » de.comp.lang.php.misc » php script Problem.........

Vorheriges Thema: 2 Seiten im Cronjob aufrufen
Nächstes Thema: PHP Mail nutzen: Exim4 für Dummies