Phil: Kontaktformular @ wird nicht erkannt

Ich habe ein Problem,
meine Kontaktseite lässt mich kein @ eingeben (ALT GR + Q bewegt nichts..).
Basierend auf einer index.html werden alle Daten aus .xml Files gezogen. UTF-Encoding und PHP eigentlich alles sauber. Vielleicht liegt es an der Tastatur Language.

Vielen Dank für jede Hilfe,

hier der code:

--------------PHP-------------
<?php
$recipient = $_GET['recipient'];
$Namer = $_GET['name'];
$email = $_GET['email'];
$comment = $_GET['comment'];
$subject = $_GET['subject'];
$notes = stripcslashes($notes);
$message = " Message: $comment \r \n From: $name  \r \n Reply to: $email";
mail($recipient, $subject, $message);
?>
success
--------------PHP-------------

--------------XML-------------
<?xml version="1.0" encoding="UTF-8"?>

<content>

<main\_heading><![CDATA[Kontakt]]></main\_heading>  
  
<column template="white\_box" width="520" height="350" top\_margin="10" left\_margin="0" left\_padding="25" right\_padding="25" nav\_horizontal\_buffer="30">  
	<item type="info" left\_padding="0">  
		<heading><![CDATA[B&#252;ro]]></heading>  
		<item\_content>  
			<element type="text" width="" left\_margin="0"><![CDATA[<span class="wb\_h1">Meine Headline..</span>  

Adresse...

<a href="mailto:info@trillefitz.de">mail@trillefitz.de</a>]]></element>
</item_content>
</item>
</column>

<column template="contact\_form" width="350" top\_margin="10" left\_margin="30" left\_padding="0" right\_padding="0">  
	<heading><![CDATA[]]></heading>  
	<send\_button><![CDATA[abschicken]]></send\_button>  
	<form>  
		<element type="text">  
			<label><![CDATA[Name]]></label>  
			<error><![CDATA[Bitte geben Sie einen Namen an]]></error>  
		</element>  
		<element type="email">  
			<label><![CDATA[Email]]></label>  
			<error><![CDATA[Bitte geben Sie eine g&#252;ltige Emailadresse ein]]></error>  
		</element>  
		<element type="multi">  
			<label><![CDATA[Nachricht]]></label>  
			<error><![CDATA[Bitte geben Sie eine Nachricht ein]]></error>  
		</element>  
	</form>  
	<sent\_feedback><![CDATA[Ihre Nachricht wurde erfolgreich an mich &#252;bermittelt. Ich bearbeite Ihre Anfrage so schnell wie m&#246;glich  

Dankesch&#246;n]]></sent_feedback>
</column>

</content> <!-- end content -->

  1. Hallo,

    meine Kontaktseite lässt mich kein @ eingeben (ALT GR + Q bewegt nichts..).
    Basierend auf einer index.html werden alle Daten aus .xml Files gezogen. UTF-Encoding und PHP eigentlich alles sauber. Vielleicht liegt es an der Tastatur Language.

    ganz bestimmt liegt es an den Tastatureinstellungen - also an der Konfiguration deines Betriebssystems oder der Anwendung, die du verwendest. Der gezeigte PHP- oder XML-Code kann jedenfalls nichts dafür.

    Aber warum machst du solche Krücken:

    <heading><![CDATA[B&#252;ro]]></heading>
    <error><![CDATA[Bitte geben Sie eine g&#252;ltige Emailadresse ein]]></error>
    <sent_feedback><![CDATA[Ihre Nachricht wurde erfolgreich an mich &#252;bermittelt. Ich bearbeite Ihre Anfrage so schnell wie m&#246;glich
    Dankesch&#246;n]]></sent_feedback>

    Wenn du sowieso UTF-8 verwendest, also eine Codierung, die nahezu alle erdenklichen Zeichen in Klartext darstellen kann, warum dann numerische Referenzen? Damit's schwerer zu lesen ist?

    So long,
     Martin

    --
    Du kannst dem Leben nicht mehr Tage geben.
    Aber dem Tag mehr Leben.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Hallo,

    meine Kontaktseite lässt mich kein @ eingeben (ALT GR + Q bewegt nichts..).
    hier der code:

    ich sehe hier

    - fehlende Behandlung von Benutzereingaben
     - überflüssiges Umkopieren (oft gesehen, dennoch überflüssig)
     - nicht nachvollziehbarer Einsatz von stripcslashes()
     - Leerzeichen zwischen \r und \n, die vermutlich nicht beabsichtigt sind

    => eine potentielle Spamschleuder, die für Header-Injektion anfällig ist.

    <?php

    $recipient = $_GET['recipient'];
    $Namer = $_GET['name'];
    $email = $_GET['email'];
    $comment = $_GET['comment'];
    $subject = $_GET['subject'];
    $notes = stripcslashes($notes);
    $message = " Message: $comment \r \n From: $name  \r \n Reply to: $email";
    mail($recipient, $subject, $message);
    ?>

    
    > success  
      
    zum XML hat sich Martin schon geäußert. Wie Martin ebenfalls schrieb, hat der gezeigte Code nichts mit der fehlenden Eingabemöglichkeit für "@" zu tun.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Hi!

      => eine potentielle Spamschleuder, die für Header-Injektion anfällig ist.

      Das nun gerade nicht, denn ...

      $message = " Message: $comment \r \n From: $name  \r \n Reply to: $email";  
      mail($recipient, $subject, $message);  
      

      ... $name und $email landen im Nachrichtentext. Für eine Header-Injection eignet sich nur der hier nicht genutzte vierte Parameter von mail().

      Lo!

      1. Hallo,

        mail($recipient, $subject, $message);  
        

        ... $name und $email landen im Nachrichtentext. Für eine Header-Injection eignet sich nur der hier nicht genutzte vierte Parameter von mail().

        nein, ebensogut der erste (hier $recipient), der in Phils Beispiel auch nur durch direktes Umkopieren aus $_GET['recipient'] gebildet wird. Folglich kann ich als Nutzer des Formulars sowohl den primären Empfänger frei bestimmen, als auch zusätzliche Header einflechten. Lass $_GET['recipient'] zum Beispiel den Wert
         "me@example.org,you@example.org\r\nspam1@other.@example.org,spam2@yetanother.example.org"
        haben ...

        Ciao,
         Martin

        --
        F: Wer ist der Herrscher über Wasser, Wind und Wellen?
        A: Der Friseur.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hi!

          mail($recipient, $subject, $message);  
          

          ... $name und $email landen im Nachrichtentext. Für eine Header-Injection eignet sich nur der hier nicht genutzte vierte Parameter von mail().
          nein, ebensogut der erste (hier $recipient), der in Phils Beispiel auch nur durch direktes Umkopieren aus $_GET['recipient'] gebildet wird. Folglich kann ich als Nutzer des Formulars sowohl den primären Empfänger frei bestimmen, als auch zusätzliche Header einflechten.

          Der zweite Teil ist nicht richtig, meine Aussage bleibt gültig. Steuerzeichen im Parameter $to (hier: $recipient) werden von der Funktion mail() gegen Leerzeichen ausgetauscht. Man kann zwar eine Empfängerliste angeben, aber keine Header-Injection anstellen.

          PHP 5.3.3 mail.c Zeilen 132 bis 152, besonders Zeile 141. Es folgt dann die Subject-Behandlung, da werden auf gleiche Weise die Steuerzeichen entschärft. ($message kommt nach den Header-abschließenden doppelten \n und ist somit gar nicht Header-relevant.)

          Lass $_GET['recipient'] zum Beispiel den Wert
          "me@example.org,you@example.org\r\nspam1@other.@example.org,spam2@yetanother.example.org"
          haben ...

          Dann wird er als "me@example.org,you@example.org  spam1@other.@example.org,spam2@yetanother.example.org" in das To:-Feld eingefügt.

          Lo!

          1. Hallo,

            Folglich kann ich als Nutzer des Formulars sowohl den primären Empfänger frei bestimmen, als auch zusätzliche Header einflechten.
            Der zweite Teil ist nicht richtig, meine Aussage bleibt gültig. Steuerzeichen im Parameter $to (hier: $recipient) werden von der Funktion mail() gegen Leerzeichen ausgetauscht. Man kann zwar eine Empfängerliste angeben, aber keine Header-Injection anstellen.

            PHP 5.3.3 mail.c Zeilen 132 bis 152, besonders Zeile 141. Es folgt dann die Subject-Behandlung, da werden auf gleiche Weise die Steuerzeichen entschärft. ($message kommt nach den Header-abschließenden doppelten \n und ist somit gar nicht Header-relevant.)

            das ist mir auch neu, danke. Lässt sich irgendwie rausfinden, seit welcher PHP-Version das drin ist? Ich habe nämlich schon mehrmals gelesen (auch hier im Forum), dass auf ebendiese Weise sowohl im Empfänger als auch im Subject das Einschleusen zusätzlicher Header möglich sei. War diese Warnung vielleicht bei einer älteren Version berechtigt?

            Ciao,
             Martin

            --
            Lache, und die Welt wird mit dir lachen.
            Schnarche, und du schläfst allein.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Hi!

              Lässt sich irgendwie rausfinden, seit welcher PHP-Version das drin ist?

              Ja. Gehe zu http://svn.php.net/viewvc/php/php-src/tags/, such dir eine PHP-Version (Verzeichnis php_x_...), öffne nacheinander die Verzeichnisse ext und standard, such dir Datei mail.c und klick auf die Revisionsnummer.

              War diese Warnung vielleicht bei einer älteren Version berechtigt?

              Wenn ich das richtig deute, dann seit irgendwo zwischen 4.2.0 und 4.3.0 nicht mehr.

              Lo!

      2. Hallo dedlfix,

        => eine potentielle Spamschleuder, die für Header-Injektion anfällig ist.

        Das nun gerade nicht, denn ...

        $message = " Message: $comment \r \n From: $name  \r \n Reply to: $email";  
        mail($recipient, $subject, $message);  
        

        ... $name und $email landen im Nachrichtentext. Für eine Header-Injection eignet sich nur der hier nicht genutzte vierte Parameter von mail().

        Stimmt. Header-Injection ist in der Tat nicht möglich. Spam-Versand aber doch, da der Empfänger (genauer die Empfängerliste) und der Inhalt vom Benutzer vorgegeben werden können.

        Ich vermute, dass die Empfängeradresse im Originalkontaktformular in einem versteckten Eingabefeld steht. Sie sollte nur im verarbeitenden Skript stehen ...

        Freundliche Grüße

        Vinzenz

        1. Moin!

          Ich vermute, dass die Empfängeradresse im Originalkontaktformular in einem versteckten Eingabefeld steht.

          $recipient = $_GET['recipient'];

          Du hast absolut recht, es ist definitiv so.

          Sie sollte nur im verarbeitenden Skript stehen ...

          Ich wage einen kleinen Einwand und einen konkreten Vorschlag: Nicht im Programm, aber in einer geeigneten Weise auf dem Server gespeichert und z.B. mit $GLOBALS['config']=[link:http://php.net/manual/en/function.parse-ini-file.php@title=parse_ini_file]('config.ini') gelesen sollte sie werden, denn es handelt sich um einen volatilen Parameter, also Daten.

          mit:
          mailempfaenger = "empfaenger@testserver.invalid"

          in der config.ini

          hat man dann einen hübschen Array mit dem Element $GLOBALS['config']['mailempfaenger'] zur Verfügung und kann diese ohne weitere Umstände auch in Funktionen nutzen.

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix

    2. Ich habe leider wenig Ahnung von PHP und auch von XML, daher verstehe ich Parameter Kommentare leider nicht.
      Kann mir denn jemand sagen was genau ich ändern müsste? Oder was hier z.B. unnötig verwendet wird? :(
      Ich möchte nur das man das "@" eingeben kann und die Email bei mir - 1 Empfänger - ankommt.

      Vielen Dank für alle Bemühungen,

      Beste Grüße
      Phil

      1. Hi!

        Ich habe leider wenig Ahnung von PHP und auch von XML, daher verstehe ich Parameter Kommentare leider nicht.

        Du hast noch eine Menge anderer Fehler, die ebenfalls zu beseitigen wären. Der Dialog wegen der mail()-Parameter ist in deinem Fall erstmal nicht weiter wichtig, außer dem Parameter für den Rezipienten. Dem kann ein man alles mögliche übergeben, also auch eine schöne lange Liste mit Spamopfern-Adressen. Bist du sicher, dass der flexibel vom Anwender eingegeben werden können muss? Für einen feststehenden Empfänger sollte die Adresse fest im Script stehen.

        Kann mir denn jemand sagen was genau ich ändern müsste? Oder was hier z.B. unnötig verwendet wird? :(

        Dein eigentliches Problem mit dem @ ist nicht derzeit nicht beantwortbar, weil du nicht nachvollziehbar beschreibst, was konkret wo passiert oder auch nicht. Der XML-Code ist nutzlos, wenn du nicht dazu erzählst, wie der verwendet wird. Das im Ausgangsposting erwähnte Kontaktformular ist auch nicht über soo.de erreichbar. Wenn die angegebene Email-Adresse nicht deine ist, dann ist die nutzlos und du solltest das Feld lieber unausgefüllt lassen.

        Die anderen von Vinzenz aufgezählten Punkte ergeben für sich allein schon eine Menge Erklärungsbedarf. Willst du die auch noch geklärt bekommen?

        Lo!

        1. Hi dedlfix!

          Okay, hab ich verstanden.
          Ich denke ich werde es vollkommen anders lösen und jemanden zu Rate ziehen.
          Vielen Dank für jede Hilfe

          Beste Grüße
          Phil

          1. Hi,

            Ich denke ich werde es vollkommen anders lösen und jemanden zu Rate ziehen.

            das kannst du natürlich gern tun; vielleicht hätte dir aber auch hier jemand helfen können, wenn wir deine Software-Umgebung in etwa kennen würden. Aber dazu möchtest du ja anscheinend nichts sagen.

            Ciao,
             Martin

            --
            Wer barfuß geht, dem kann man nicht die Schuld in die Schuhe schieben.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(