kostenloser Webspace werbefrei: lima-city


Forumtext in Datenbank speichern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    Hallo,

    ich bin gerade dabei, ein Forum zu programmieren.

    Meine Frage ist, wie ich den Text vom Thread oder vom neuen Post in die Datenbank speichere.

    Bisher habe ich das so:

    $text = nl2br($_POST ['text']);


    Meine Frage ist, wie ich SQL Injections ausschließen kann.

    Könnt Ihr mir da helfen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. w*****e

    Guten Tag,

    ich kann dir hir empfehlen mal die Funktion die PHP dir bietet in der PHP-Manual nachzuschlagen, meines Wissens bieten sowohl SQLite als auch MYSQL Funktionen wie http://php.net/manual/de/function.sqlite-escape-string.php sqlite_escape_string();

    Grüße webaffe
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Für MySQL wäre das mysql_real_escape_string()

    php-oop schrieb:
    Bisher habe ich das so:
    $text = nl2br($_POST ['text']);
    Würde ich nicht vor dem Eintragen in die DB machen. Ich würde so etwas erst bei der Ausgabe machen, und dort solltest du noch zusätzlich htmlentities() oder htmlspecialchars() nutzen um auch XSS zu verhindern.
  5. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    hackyourlife schrieb:
    Für MySQL wäre das mysql_real_escape_string()

    php-oop schrieb:
    Bisher habe ich das so:
    $text = nl2br($_POST ['text']);
    Würde ich nicht vor dem Eintragen in die DB machen. Ich würde so etwas erst bei der Ausgabe machen, und dort solltest du noch zusätzlich htmlentities() oder htmlspecialchars() nutzen um auch XSS zu verhindern.


    Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?

    Also so:
    $text = $_POST ['text'];
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    php-oop schrieb:
    Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?

    Also so:
    $text = $_POST ['text'];
    Ich meinte es so:

    Beim Speichern in die DB nutzt du so etwas:
    $text = mysql_real_escape_string($_POST['text']);
    mysql_query("INSERT INTO `nirgendwo` (`text`) VALUES ('$text')")
        or die(mysql_error());

    Beim Auslesen aus der DB und Darstellen auf der Webseite nutzt du dan z.B. sowas:
    echo(nl2br(htmlentities($text_aus_der_db)));
  7. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    hackyourlife schrieb:
    php-oop schrieb:
    Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?

    Also so:
    $text = $_POST ['text'];
    Ich meinte es so:

    Beim Speichern in die DB nutzt du so etwas:
    $text = mysql_real_escape_string($_POST['text']);
    mysql_query("INSERT INTO `nirgendwo` (`text`) VALUES ('$text')")
        or die(mysql_error());

    Beim Auslesen aus der DB und Darstellen auf der Webseite nutzt du dan z.B. sowas:
    echo(nl2br(htmlentities($text_aus_der_db)));


    Achso, okay.
    So hab ich das jetzt gemacht.

    Danke!

    EDIT: Ich merke gerade, ich hab noch ein Problem:

    Für $_POST ['text']; benutze ich den Editor TinyMCE, der ist also in der Textarea.

    Wenn ich jetzt den Beitrag speichere, wird der HTML Code auf der Beitragsseite angezeigt. Aber der soll dann ja ausgeführt werden.

    Wie mache ich das jetzt noch?

    Beitrag zuletzt geändert: 4.1.2013 12:34:15 von php-oop
  8. w*****e

    php-oop schrieb:
    hackyourlife schrieb:
    php-oop schrieb:
    Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?

    Also so:
    $text = $_POST ['text'];
    Ich meinte es so:

    Beim Speichern in die DB nutzt du so etwas:
    $text = mysql_real_escape_string($_POST['text']);
    mysql_query("INSERT INTO `nirgendwo` (`text`) VALUES ('$text')")
        or die(mysql_error());

    Beim Auslesen aus der DB und Darstellen auf der Webseite nutzt du dan z.B. sowas:
    echo(nl2br(htmlentities($text_aus_der_db)));


    Achso, okay.
    So hab ich das jetzt gemacht.

    Danke!

    EDIT: Ich merke gerade, ich hab noch ein Problem:

    Für $_POST ['text']; benutze ich den Editor TinyMCE, der ist also in der Textarea.

    Wenn ich jetzt den Beitrag speichere, wird der HTML Code auf der Beitragsseite angezeigt. Aber der soll dann ja ausgeführt werden.

    Wie mache ich das jetzt noch?


    Guten Tag,

    du musst das htmlentinities() weglassen, allerdings hast du dann wieder das Problem mit XSS, vielleicht solltest du dir mal BB-Code anschauen...

    Grüße webaffe
  9. Ich würde lieber mal einen Blick auf PDO oder Mysqli werfen.
    Und dort den Part mit den prepared Statements. Damit sicherst du eigentlich alles ab und musst deine Texte nicht irgendwie umformatieren.
  10. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    webaffe schrieb:
    php-oop schrieb:
    hackyourlife schrieb:
    php-oop schrieb:
    Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?

    Also so:
    $text = $_POST ['text'];
    Ich meinte es so:

    Beim Speichern in die DB nutzt du so etwas:
    $text = mysql_real_escape_string($_POST['text']);
    mysql_query("INSERT INTO `nirgendwo` (`text`) VALUES ('$text')")
        or die(mysql_error());

    Beim Auslesen aus der DB und Darstellen auf der Webseite nutzt du dan z.B. sowas:
    echo(nl2br(htmlentities($text_aus_der_db)));


    Achso, okay.
    So hab ich das jetzt gemacht.

    Danke!

    EDIT: Ich merke gerade, ich hab noch ein Problem:

    Für $_POST ['text']; benutze ich den Editor TinyMCE, der ist also in der Textarea.

    Wenn ich jetzt den Beitrag speichere, wird der HTML Code auf der Beitragsseite angezeigt. Aber der soll dann ja ausgeführt werden.

    Wie mache ich das jetzt noch?


    Guten Tag,

    du musst das htmlentinities() weglassen, allerdings hast du dann wieder das Problem mit XSS, vielleicht solltest du dir mal BB-Code anschauen...

    Grüße webaffe


    Ja, die Idee mit BB Codes hatte ich auch schon.
    Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden? Und muss das umgewandelt werden, wenn in die Datenbank gespeichert wird oder beim ausgeben?
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    php-oop schrieb:
    Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden?
    Selber programmieren ist nur für einfache BBCodes sinnvoll, ansonsten solltest du dir eine fertige Bibliothek suchen.

    php-oop schrieb:
    Und muss das umgewandelt werden, wenn in die Datenbank gespeichert wird oder beim ausgeben?
    Tipp: wandle immer erst bei der Ausgabe um, denn so kannst du den Text unkompliziert in verschiedenen Formaten ausgeben.
  12. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    hackyourlife schrieb:
    php-oop schrieb:
    Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden?
    Selber programmieren ist nur für einfache BBCodes sinnvoll, ansonsten solltest du dir eine fertige Bibliothek suchen.

    php-oop schrieb:
    Und muss das umgewandelt werden, wenn in die Datenbank gespeichert wird oder beim ausgeben?
    Tipp: wandle immer erst bei der Ausgabe um, denn so kannst du den Text unkompliziert in verschiedenen Formaten ausgeben.


    Also so ungefähr die BB Codes hier von Lima würden mir reichen.

    Kann ich es dann immernoch so:

    echo(nl2br(htmlentities($text_aus_der_db)));


    ausgaben lassen? Oder funktioniert das dann nicht?

    Beitrag zuletzt geändert: 4.1.2013 13:58:30 von php-oop
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    php-oop schrieb:
    Kann ich es dann immernoch so:

    echo(nl2br(htmlentities($text_aus_der_db)));


    ausgaben lassen? Oder funktioniert das dann nicht?
    Egal was du machst wird es so immer funktionieren, nur wird das auch alle Steuerbefehle sichtbar machen.

    Bei BB-Codes würdest du es eher so machen, aber das ist nur Pseudocode:
    echo(bbcode_zu_html($text_aus_der_db));
    Wie gesagt, für einfache BB-Codes kannst du dir durchaus selbst etwas basteln, z.B. mit regulären Ausdrücken, aber bei komplexeren Codes (wie z.B. hier im Forum) solltest du dir eine Bibliothek (*hust*) dafür suchen.
  14. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    hackyourlife schrieb:
    php-oop schrieb:
    Kann ich es dann immernoch so:

    echo(nl2br(htmlentities($text_aus_der_db)));


    ausgaben lassen? Oder funktioniert das dann nicht?
    Egal was du machst wird es so immer funktionieren, nur wird das auch alle Steuerbefehle sichtbar machen.

    Bei BB-Codes würdest du es eher so machen, aber das ist nur Pseudocode:
    echo(bbcode_zu_html($text_aus_der_db));
    Wie gesagt, für einfache BB-Codes kannst du dir durchaus selbst etwas basteln, z.B. mit regulären Ausdrücken, aber bei komplexeren Codes (wie z.B. hier im Forum) solltest du dir eine Bibliothek (*hust*) dafür suchen.


    Danke für den Link :)

    htmlentities() muss ich dann aber trotzdem benutzen, zum Schutz vor SQL Injection, oder?
  15. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    php-oop schrieb:
    htmlentities() muss ich dann aber trotzdem benutzen, zum Schutz vor SQL Injection, oder?
    htmlentities()
    schützt nur vor XSS, das hat aber nichts mit SQL-Injections zu tun. Gegen SQL-Injections schützt du dich mit
    mysql_real_escape_string()
    , was aber schon genannt wurde.
  16. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    hackyourlife schrieb:
    php-oop schrieb:
    htmlentities() muss ich dann aber trotzdem benutzen, zum Schutz vor SQL Injection, oder?
    htmlentities()
    schützt nur vor XSS, das hat aber nichts mit SQL-Injections zu tun. Gegen SQL-Injections schützt du dich mit
    mysql_real_escape_string()
    , was aber schon genannt wurde.


    Achso, mysql_real_escape_string() nutze ich ja beim Speichern in die Datenbank.

    Wie benutze ich die Klasse vom Link von dir?
  17. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    php-oop schrieb:
    Wie benutze ich die Klasse vom Link von dir?
    Die Klasse erfüllt diese Forderung:
    php-oop schrieb:
    Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden?


    Dabei liest du aus der DB den Text aus, wandelst ihn mit der Klasse um (Doku dazu lesen!) und als Ergebnis bekommst du HTML-Code, den du auf deiner Webseite ausgeben kannst. Damit die Klasse weiß welche BB-Codes existieren und wie sie in HTML-Code umgerechnet werden sollen musst du noch entsprechende Regeln definieren, was du aber ebenfalls der Doku entnehmen kannst.
  18. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    hackyourlife schrieb:
    php-oop schrieb:
    Wie benutze ich die Klasse vom Link von dir?
    Die Klasse erfüllt diese Forderung:
    php-oop schrieb:
    Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden?


    Dabei liest du aus der DB den Text aus, wandelst ihn mit der Klasse um (Doku dazu lesen!) und als Ergebnis bekommst du HTML-Code, den du auf deiner Webseite ausgeben kannst. Damit die Klasse weiß welche BB-Codes existieren und wie sie in HTML-Code umgerechnet werden sollen musst du noch entsprechende Regeln definieren, was du aber ebenfalls der Doku entnehmen kannst.


    Danke! Dann probiere ich das heute mal.


    Danke dir für deine Hilfe!
  19. php-oop schrieb:
    htmlentities() muss ich dann aber trotzdem benutzen

    htmlentities muss man eigentlich nie benutzen. Wenn man keinen Mist in der Kodierung hat, reicht htmlspecialchars mit dem ENT_QUOTES-Flag und der Angabe der Kodierung vollkommen. Die Zeiten mit kaputt Umlauten sind lange vorbei.
  20. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!