Sven: addslashes / stripeslashes sinnvoll einsetzen?

Hallo,

bisher war mir der Sinn der add-/stripeslashes nicht ganz klar, aber jetzt arbeite ich an einem "News"-Script - also zufügen, bearbeiten und entfernen von aktuellen Ankündigungen.

Wenn der Autor dieser News Anführungszeichen oder Hochkommata einsetzt, gibt es Probleme... daher folgende Frage:

Ist es sinnvoll, vor dem Eintrag in die Datenbank addslashes zu verwenden und nach dem Auslesen - kurz bevor die Daten angezeigt werden - die slashes mit stripeslashes zu entfernen? Damit wären die Probleme doch gelöst?

Grüße
Sven

  1. Ist es sinnvoll, vor dem Eintrag in die Datenbank addslashes zu verwenden und nach dem Auslesen - kurz bevor die Daten angezeigt werden - die slashes mit stripeslashes zu entfernen? Damit wären die Probleme doch gelöst?

    Jein. Die Schrägstriche werden eingefügt, um im SQL-Befehlstext (ich gehe mal davon aus, daß Du SQL benutzt) Zeichen mit besonderer Bedeutung zu maskieren (hauptsächlich die Anführungszeichen). Diese Schrägstriche wandern aber _nicht_ in die Datenbank, sondern werden nur für den Parser benötigt, der Deine Befehlszeile in ihre Einzelteile zerlegt; der Parser ist auch derjenige, der die Schrägstriche sofort wieder entfernt, der Datenbankkern selber hat mit diesen Maskierungen also garnichts mehr zu tun.
    Dementsprechend brauchst Du beim Auslesen auch kein stripslashes() einzusetzen, weil dort schlichtweg keine Maskierungen vorkommen.

    Bei der Benutzung von addslashes() solltest Du davon mal abgesehen beachten, daß die Datenbankschnittstelle möglicherweise ihre eigene Maskierungsfunktion mitbringt (bei MySQL wäre das mysql_[real_]escape_string()). Diese sind naturgemäß einer Allerweltsfunktion wie addslashes() vorzuziehen.

    Last but not least kann es unter Umständen sein, daß Dein PHP bereits so eingestellt ist, daß sämtliche von außen kommenden Daten bereits mit Schrägstrichen versehen sind und nicht mehr extra maskiert werden müssen.
    Der Sinn dieser Option verschließt sich mir ein wenig, denn statt des dadurch zwar wegfallenden addslashes()-Aufrufes bei Datenbankbefehlen wird nun der Aufruf von stripslashes() bei der Ausgabe dieser Texte nötig. Der Aufwand ist also mindestens der gleiche.

    Gruß,
      soenk.e

    1. Hallo Sönke,

      Der Sinn dieser Option verschließt sich mir ein wenig, denn statt des dadurch zwar wegfallenden addslashes()-Aufrufes bei Datenbankbefehlen wird nun der Aufruf von stripslashes() bei der Ausgabe dieser Texte nötig. Der Aufwand ist also mindestens der gleiche.

      Das ist fast richtig.

      Um wirklich keine Konsistenzprobleme mit den Daten zu bekommen sollte man bei PHP-Standard-Einstellungen als erstes stripslahes() benutzen, die Daten dann mit mysql_escape_string() behandeln. Es gibt sonst Probleme mit Zeilenumbrüchen in Textfeldern usw.

      Und vor der Ausgabe sollte man dann htmlentities() oder strip_tags(text,erlaubtliste) nicht vergessen, wenn man an den Browser ausgibt.

      Also in der Datenbank das neutrale Datenrohformat speichern, damit man dann gleich ausgabezielgerecht weiterverarbeiten kann.

      Grüße

      Tom