Gerch2003: HTML-Code per _post oder _get übergeben

Hi Leute,

ich bin gerade dabei mir ein kleines Newslettersystem zu bauen, da wir in der Arbeit regelmäßig Newsletter verschicken und ich die E-Mailadressen alle in einer SQL-Datenbank habe.

Da der Newsletter mit HTML und CSS aufgebaut ist, dachte ich mir du machst ein Formular in welches du den HTML-Code einfügst und dann an das send-Formular übergibst.
Nun habe ich gerade gelesen, dass durch XSS es nicht möglich ist, HTML-Code per _post oder _get zu übergeben.
Teilweise funktioniert es zwar trotzdem, also ich sag mal alles was <table> usw. angeht kommt ohne Probleme an, aber CSS-Code wird nicht übergeben.

Könnte man das ganze irgendwie umgehen und CSS- bzw. HTML-Code zulassen, so dass man ihn trotzdem per _get bzw. _post übergeben kann?

Grüße,
der Gerch

  1. Hallo,

    Könnte man das ganze irgendwie umgehen und CSS- bzw. HTML-Code zulassen, so dass man ihn trotzdem per _get bzw. _post übergeben kann?

    Du solltest diesen Archivthread berücksichtigen, wenn Du die GET-Methode verwenden willst.

    Vor kurzem habe ich folgendes schon einmal geschrieben:

    Es wäre eine gute Idee, Dein Problem etwas genauer zu beschreiben:

    a) Ich verwende folgenden Code (aufs notwendige Minimum gekürzt),
       hier vermutlich die Zeilen mit dem regulären Ausdruck,
    b) habe folgende Eingabedaten {verwendete Eingabedaten},
    c) erhalte folgende Ausgabedaten: {erhaltene Ausgabedaten},
    d) erwarte jedoch diese Daten: {erwartete Ausgabedaten}

    Deine Beschreibung reicht für mich nicht aus, Dein Problem zu verstehen.

    Freundliche Grüße

    Vinzenz

    1. Hey Ho,

      Du solltest diesen Archivthread berücksichtigen, wenn Du die GET-Methode verwenden willst.

      Dass man kein Get verwenden sollte ist wohl klar.
      Abgesehen davon sollte man selbst darauf kommen, dass es zu Problemen führen kann, wenn man 300 Zeilen HTML-Code in eine Variable in die Adresszeile packt.

      Ja, also ich schreibe diese Daten in das Formularfeld:

      <table width="800">  
          <tr>  
          	<td valign="top" style="font-weight:bold;font-size:12px;">1001</td>  
              <td style="font-size:12px;">Beschreibungstext..</td>  
          </tr>  
      </table>
      

      Natürlich ist das auch der selbe Code den ich erwarte.

      Wenn ich den übergebenen Code später ausgebe kommt er allerdings so an:

      <table width="\"800"\">  
          <tr>  
          	<td valign="\"top"\" style="\"font-weight:bold;font-size:12px;"\">1001</td>  
              <td style="\"font-size:12px;"\">Beschreibungstext..</td>  
          </tr>  
      </table>
      

      Ich denke es sollte klar seien, warum er falsch interpretiert wird.
      Frage ist aber doch wie man das umgehen kann.

      Mein PHP-Code sieht im Grunde wie folgt aus:

      <?php  
      	if (array_key_exists("betreff", $_POST))  
      	$betreff = $_POST['betreff'];  
      	if (array_key_exists("code", $_POST))  
      	$mailtext = $_POST['code'];	  
      	if (array_key_exists("submit", $_POST))  
      	$submit = $_POST['submit'];		  
        
      		$mysql_select = "SELECT adresse FROM tabelle";  
      		$ressource_id_1	= mysql_query( $mysql_select );  
      		for ($i=0; $i < mysql_num_rows($ressource_id_1); $i++)  {  
      		$output = mysql_fetch_array($ressource_id_1);  
        
      		$absender = "newsletter@domain.tld";  
      		$empfaenger = $output['adresse'];  
        
                      if ($submit > "0")	{  
        
                      if (mail($empfaenger, $betreff, $mailtext, "From: $absender\n" . "Content-Type: text/html; charset=\"iso-8859-1\"")) {  
                          echo ("<table>  
      								<tr>  
      									<td>Der Newsletter wurde erfolgreich versendet</td>  
      								</tr>  
      							</table>");  
                          }  
      				}  
      			}  
      		?>
      

      Zur Info, wenn ich meinen HTML-Code direkt in das PHP-Script packe und dort direkt in die $mailtext speichere kommen meine E-Mails genau so formatiert wie ich es möchte an.

      Grüße,
      der Gerch

      1. Mahlzeit Gerch2003,

        Wenn ich den übergebenen Code später ausgebe kommt er allerdings so an:

        <table width=""800"">

        <tr>
             <td valign=""top"" style=""font-weight:bold;font-size:12px;"">1001</td>
                <td style=""font-size:12px;"">Beschreibungstext..</td>
            </tr>
        </table>

          
        Das müffelt ganz arg nach "[Magic Quotes](http://php.net/manual/de/security.magicquotes.php)" ... die Du schleunigst deaktivieren solltest.  
          
          
        MfG,  
        EKKi  
        
        -- 
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        
        1. Hey ho,

          was es nicht alles gibt ..
          ich glaube es heißt nicht umsonst "Magic Quotes" .. ist mir unerklärlich diese Funktion.

          Aber gut, nichts desto Trotz .. it works :-)

          Vielen Dank :-)

          1. Hi,

            was es nicht alles gibt ..

            Ja, bspw. offenbar immer noch Leute, die es nicht schaffen, sich bzgl. so alter Hüte selbst zu informieren.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          2. Hi,

            ich glaube es heißt nicht umsonst "Magic Quotes"

            müßte aber eher "Moronic Quotes" heißen.

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      2. Hallo

        Ja, also ich schreibe diese Daten in das Formularfeld:

        <table width="800">

        <tr>
             <td valign="top" style="font-weight:bold;font-size:12px;">1001</td>
                <td style="font-size:12px;">Beschreibungstext..</td>
            </tr>
        </table>

        
        > Natürlich ist das auch der selbe Code den ich erwarte.  
        >   
        > Wenn ich den übergebenen Code später ausgebe kommt er allerdings so an:  
        > ~~~html
        
        <table width="\"800"\">  
        
        >     <tr>  
        >     	<td valign="\"top"\" style="\"font-weight:bold;font-size:12px;"\">1001</td>  
        >         <td style="\"font-size:12px;"\">Beschreibungstext..</td>  
        >     </tr>  
        > </table>
        
        

        Ich denke es sollte klar seien, warum er falsch interpretiert wird.
        Frage ist aber doch wie man das umgehen kann.

        Tja, da bist du auf die Magic Quotes gestoßen, die auf eurem Server aktiviert sind. Mit ihnen wird jeder übergebene, also von außen ins Skript gekommene String mit addslashes behandelt, was in vielen Fällen aber kontraproduktiv bis falsch ist. Wenn Ihr auf die konfiguration des Servers Zugriff habt, könnt ihr das in der php.ini abschalten. Gegebenenfalls müssen dann andere Skripte darauf kontrolliert werden, ob sie sich auf das Vorhandensein der Magic Quotes verlassen!

        Soll erstmal nur dieses Skript vor Magic Quotes geschützt werden, kannst du die übergebenen Daten säubern. Wie zu lesen ist, gilt das Vorgehen als Deprecated. Das liegt daran, dass die Magic Quotes an sich ab PHP6 rausfliegen, womit auch die Umgehung wegfällt. Behalte also die eingesetzte PHP-Version auf eurem Server im Auge.

        Zur Info, wenn ich meinen HTML-Code direkt in das PHP-Script packe und dort direkt in die $mailtext speichere kommen meine E-Mails genau so formatiert wie ich es möchte an.

        Da wird ja auch nichts übergeben. Die Daten sind direkt im Skript vorhanden.

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        Veranstaltungsdatenbank Vdb 0.3
  2. Mahlzeit Gerch2003,

    Da der Newsletter mit HTML und CSS aufgebaut ist, dachte ich mir du machst ein Formular in welches du den HTML-Code einfügst und dann an das send-Formular übergibst.

    Sollte prinzipiell kein Problem darstellen.

    Nun habe ich gerade gelesen, dass durch XSS es nicht möglich ist, HTML-Code per _post oder _get zu übergeben.

    Wo steht so etwas? Du weißt schon, was CSS ist und hast Dich über die Grundlagen informiert?

    Teilweise funktioniert es zwar trotzdem, also ich sag mal alles was <table> usw. angeht kommt ohne Probleme an, aber CSS-Code wird nicht übergeben.

    Definiere "wird nicht übergeben"! Heißt das, dass Deine Eingaben im Formular gar nicht beim verarbeitenden PHP-Skript ankommen? Wenn ja: an welcher Stelle werden diese dann ausgefiltert? Wenn nein: was tut das Skript dann damit?

    Könnte man das ganze irgendwie umgehen und CSS- bzw. HTML-Code zulassen, so dass man ihn trotzdem per _get bzw. _post übergeben kann?

    Dreh den Schuh mal um ... ;-)

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hi EKKi,
      du solltest mich mittlerweile gut genug kennen, dass ich über die Grundlagen von CSS lange drüber hinaus bin ;-)

      Also das Problem was ich festgestellt habe ist, dass mein HTML-Code nachdem er übergeben wurde so aussieht:

      <table width="\"800"\">  
          <tr>  
          	<td valign="\"top"\" style="\"font-weight:bold;font-size:12px;"\">1001</td>  
              <td style="\"font-size:12px;"\">Beschreibungstext..</td>  
          </tr>  
      </table>
      

      Was mir gerade einfällt, es wäre natürlich eine Möglichkeit, alle "" aus dem Code automatisch mit " ersetzen zu lassen.

      Grüße

      1. Hello,

        Also das Problem was ich festgestellt habe ist, dass mein HTML-Code nachdem er übergeben wurde so aussieht:

        <table width=""800"">

        <tr>
             <td valign=""top"" style=""font-weight:bold;font-size:12px;"">1001</td>
                <td style=""font-size:12px;"">Beschreibungstext..</td>
            </tr>
        </table>

          
        Glaub ich nicht wirklich.  
        Ich dneke, er sieht eher so aus:  
          
        
        > ~~~html
        
        <table width="\"800"\">  
        
        >     <tr>  
        >     	<td valign=\"top\" style=\"font-weight:bold;font-size:12px;\">1001</td>  
        >         <td style=\"font-size:12px;\">Beschreibungstext..</td>  
        >     </tr>  
        > </table>
        
        

        Und das liegt dann an den sogenannten "magic Quotes". Siehe hierzu
        http://de.php.net/manual/en/function.get-magic-quotes-gpc.php
        http://de.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc

        usw.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. Mahlzeit Gerch2003,

        du solltest mich mittlerweile gut genug kennen, dass ich über die Grundlagen von CSS lange drüber hinaus bin ;-)

        Achso ... ;-)

        Was mir gerade einfällt, es wäre natürlich eine Möglichkeit, alle "" aus dem Code automatisch mit " ersetzen zu lassen.

        Keine gute Idee. Behebe lieber die Ursache, als an den Symptomen herumzufrickeln ... :-)

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|