htmlentities vs htmlspecialchars

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • htmlentities vs htmlspecialchars

    Wenn ich verhindern möchte, dass die User durch ihre Usereingaben mein
    Layout zerhauen, nehme ich da besser:

    1. htmlentities

    oder

    2. htmlspecialchars

    ??

    Danke.
    (-:
    Bookmarks:·Bilder·Jobs·Recht·
    kostenloser Webkataloge-Assistent

  • #2
    ich nehme immer htmlentities() .

    aber das hat nicht wirklich was mit dem 'zerschießen zu tun, weil damit kannst du das auch nciht sinnvoll verhindern.

    dafür solltest du eher wordwrap() nehmen.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Danke Abraxax.

      Das mit dem Textfeld und wordwrap ist klar.
      Hierbei geht es mir eher um, ich glaube es heißt cross site scripting...
      (-:
      Bookmarks:·Bilder·Jobs·Recht·
      kostenloser Webkataloge-Assistent

      Kommentar


      • #4
        ach, da fällt mir noch etwas ein:

        wenn ich mich sinnvoll gegen sql-injection und cross-site-scripting etc
        schützen möchte, reicht dann u.U. folgender Code, um den Variablen-Content zu entschärfen, oder fehlt da noch was entscheidendes?

        (p.s. ja ich weiß, HTTP_POST_VARS und co ... ist schon ein betagteres Script)

        PHP-Code:
        if ($HTTP_POST_VARS) {
          
        $vars $HTTP_POST_VARS;
        }
        elseif (
        $HTTP_GET_VARS) {
          
        $vars $HTTP_GET_VARS;
        }
          while (list(
        $key$value) = each ($vars)) {
            
        $vars2[$key] = htmlentities($value);
            
        $vars2[$key]=str_replace("#","#",$vars2[$key]);
            
        $vars2[$key]=str_replace("(","(",$vars2[$key]);
            
        $vars2[$key]=str_replace(")",")",$vars2[$key]);
            
        $vars2[$key]=str_replace("%%","",$vars2[$key]);
            $
        $key $vars2[$key];
          }
          
        $vars $vars2;
          
        // fix html injection (any critics??)
          
        $QUERY_STRING=htmlentities($QUERY_STRING);
          
        // fix flypage bug
          
        if ($page=="shop/flypage" and !$product_id){ $page="shop/browse"; } 
        (-:
        Bookmarks:·Bilder·Jobs·Recht·
        kostenloser Webkataloge-Assistent

        Kommentar


        • #5
          also gehe ich einfach mal davon aus, dass das script oben eine ausreichende sicherheit bietet
          (-:
          Bookmarks:·Bilder·Jobs·Recht·
          kostenloser Webkataloge-Assistent

          Kommentar


          • #6
            sicherheit ist relativ.

            tatsache ist aber, dass du dir mit dem script auch steine in den weg legst.

            nutze einfach $_GET und $_POST getrennt. also baller sie nicht in eine neue var rein.

            das bringt keinen vorteil. eher nur nachteile.

            desweiteren immer auf $QUERY_STRING, was korrekt $_SERVER['QUERY_STRING'] heissen muss, ein htmlentities() zu machen, ist auch nicht gut.

            htmlentities() wird NUR bei einer AUSGABE gemacht.

            abgesehen davon, solltest du dir mal was zum 'sauber programmieren' im forum zusammensuchen. hier wird sowas andauern angesprochen und ich habe jetzt keine lust alles noch einmal zu erläutern.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Original geschrieben von Abraxax
              abgesehen davon, solltest du dir mal was zum 'sauber programmieren' im forum zusammensuchen. hier wird sowas andauern angesprochen und ich habe jetzt keine lust alles noch einmal zu erläutern.
              Danke für deine Meinung, Haxe - werde mich mal auf die Suche machen
              (-:
              Bookmarks:·Bilder·Jobs·Recht·
              kostenloser Webkataloge-Assistent

              Kommentar


              • #8
                htmlspecialchars() sollte reichen, damit dir niemand HTML-Code unterschieben kann. Solange du als Zeichensatz ISO-8859-1 benutzt, funktioniert htmlentities() wunderbar, habe ich auch immer genommen - und wenn du den Zeichensatz später doch mal wechseln willst, gibt es hoffentlich keine größeren Probleme, weil die Zeichen dann ja maskiert sind. Wenn du aber einen anderen Zeichensatz benutzt (z.B. UTF-8), tut htmlentities() nicht mehr das, was es soll. Dann mußt du dich mit htmlspecialchars() begnügen (oder strtr mit eigener Tabelle benutzen).

                Kommentar

                Lädt...
                X