Ankündigung

Einklappen
Keine Ankündigung bisher.

Variable darf nur 2- 3 Stellige Zahl enthalten! sonst nix!

Einklappen

Neue Werbung 2019

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

  • Variable darf nur 2- 3 Stellige Zahl enthalten! sonst nix!

    Hi !
    Ich arbeite gerade an meinem ersten blog ! und ich bin zu 99,9% fertig ! Zur Sicherheit würde ich gerne (da ich mit $post und $get arbeite ) alles etwas sicherer machen. Dafür ist es notwendig das ich bei entgegennehmen von einer Variable sicher stelle das eine sql nur dann ausgeführt wird, wenn eine wie gesagt der inhalt der variablen eine 2 oder 3 stellige zahl ist.

    Doch wie prüfe ich das ?
    Mittlerweile kann ich schon mit if isset arbeiten und if und else. Das sollte nicht das problem sein ! aber wie kann ich prüfen ob in der Variablen wirklich nur 2 oder 3 zahlen enthalten sind ? und kein .+#"$aklsdjgo oder sonstige Zeichen ?
    Über kleine hilfestellung wäre ich sehr dankbar

    mfg
    einfach112

  • #2
    PHP-Code:
    if (ctype_digit($value) && in_array(strlen($value), [23])) {
        
    // ...

    Kommentar


    • #3
      PHP-Code:
      // assuming GET as data source
      $x filter_input(INPUT_GET'number'FILTER_VALIDATE_INT, array('options' => array('min_range' => 10'max_range' => 999)));
      if (
      $x === false) {
          throw new 
      Exception('try again, pal');

      Kommentar


      • #4
        BBAAAAMMMM in mein Gesicht ! soooo schnell hätte ich nicht mit Backup gerechnet ! Vielen Vielen Vielen dank an euch beide....

        Kommentar


        • #5
          Dormilich mit der version von hellbringer hats auf anhieb nicht geklappt .... nun wende ich mich deiner version zu .....
          an welches Stelle genau muss ich meine Variable in deinen quellcode einbauen ?
          Derzeit sieht mein Quelltext ungefähr so aus :
          $daten1 = $_GET["vergleichID"];
          $daten2 = $_GET["vergleichID2"];

          Muss ich 'number' durch meine Variable ersetzen ?
          oder verstehe ich da etwas falsch`?

          Kommentar


          • #6
            Code:
            Muss ich 'number' durch meine Variable ersetzen ?
            du mußt 'number' durch 'vergleichID' (den GET Schlüssel) ersetzen.

            Kommentar


            • #7
              ok passt wunderbar ! vielen Dank !

              Kommentar


              • #8
                Eine Exception für "sowas"?

                Kommentar


                • #9
                  Wieso kein Regex?

                  preg_match('/[0-9]{2,3}/', $number)

                  Mal ganz banal.

                  Kommentar


                  • #10
                    Eine Exception für "sowas"?
                    ich hab halt irgendwas hingeschrieben, damit man erkennt, daß es sich um einen Problemfall handelt.

                    Wieso kein Regex?
                    filter_input() funktioniert auch, wenn $_GET['index'] nicht gesetzt ist.

                    Kommentar


                    • #11
                      Zitat von Dormilich Beitrag anzeigen
                      ich hab halt irgendwas hingeschrieben, damit man erkennt, daß es sich um einen Problemfall handelt.
                      Danke habs mir schon fast gedacht das es ein plakatives Beispiel war.

                      Kommentar


                      • #12
                        PHP-Code:
                        if (ctype_digit($value) && in_array(strlen($value), [23])) {
                            
                        // ...

                        Was zu der spannenden Frage führt, ob "000" eine „dreistellige Zahl“ ist.

                        PHP-Code:
                        // assuming GET as data source
                        $x filter_input(INPUT_GET'number'FILTER_VALIDATE_INT, array('options' => array('min_range' => 10'max_range' => 999)));
                        if (
                        $x === false) {
                            throw new 
                        Exception('try again, pal');

                        Doku (Hervorhebung hinzugefügt):

                        Value of the requested variable on success, FALSE if the filter fails, or NULL if the variable_name variable is not set. If the flag FILTER_NULL_ON_FAILURE is used, it returns FALSE if the variable is not set and NULL if the filter fails.
                        - http://php.net/manual/en/function.filter-input.php

                        Außerdem lässt das zum Beispiel ?number=+++++++999 zu (wird allerdings nach int gecastet) und wer weiß was noch, weil diese Filter alle höchstens sporadisch dokumentiert sind. Das sollte zwar wenig mehr als eine optische Sache sein, aber na ja.

                        PHP-Code:
                        preg_match('/[0-9]{2,3}/'$number
                        Erneut die Frage, ob "000" eine dreistellige Zahl ist. Zudem müsste das Pattern noch verankert werden. '/\A[0-9]{2,3}\z/'

                        Regulärer Ausdruck der nur "10" bis "999" zulässt: $pattern = '~\A(?:[1-9][0-9]|[1-9][0-9]{2})\z~';

                        Kommentar


                        • #13
                          Zitat von mermshaus Beitrag anzeigen

                          Was zu der spannenden Frage führt, ob "000" eine „dreistellige Zahl“ ist.
                          und zu der Frage, wofür diese Zahl dann benutzt wird. Ist es so was wie ein Index, der zwischen 10 und 999 liegen darf. Oder soll '009' als gültig akzeptiert werden?
                          Für den ersten Fall wäre eventuell noch folgende Variante einen Blick wert:
                          PHP-Code:
                          $testValues = array('55','678','7b','0x4','1234','0034','009');

                          foreach(
                          $testValues as $value){

                            
                          $intValue = (int)$value >= 10 && (int)$value <= 999 ? (int)$value false;

                            echo 
                          $value.' : ';
                            
                          var_dump($intValue);
                            echo 
                          '<br>';

                          Outputs
                          55 : int(55)
                          678 : int(678 )
                          7b : bool(false)
                          0x4 : bool(false)
                          1234 : bool(false)
                          0034 : int(34)
                          009 : bool(false)

                          Edit: zu den Filterfunktionen

                          Warum liefert
                          PHP-Code:
                          $x filter_var('045'FILTER_VALIDATE_INT);
                          var_dump($x); //bool(false) 
                          hier false?
                          Weil Filter hier die Vornull als Oktal händelt, was sonst nur im Code erfolgt, nicht jedoch bei Strings als Quelle.

                          Kommentar


                          • #14
                            Oder soll '009' als gültig akzeptiert werden?
                            Falls nicht:

                            PHP-Code:
                            ltrim($zahl'0'
                            (nicht ganz ernst gemeint)

                            Kommentar


                            • #15
                              Ich arbeite gerade an meinem ersten blog ! und ich bin zu 99,9% fertig ! Zur Sicherheit würde ich gerne (da ich mit $post und $get arbeite ) alles etwas sicherer machen
                              Du solltest in Zukunft, die Sicherheitsmassnahmen schon von Beginn ein integrieren/mitbedenken. Hört sich nun an als hättest Du lauter Sicherheitslücken.

                              Kommentar

                              Lädt...
                              X