j4nk3y: Update einer Chatfunktion

Beitrag lesen

Lieber Felix Riesterer,

'\'%1$s\' Die Zeichenkette versteh ich gerade noch nicht vollständig. Das s sollte den übergebenen String beinhalten, das erste s dann hier $_SESSION['user_name'] usw. . Aber was macht das \'%1$.

wenn Du bei PHP.net nachgelesen hast, das die Funktion sprintf Ersetzungen in Strings vornehmen kann, dann hast Du sicher gesehen, dass es nicht nur das s ist, sondern die Zeichenfolge %s. Man kann die Platzhalter mit Nummern versehen, um einen Teilstring, der öfter eingesetzt werden soll, nicht öfter in der Parameterliste notieren zu müssen:

sprintf(
    'Wir haben %1$ %1$ %1$ haben %1$ %1$ %1$ haben %1$ %1$ %1$ haben %2$!',
    'Hunger',
    'Durst'
);

Wenn in Deinem SQL-String der Wert in einfache Quotes verpackt werden soll, dann müssen diese mit einem Backslash escaped werden, da sonst Syntaxfehler entstehen:

sprintf(
    'Wir haben '%1$' '%1$' '%1$' haben '%1$' '%1$' '%1$' haben '%1$' '%1$' '%1$' haben '%2$!'',
    'Hunger',
    'Durst'
);

Deshalb diese Schreibweise:

sprintf(
    'Wir haben \'%1$\' \'%1$\' \'%1$\' haben \'%1$\' \'%1$\' \'%1$\' haben \'%1$\' \'%1$\' \'%1$\' haben \'%2$!\'',
    'Hunger',
    'Durst'
);

Natürlich wie konnte ich nur so blind sein. Danke für die ausführliche Erklärung.

Wenn ich jetzt aber einfach mal sage das:

if($_POST)
{
	foreach($_POST as $key=>$value)
	{
		$_POST[$key]= mysqli_real_escape_string($value);
	}
}

Dann kommt ja z.b. ein ' garnicht durch als $_POSTvariable oder nicht?

Warum willst Du alle geposteten Werte für den SQL-Kontext kodieren? Solltest Du eine Fehlermeldung ins Dokument schreiben, bei der Du etwas bemängelst, dann kannst Du den originalen Wert nicht mehr rekonstruieren:

Hm, eigentlich dachte ich alle Variablen die Irgendjemand eingibt schonmal vorab entschärfen.

$_POST['lang'] = 'Leck mich!';

if (!in_array($_POST['lang'], $available_languages) {
    // create error message
    $error = sprintf(
        '<p class="error">Falsche Sprache <strong>%1$s</strong>angegeben!</p>',
        htmlspecialchars($_POST['lang'])
    );
}

Das wird wohl nicht passieren, da die $_POST['lang'] aus der Datenbank gefüllt wird. Außer jemand fummelt an der $_SESSION variable rum, dann kommt er garnicht erst bis zu dem Punkt und die $_SESSION wird sofort beendet Und man müsste sich neu Einloggen.

Man kodiert genau dort, wo man es benötigt. Im obigen Beispiel wird der gepostete Wert für den HTML-Kontext kodiert. Der Wert im $_POST-Array wird dabei aber nicht verändert, damit er an anderer Stelle wieder original zur Verfügung steht und für den dortigen Kontext passend kodiert werden kann (z.B. mit mysqli_real_escape_string). Das stand aber in dem von mir verlinkten und zur Lektüre ans Herz gelegten Artikel... ;-)

Da hab ich schon drübergelesen, werde ich auch nochmal eingehender machen.

Gruß Jo

0 151

Update einer Chatfunktion

j4nk3y
  • html
  • javascript
  • php
  1. 2
    Felix Riesterer
    • datenbank
    • php
    • sicherheit
    1. 0
      j4nk3y
      1. 0
        Gunnar Bittersmann
    2. 0
      Gunnar Bittersmann
      1. 0
        Matthias Apsel
        1. 0
          Gunnar Bittersmann
      2. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
      3. 0
        Felix Riesterer
        1. 0
          j4nk3y
          • zur info
          1. 1
            Felix Riesterer
            • php
            • programmiertechnik
            • zur info
            1. 0
              j4nk3y
        2. 0
          Gunnar Bittersmann
    3. 0
      j4nk3y
      1. 0
        Felix Riesterer
        • php
        • programmiertechnik
        • sicherheit
        1. 0
          j4nk3y
          1. 0
            Der Martin
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
          2. 0
            Felix Riesterer
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
              2. 1
                dedlfix
                1. 0
                  Gunnar Bittersmann
                  • typografie
                2. 0
                  j4nk3y
                  1. 0
                    dedlfix
                    1. 0
                      j4nk3y
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            dedlfix
                            1. 0
                              j4nk3y
                              1. 0
                                Der Martin
                                1. 0
                                  j4nk3y
                                  1. 0
                                    Der Martin
                              2. 1
                                dedlfix
                                1. 0
                                  Der Martin
                              3. 0
                                Gunnar Bittersmann
                                • datenbank
                                • programmiertechnik
                                1. 0
                                  j4nk3y
        2. 0
          Der Martin
        3. 0
          Gunnar Bittersmann
          • internationalisierung
          • php
          1. 0
            Felix Riesterer
            1. 0
              Tabellenkalk
              • zitat
              • zu diesem forum
              1. 1
                Matthias Apsel
    4. 0
      1unitedpower
      1. 1
        dedlfix
        1. 1
          1unitedpower
          1. 0
            Christian Kruse
          2. 0
            dedlfix
            1. 0
              1unitedpower
              1. 0
                dedlfix
                1. 0
                  Christian Kruse
                  1. 0
                    dedlfix
                  2. 0
                    1unitedpower
                    1. 0
                      Christian Kruse
                      1. 0
                        1unitedpower
                    2. 0
                      dedlfix
                      1. 0
                        1unitedpower
                        1. 0
                          dedlfix
  2. 0
    j4nk3y
    1. 0
      Gunnar Bittersmann
      • html
      1. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
            1. 0
              Matthias Apsel
              1. 0
                j4nk3y
  3. 0
    j4nk3y
  4. 0
    pl
    1. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            dedlfix
            1. 0
              j4nk3y
              1. 0
                pl
                1. 0
                  j4nk3y
                  1. 0
                    pl
                    1. 0
                      dedlfix
                      1. -2
                        pl
                        1. 0
                          Matthias Apsel
                  2. 0
                    pl
              2. 0
                dedlfix
                1. 0
                  j4nk3y
                  1. 0
                    dedlfix
            2. 0
              j4nk3y
              1. 0
                dedlfix
      2. 0
        pl
  5. 0
    j4nk3y
    1. 0
      dedlfix
    2. 0
      j4nk3y
      1. 0
        j4nk3y
        1. 0
          pl
        2. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              dedlfix
              1. 0
                j4nk3y
          2. 0
            j4nk3y
            1. 0
              j4nk3y
  6. 0
    j4nk3y
    1. 0
      Der Martin
      1. 0
        j4nk3y
        1. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              Der Martin
              1. 0
                j4nk3y
        2. 0
          Der Martin
          1. 0
            j4nk3y
            1. 1
              Felix Riesterer
              1. 0
                j4nk3y
                1. 0
                  Matthias Apsel
                  1. 0
                    j4nk3y
                    • menschelei
                2. 0
                  Felix Riesterer
                  • php
                  • programmiertechnik
                  • sql
                  1. 0
                    j4nk3y
                    1. 0
                      Der Martin
                      1. 0
                        j4nk3y
                        1. 0
                          Der Martin
                          1. 0
                            j4nk3y
                            • menschelei
                    2. 0
                      Felix Riesterer
                      1. 0
                        pl
                      2. 0
                        j4nk3y
                        1. 2
                          dedlfix
                          1. 0
                            j4nk3y
                            1. 0
                              dedlfix
                              1. 0
                                Christian Kruse
                                1. 1
                                  dedlfix
                  2. 0
                    j4nk3y
                  3. 0
                    j4nk3y
                    1. 0
                      Felix Riesterer
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            pl
                            1. 0
                              j4nk3y
                          2. 0
                            dedlfix
                      2. 0
                        j4nk3y
                        1. 0
                          Der Martin
                        2. 0
                          Felix Riesterer
                          1. 0
                            Der Martin
                            1. 0
                              dedlfix
                          2. 0
                            j4nk3y
                            1. 1
                              Der Martin
                              1. 0
                                j4nk3y
    2. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            Christian Kruse
            1. 0
              j4nk3y
              1. 0
                Christian Kruse
              2. 0
                Matthias Apsel
                • zu diesem forum
                1. 0
                  j4nk3y