Announcement

Collapse
No announcement yet.

Allgemeine Überprüfung von Usereingaben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Allgemeine Überprüfung von Usereingaben

    Hallo liebe community

    ich habe auf meiner gebastelten seite mit db usw sehr viele orte wo die besucher zeugs eingeben können ( formulare etc ) und natürlich auch die seitensteuerung über GET alá ?site=blabla ....

    währ ja auch alles kein thema wenns keine bösen leute geben würde, die meinen mit XSS , SQL-injektion und was es da sonst noch gibt, anderen leuten den spaß am scripten nehmen zu müssen.

    das includen ( GET alá ?site=blabla ) hab ich im moment so gelöst:

    PHP Code:

    if (isset($_GET['site']))
    {
        
    $xpage basename($_GET['site']);
        
    $tpage 'content/' $xpage '.php';
        if (
    file_exists($tpage))
        {
            
    $page $tpage;
        }
    }
    include(
    $page); 
    was ich auch recht sicher finde, aber ich lasse mich da auch gerne eines besseren belehren.



    So, nur was ist mein problem ?

    ganz einfach, ich suche eine art all-in-one überprüfung für so sachen wie formulareingaben usw...

    also eine art funktion, die ALLES rausfiltert, von unerwünschten sql injektions ... html ... einfach alles.

    bei mir auf der seite sollen NUR ganz normaler text eingegeben werden.

    kann man das alles in eine funktion packen ? oder kommt es dann zu problemen ?

    ich hab mir schonmal überlegt alles unerwünschte mit strreplace oder so einfach rauszulöschen. aber was es alles an zeichen gibt, is ja unheimlich.

    vllt gibt es ja eine möglichkeit "whitelist ähnlich" NUR dieße zeichen a-z A-Z 0-9 zu erlauben ?

    ich hoffe ihr könnt verstehen was ich suche, und hoffe auf einige kompetente ratschläge.

    ps: bitte keine kommentare wie "google doch mal".... das hab ich schon, und auch unzähliche sachen gefunden ... aber irgendwie nur "spezielle" wie für sql die escape funktion usw...

  • #2
    Dann filter das mit einem regulären Ausdruck und lasse dann nur a-z A-Z 0-9 zu
    Christian

    Comment


    • #3
      hallo christian,

      erst mal danke für deine schnelle antwort.

      wie meinst du das genau? gibt es da von php eine fertige funktion für ?

      ich bin leider was string"manipulation" angeht noch etwas grün hinter den ohren

      Comment


      • #4
        http://www.google.de/search?sourceid...ausdr%c3%bccke
        Christian

        Comment


        • #5
          Zeigen wir dem Menschen doch, wo die Info _wirklich_ steht, oder?
          @necrid: Schau hier: http://us3.php.net/manual/de/book.pcre.php

          Und sieh dir die preg_replace und preg_match funktionen mal genauer an, die erfüllen deinen Wunsch...
          "A common mistake that people make
          when trying to design something completely foolproof
          is to underestimate the ingenuity of complete fools.
          "
          >>> Douglas Adams, Mostly Harmless
          -------------------------------------------------------
          Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

          Comment


          • #6
            Zeigen wir dem Menschen doch, wo die Info _wirklich_ steht, oder?
            Wenn du meinst, dass dieser Link besser ist.......kann allerdings nicht nachvollziehen, das in der google-Liste diese Infos fehlen.....
            Christian

            Comment


            • #7
              SQL-Injektion löst man durch Verwendung von parametrisierten Abfragen.

              Comment


              • #8
                so, nochmals danke für die antworten

                ich hab mir die funktionen mal etwas angeschaut ( was nicht ganz leicht war als php noob )

                aber ich glaube ich bin zu einem ergebniss gekommen.

                PHP Code:
                $gefiltert preg_replace("/[^a-z A-Z 0-9]/""neueszeichen"$ungefiltert); 
                noch nicht getestet

                da lag ich mit meiner vermutung von str_replace gar nicht sooo weit daneben

                So, wenn ich den input so filtere dürfte ich doch auf der sicheren seite sein, oder ?
                dann kann ich mir auch so sachen wie mysql_real_escape sparen, oder ?

                mfg necrid

                Comment


                • #9
                  Originally posted by necrid View Post
                  dann kann ich mir auch so sachen wie mysql_real_escape sparen, oder ?
                  Das solltest du dir NIEMALS sparen!
                  "A common mistake that people make
                  when trying to design something completely foolproof
                  is to underestimate the ingenuity of complete fools.
                  "
                  >>> Douglas Adams, Mostly Harmless
                  -------------------------------------------------------
                  Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

                  Comment


                  • #10
                    Was ist mit ßüöäÜÖÄ??
                    Warum 2 Leerzeichen?
                    Wenn du Namen oder Adressen verarbeitest was ist mit -.?
                    Christian

                    Comment


                    • #11
                      Was ist mit ßüöäÜÖÄ??
                      werde ich noch vorher in ss, ue, oe .... umwandeln

                      Warum 2 Leerzeichen?
                      weils schöner aussieht

                      Wenn du Namen oder Adressen verarbeitest was ist mit -.?
                      solche felder werden eher die ausnahme sein, da werd ich dann extra was dafür machen.
                      Zuletzt editiert von necrid; 10.06.2009, 17:53.

                      Comment


                      • #12
                        so, ich hab mal getestet und bin zu einem guten ergebniss gekommen:

                        mein filterscript sieht nun so aus

                        PHP Code:

                        $ungefilterter_input 
                        "Wir $%& sind §&/% Zeichen &() mit denen man Blödsinn machen kann";

                        $filter_umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/");
                        $filter_umlaute_replace = Array("ae","oe","ue","Ae","Oe","Ue","ss");
                        $ersetzte_umlaute preg_replace($filter_umlaute$filter_umlaute_replace$ungefilterter_input);
                        $gefiltert preg_replace("/[^a-z A-Z 0-9]/"""$ersetzte_umlaute);

                        echo(
                        $gefiltert); 
                        output = Wir sind Zeichen mit denen man Bloedsinn machen kann


                        für formulare oder ähnliches müsste man das ganze noch etwas ändern ( satzzeichen etc.) aber um zb. $_GET oder $_POST daten abzusichern find ichs nicht schlecht.

                        ist wahrscheinlich nicht die "professionellste" lösung, aber wie ich finde eine gute und einfache.

                        mfg necrid

                        ps: wer will kann's HIER gerne testen
                        Zuletzt editiert von necrid; 10.06.2009, 18:20.

                        Comment

                        Working...
                        X