was wenn $_GET fehlschlägt

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

  • #16
    da aber die zahl -5 (minus fünf) auch ein integer ist, nutze ich meistens:
    PHP Code:
    if(isset($_GET['id']) && intval($_GET['id'])>0)
       
    // alles ok 
    mit dem hintergedanken, dass so ein feld, wie 'id' ausschließlich unsigned sein sollte.

    p.s. ob die eingabe "manipuliert" wurde, ist mir egal. warum soll es mich kümmern?
    Last edited by penizillin; 04-07-2005, 13:40.

    Comment


    • #17
      $_GET['id'] = max(0, (int)$_GET['id']);

      So mache ich das, danach habe ich einen definierten Wert und die Welt ist wieder schön
      Ich denke, also bin ich. - Einige sind trotzdem...

      Comment


      • #18
        Ähem

        @jahLives
        PHP Code:
        if(is_numeric($data) && !strpos($data,".") && !strpos($data"e") && ! 
        Versteh nicht warum Du prüftst ob "." oder "e" vorkommt und nicht "K" oder "L"

        Ist das was besonderes ?

        Warum nich PHP's schwache Typen Konvertierung nutzen

        PHP Code:
        function ensureInt(&$strInt) {
          
        $strInt $strInt +1;
          
        $strInt $strInt 1
        }
          print 
        ensureInt("6 ist blöd"// gibt 6
          
        print ensureInt("alles ist blöd"// gibt 0;
          
        print ensureInt("6"// gibt 6

          
        $i "6 ist blöd";
          print 
        $i;  // gibt 6 ist blöd
          
        ensureInt($i);
          print 
        $i// gibt 6 
        Last edited by chansel0049; 05-07-2005, 12:59.
        chansel0049
        ----------------------------------------------------
        if you've reached the bottomline - dig further!
        Übersetzer gesucht? http://www.babelport.com

        Comment


        • #19
          chansel0049, lies dir das mal durch, dort ist alles erklärt:
          http://de3.php.net/manual/de/language.types.integer.php
          http://de3.php.net/manual/de/language.types.float.php

          dein ensureInt() ist ein fehlerträchtiger workaround.

          Comment


          • #20
            @chansel
            Versteh nicht warum Du prüftst ob "." oder "e" vorkommt und nicht "K" oder "L"
            Was haben denn K oder L mit Zahlwerten zu tun ? Der Punkt ist um Decimalzahlen festzustellen und e für Exponetialwerte zur Basis 10. Ich wollte bei meiner Funktion sicherstellen, dass nur Integer Werte durchgehen. is_nummeric() lässt aber auch Decimalzahlen, Oktalzahlen und Exponetialzahlen durch --> also muss ich diese ausschliessen.

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Comment


            • #21
              hmh, leuchtet ein,

              aber Int sicherzustellen geht einfacher mit Zwangskonvertiertung siehe oben oder
              @penizillin
              PHP Code:
              function ensureInt(&$strInt) {
                
              $strInt $strInt +1;
                
              $strInt $strInt 1
                
              $strInt = (int)$strInt;

              damit auch Floats zu Ints werden,

              Sicher ist dies keine 100% umwandlung mit exakter Genauigkeit für Berechnungen, aber für $_GET im Zusammenarbeit mit CMS oder DB-Sätzen IDs allemal ausreichend um SQL Injections abzufangen

              Oder sehe ich das falsch?
              chansel0049
              ----------------------------------------------------
              if you've reached the bottomline - dig further!
              Übersetzer gesucht? http://www.babelport.com

              Comment


              • #22
                Ich will ja nicht dass auch Floats oder Oktalzahlen als Int durchgehen. Die Funktion ist für ein Gallery Script wo ich die Bild Ref per $_GET übergebe (ist nur ne Nummer) und da will ich einfach sicher sein, dass nur ein Int kommt und wenn nicht bin ich sicher, dass jemand am QueryString rumgebastelt hat.

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Comment


                • #23
                  und was soll +1/-1 bringen? und warum dann noch ne eigene funktion für die typenkonvertierung? dass die id-werte größer 0 sein müssen sollte man auch berücksichtigen. die einzig effektiven vorschläge haben mrhappiness und ich weiter oben gemacht.

                  Comment


                  • #24
                    warum nicht einfach:

                    PHP Code:
                    <?php
                    // ...
                    $imageId $_GET['id'];

                    if(!
                    is_integer($imageId)) {
                      
                    trigger_error(blabla);
                    }

                    hier mit else, oder einfach so weiter...


                    // ...

                    Comment


                    • #25
                      matz0r: hat jahlives doch schon erklärt.

                      0x42 würde durchgehen
                      -42 würde durchgehen

                      Comment


                      • #26
                        Original geschrieben von penizillin
                        und was soll +1/-1 bringen? und warum dann noch ne eigene funktion für die typenkonvertierung? dass die id-werte größer 0 sein müssen sollte man auch berücksichtigen. die einzig effektiven vorschläge haben mrhappiness und ich weiter oben gemacht.
                        Komm wieder runter... Ich akzeptiere ja deinen Einwand... und Du hast recht ... (int) macht +1/-1 überflüssig und mit neg. Werten in DB ist natürlich klar (aber das regelt meine DBI per abs())
                        chansel0049
                        ----------------------------------------------------
                        if you've reached the bottomline - dig further!
                        Übersetzer gesucht? http://www.babelport.com

                        Comment


                        • #27
                          Original geschrieben von penizillin
                          matz0r: hat jahlives doch schon erklärt.
                          sry sry..

                          Wenns in ner Datenbank steht: überprüfen obs den Wert gibt (stellt mit escapen ja keine Gefahr dar), fürs Filesystem ähnliches...

                          Oder wie stehts mit regex auf 0-9 zu prüfen?

                          Comment

                          Working...