Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] finde & zeichen für preg_match nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] finde & zeichen für preg_match nicht

    Hi,

    ich möchte den Request überprüfen, falls ein Script-Kiddy mir eine URL übergeben hat.

    In mein Post wird ausschließlich a-z und & sowie _ vorkommen. Mehr soll nicht erlaubt sein.

    Soweit bin ich jetzt schonmal:
    PHP-Code:
    $input $_SERVER['QUERY_STRING'];
    $input str_replace("kontinent&auswahl="""$input);

    if (
    preg_match('/[^a-z_.-]/i/'$input)) {
      echo 
    "Ungültige Zeichen im Request";
      
    // Wenn alles läuft, dann das auskommentieren, damit die Scriptkiddys, die eine URL includieren wollen auf die Fresse fliegen
      //Header("Location: http://".$_SERVER['SERVER_NAME']);
      //exit();

    Das klappt schonmal ganz gut. Hoffe, das ich jetzt wirklich nur a-z zugelassen habe.

    Problem ist jetzt noch, das ich das & nicht reinbekomme. Egal wie ich es reinsetze (auch mit Maskieren \&) zerhaue ich mir das ganze preg_match.

    Kann einer Helfen ?


  • #2
    Das Ampersand ist eigentlich kein geschütztes Zeichen. Hast du etwa versucht, das hinter das Minuszeichen - zu setzen? Wenn du das nicht maskierst, interpretiert PHP das automatisch als Bereichsangabe.
    Außerdem verstehe ich nicht, warum du hinter dem i-Flag noch einen Slash hast. Der Punkt muss übrigens auch maskiert werden.
    Code:
    /[^a-z_\.\-&]/i
    sollte funktionieren.
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      haa... super.Klappt.
      Hab es nun noch weiter eingeengt.

      '/[^a-z_\&]/i

      Den Punkt hatte ich drin damit mein restliches Script klappt, weil & halt noch nicht klappte.

      Dankeschön

      (Wobei ich wetten könnte, das ich \& innerhalb der [] schon versucht hatte .. naja. Nun klappt ja)

      Kommentar


      • #4
        Wie ich schon schrieb, lag es wohl daran, dass du es hinter das unmaskierte Divis geschrieben hast. Und eigentlich muss das Et-Zeichen nicht maskiert werden.
        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

        Kommentar


        • #5
          Oki... wenn du es sagst... kann mich leider nicht mehr genau dran erinnern, in welcher Konstellation ich es schon versucht hatte.

          Aber so wie es jetzt ist, macht es Sinn.


          Dummerweise hängt mein Script jetzt an einer anderen Stelle, was mit array zu tun hat. KAnn ich das hier auch nochmal posten (gleiches Script) aber ein anderes Problem. (ergo anderer Title <= sonst mach ich n neues Topic auf)

          Problem:
          Bisher hab ich eine Variable per Hand gefüllt.

          PHP-Code:
          $zuordnung_reihenfolge = array('Europa''Afrika''Asien', ... etc...); 
          Nun soll ich dieses array dynamisch gestalten. Und zwar anhand des Request.

          Soweit bin ich jetzt schon:
          PHP-Code:
          $input $_SERVER['QUERY_STRING'];
          $input str_replace("domains&auswahl="""$input);  


          // preg_match Code (gekürzt)

          $count = (substr_count($input'&') + 1);      //Zähle wieviel Werte übergeben worden sind
                  
          $splitt explode("&"$input);        //Scheide die Übergabewerte nach & ab
                  
                  
          $a=0;
                  
          $zuordnung = array();
                  while(
          $count $a)
                  {
                      
          $zuordnung_reihenfolge .= "'".$splitt[$a]."',";
                      
          $a++;
                  }
                  
          print_r($zuordnung_reihenfolge); 
          Das kommt aus dem Quelltext
          Code:
          'Europa','Asien',
          Lasse ich mein manuelles array ausgeben bekomme ich:
          PHP-Code:
          Array
          (
          ...
          ...
              [
          2] => Europa
              
          [3] => Afrika
              
          [4] => Asien
          ...
          ...

          Sprich mit key. <= besagte PHP Funktion bekomme ich aber einfach nicht in meine Schleife rein... zumindest nicht in einen funktionsfähig Zustand.

          Kommentar


          • #6
            Was du da tust, ergibt auch keinen Sinn, wenn du ein Array haben willst.
            PHP-Code:
            $zuordnung_reihenfolge .= "'".$splitt[$a]."',"
            Ist Schwachsinn. Du meinst sicherlich eher
            PHP-Code:
            $zuordnung_reihenfolge[] = $splitt[$a]; 
            Aber das sind eigentlich Grundlagen.
            Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

            Kommentar


            • #7
              omg.

              ich hatte es tatsächlich schon so ähnlich gehabt. Ich wuste, das da irgendwas mit einer Klammer war.
              Drum hab ich die Variable $zuordnung_reihenfolge auch anfänglich mit $zuordnung_reihenfolge = array(); eingeleitet.

              Nur hatte ich es immer so versucht
              $zuordnung_reihenfolge() .= $splitt[$a];

              Was zu einen Fehler führte.

              Aber das sind eigentlich Grundlagen.
              Bin Azubi 1LJ und versuche das ja zu lernen. Bin grad an meine "Hausaufgaben" dran.

              Danke für deine Hilfe

              Kommentar


              • #8
                $zuordnung_reihenfolge() .= $splitt[$a];
                ist schon aus dreierlei Hinsicht falsch. Erstens versucht PHP eine Funktion mit dem Namen des Inhalts von $zuordnung_reihenfolge zu finden, zweitens kann man einer Funktion keinen Wert zuweisen, sondern nur Parameter übergeben und drittens ist der Operator .= auch falsch an dieser Stelle, da hier keine Stringverkettung stattfindet.

                Bin grad an meine "Hausaufgaben" dran.
                Anderer Leute Hausaufgaben machen wir hier aber eigentlich eher ungern.
                Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                Kommentar


                • #9
                  PHP-Code:
                  $count = (substr_count($input'&') + 1);      //Zähle wieviel Werte übergeben worden sind
                          
                  $splitt explode("&"$input);        //Scheide die Übergabewerte nach & ab
                          
                          
                  $a=0;
                          
                  $zuordnung = array();
                          while(
                  $count $a)
                          {
                              
                  $zuordnung_reihenfolge .= "'".$splitt[$a]."',";
                              
                  $a++;
                          } 
                  Ziemlicher Murxcode. Du trennst die URL nach & in ein Array auf, dann durchläufst DU das Array ziemlich kompliziert, um ein identisches Array zu erzeugen. Fehlt nur noch, dass Du am Ende implode ('&') schreibst.

                  PHP-Code:
                  $splitt explode("&"$input);
                  var_dump ($splitt); 
                  Im übrigen heißt es split, Splitt findet man auf der Straße,.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    PHP-Code:
                    $count = (substr_count($input'&') + 1);      //Zähle wieviel Werte übergeben worden sind
                            
                    $splitt explode("&"$input);        //Scheide die Übergabewerte nach & ab
                            
                            
                    $a=0;
                            
                    $zuordnung = array();
                            while(
                    $count $a)
                            {
                                
                    $zuordnung_reihenfolge .= "'".$splitt[$a]."',";
                                
                    $a++;
                            } 
                    Ziemlicher Murxcode. Du trennst die URL nach & in ein Array auf, dann durchläufst DU das Array ziemlich kompliziert, um ein identisches Array zu erzeugen. Fehlt nur noch, dass Du am Ende implode ('&') schreibst.

                    PHP-Code:
                    $splitt explode("&"$input);
                    var_dump ($splitt); 
                    Im übrigen heißt es split, Splitt findet man auf der Straße,.

                    *tränen wegwischt*
                    "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

                    Kommentar


                    • #11
                      Was dürfen wir jetzt unter diesem Kommentar verstehen?
                      Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                      Kommentar


                      • #12
                        Zitat von nikosch Beitrag anzeigen
                        Ziemlicher Murxcode. Du trennst die URL nach & in ein Array auf, dann durchläufst DU das Array ziemlich kompliziert, um ein identisches Array zu erzeugen.
                        ohh... stimmt. explode erzeugt mir ja ein array, so wie ich es brauche.
                        Wuste ich nicht. Dachte ich bekomme es normal (also ohne key) zurück.
                        Drum hatte ich es in eine Schleife gepackt, die mir dann [key]=>[value] zurückliefert. Doch mal öfterer print_r einsetzen ^^
                        PHP-Code:
                            $zuordnung_reihenfolge explode("&"$input);        //Scheide die Übergabewerte nach & ab || Erzeugt ein array

                                
                        unset ($zuordnung_reihenfolge[0]);        // Wegschneiden von domain
                                
                        unset ($zuordnung_reihenfolge[1]);        // Wegschneiden von auswahl
                                
                        $zuordnung_reihenfolge array_values($zuordnung_reihenfolge);    // Neu durchsortieren ^^ 
                        Ich vermute mal, das jetzt noch einer einen noch kürzeren Vorschlag für die unset Lösung unterbreitet. Aber gemäß meines Wissenstands finde ich diese Lösung recht praktikabel (und funzt auch gut)

                        PHP-Code:
                        $splitt explode("&"$input);
                        var_dump ($splitt); 
                        Im übrigen heißt es split, Splitt findet man auf der Straße,.
                        DER war gut. Tränen hab ich zwar noch nicht im Auge... aber du bist damit schon mal der erste, der mich heute früh zum lachen gebracht hat :->

                        Kommentar


                        • #13
                          Wuste ich nicht. Dachte ich bekomme es normal (also ohne key) zurück.
                          Wie meinst du das? Arrays haben immer Keys und zwar entweder numerische oder textliche. Wenn du dachtest, dass explode() einen String zurückgibt, dann hätte die Funktion ja de facto keinen Sinn, da sie alles so wieder zurückgibt, wie sie es bekommen hat. Im Zweifelsfalle immer im Manual nachschlagen: [MAN]explode[/MAN]().

                          Ich vermute mal, das jetzt noch einer einen noch kürzeren Vorschlag für die unset Lösung unterbreitet.
                          Vielleicht so:
                          PHP-Code:
                          $zuordnung_reihenfolge array_slice($zuordnung_reihenfolge2); 
                          Aber ich würde dir ehrlich empfehlen, bei URLs mit [MAN]parse_url[/MAN]() zu arbeiten. Damit minimierst du das Risiko, irgendetwas zu übersehen.
                          Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                          Kommentar


                          • #14
                            Ich vermute mal, das jetzt noch einer einen noch kürzeren Vorschlag für die unset Lösung unterbreitet.
                            PHP: array_slice - Manual

                            [edit] zu spät

                            // Neu durchsortieren ^^
                            ist auch nur bedingt notwendig, je nachdem, wie du mit dem Array weiterarbeitest. Mit der foreach-Schleife kannst du auch dieses Array ganz einfach durchlaufen und gleichzeitig Schlüssel und Wert auslesen.
                            http://hallophp.de

                            Kommentar


                            • #15
                              array_slice() vergibt ja auch neue Keys, wenn man den vierten Parameter nicht auf true setzt.
                              Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                              Kommentar

                              Lädt...
                              X