Index 0 aus array entfernen?

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

  • #16
    Zitat von RamonaS Beitrag anzeigen
    zu 3:
    Damit ich auch sicher bin das die varablen/arrays sich nicht addieren oder sowas in der art.
    Wenn die Funktion so groß ist, dass du den Überblick über deine Variablen verlierst, machst du irgendwas falsch.

    Kommentar


    • #17
      Was macht ihr da an stelle von PHP_SELF ?
      Ich?
      Einfach nur weglassen.
      Wir werden alle sterben

      Kommentar


      • #18
        Du kannst PHP_SELF benutzen, darfst es nur nicht unbehandelt im Kontext HTML ausgeben - htmlspecialchars hilft.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #19
          $_SERVER['SCRIPT_NAME'] ist meist sicherer. Prüfe vor der Verwendung ob das auf deinem System auch so ist.

          Aber wie schon gesagt: Enfach weglassen wäre das Einfachste.
          Wir werden alle sterben

          Kommentar


          • #20
            Zitat von combie Beitrag anzeigen
            $_SERVER['SCRIPT_NAME'] ist meist sicherer.
            Und beide nur brauchbar, wenn es auch eine direkte Beziehung URL <-> Scriptname gibt.
            REQUEST_URI, ggf. zerlegt, ist manchmal als Alternative brauchbar.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #21
              Hallo,

              Ok die vorschläge schein sich ja ganz vielfältig zu sein.

              Ich würde das mal von der anderen seite angehen, also Frage zu Punkt 2 von combie:
              >2. PHP_SELF ermöglicht u.U. XSS Attacken

              Was für Schaden kann man jetzt hier überhaupt anrichten?
              ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

              Kommentar


              • #22
                Dein Google kaputt?
                Cross-Site Scripting ? Wikipedia
                Wir werden alle sterben

                Kommentar


                • #23
                  Zitat von combie Beitrag anzeigen
                  Ähmm nicht kaputt, aber ich befasse mich weniger mit schlechtigkeites dieser art...auf was menschen für ideen kommen - fantastisch!

                  Ok ich lese mir das mal durch, scheint aber ne komplizierte sache zu sein.

                  Im notfall erlaube ich in eingabefelder nur die zeichen die man da drin wirklich braucht.
                  ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

                  Kommentar


                  • #24
                    Zitat von RamonaS Beitrag anzeigen
                    Ähmm nicht kaputt, aber ich befasse mich weniger mit schlechtigkeites dieser art...auf was menschen für ideen kommen - fantastisch!
                    Gehe prinzipiell immer davon aus, dass alles, was nicht unter deiner Kontrolle steht, böse sein kann. Und was der Benutzer auf seiner Seite im Browser (oder mit anderer Software) macht, kannst du nicht kontrollieren, somit erwarte immer das Schlimmste.

                    Wer im Internet gutgläubig ist, handelt sehr fahrlässig. Es gibt 99,9% "ordentliche" Menschen und 0,1% "böse" Menschen. Und diese 0,1% haben sich zur Aufgabe gemacht, die 99,9% auszunehmen. Logischerweise sind die auch nicht ganz blöd und probieren das zuerst bei denen, die "schwach" erscheinen. Wenn du also eine öffentliche (!!!) Webseite betreibst, dir aber um Sicherheit keine Gedanken machst, bist du "schwach" und somit ein leichtes und einfaches Angriffsziel.

                    Kommentar


                    • #25
                      Zitat von RamonaS Beitrag anzeigen
                      Naja, ich hab eigentlich keine daten von der zeit als timestamp noch kürzer als 10 zeichen war.
                      Genau so eine Antwort hatte ich erwartet.

                      ...aber ich werde die "unvermeidliche preg_replace()-Lösung" von dir zum einsatz bringen.
                      Das "unvermeidlich" bezog sich einerseits darauf, dass mir diese Lösung als erstes eingefallen ist (bevor ich auf die Suche nach Lösungen mit den str_schlagmichtot-Funktionen gegangen bin); und andererseits darauf, dass man so eine Lösung wohl von mir erwartet (hätte).

                      Ich muß dir allerdings gestehen, die regex sind für mich noch viel schlimmer als mit arrays rum zu handieren.
                      Das lernt man mit der Zeit. Der RegEx ist doch eigentlich ganz simpel: Ein bisschen Patternmatching -- keinmal bis vielmal ein fast beliebiges Zeichen außer "|" und danach ein "|" -- und davor eine Verankerung am Stringanfang "\A".

                      Ich lass die dann gleich so denn wenn ich da dran fummel tut sie garantiert nicht mehr.
                      Aber nur durchs Dranrumfummeln lernt man, wie sie funktionieren.

                      Zitat von wahsaga Beitrag anzeigen
                      Das ist in so einem simplen Fall keine gute Idee.

                      explode leistest hier ganz simpel das gewünschte.
                      Ganz offensichtlich nicht, denn es liefert ein Array zurück, wir wollten doch aber mit echo eine Zeichenkette ausgeben, oder hab ich was übersehen?

                      Das es sicher schneller als preg_split() ist, ist eine andere Sache.

                      Reguläre Ausdrücke sind i.a.R. kostenintensiver als einfache Stringfunktionen.
                      Schön, dass du die Pauschalaussage mit "i.a.R." abgeschwächt hast.


                      Ich hab das jetzt mal durchgetestet:
                      PHP-Code:
                      $zt '1234567890|gaga|gogo|tralafitti';     // teststring

                                                                   //         1     100_000
                                                                   // durchlauf  durchläufe  durchläufe
                                                                   //     in ms       in ms       pro s
                      list (, $out) = preg_split('/\|/'$zt2);  //     0.004     377.204      265108
                      preg_replace('/\A[^|]*\|/'''$zt);        //     0.003     330.124      302916
                      list (, $out) = explode('|'$zt2);        //     0.002     248.582      402281
                      substr($ztstrpos($zt'|') + strlen('|')); //     0.002     234.148      427080
                      substr($ztstrpos($zt'|') + 1);           //     0.002     174.253      573878 
                      Die Variante mit preg_replace() läuft im Schnitt ca. 30 Prozent langsamer als die mit explode(). Kostenintensiv ist was anderes.

                      Kommen wir nun von der Geschwindigkeit zur Schönheit. Die liegt bekanntlich im Auge des Betrachters und ist daher schwerer messbar ... :-P

                      Zitat von RamonaS Beitrag anzeigen
                      @fireweasel
                      So ich hab das jetzt so gemacht:
                      PHP-Code:
                      if(isset($_GET['uo']) and $_GET['uo']=="s"# Link wurde geklickt
                       
                      {echo "<br /><br />";
                        
                      $arr=explode("\n",file_get_contents($_SERVER["DOCUMENT_ROOT"]."/useronline.txt"));
                        foreach(
                      $arr as $line)
                         {echo 
                      "<br />".preg_replace('/\A[^|]*\|/','',$line),"\n";} # Ganze Zeile anzeigen, ausser Arayy Index 0
                       
                      }
                      else
                       {echo 
                      "<a href='".$_SERVER['PHP_SELF']."?uo=s'>(".$all.")</a>";}

                      unset(
                      $dx,$arr,$line,$zt); 
                      Würdest du sagen das dieser scriptteil jetzt perfekt ist oder nur zu 100% ok?
                      Ich habe mal die schon gegebenen Vorschläge eingearbeitet:

                      PHP-Code:
                      define('cgi_user_online''uo');

                      // ...

                      function blarg() {
                          
                      // ...
                          
                      $file_user_online $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR 'useronline.txt';
                          
                      $url_self $_SERVER['PHP_SELF']; // oder ein sinnvollerer Wert

                          // ...
                          // empty () funktioniert fast immer
                          // Ausnahme: '0' gehoert zu den erwuenschten Benutzereingaben
                          
                      if (!empty ($_GET[cgi_useronline])) {
                              echo 
                      '<br /><br />';
                              
                      // Datei zeilenweise in Array einlesen
                              // Leerzeilen werden ausgelassen
                              // Zeilenumbrueche entfernt
                              
                      $arr file($file_useronlineFILE_SKIP_EMPTY_LINES FILE_IGNORE_NEW_LINES);
                              if (empty (
                      $arr)) {
                                  
                      // Datei konnte nicht gelesen werden oder war leer, also brechen wir hier ab
                                  
                      return false;
                              }
                              foreach (
                      $arr as $line) {
                                  
                      // entfernt das erste Feld des "Datensatzes" und Trennzeichen "|"
                                  
                      echo '<br />'preg_replace('/\A[^|]*\|/'''$line), "\n";
                              }
                          }
                          else {
                              echo 
                      sprintf(
                                  
                      '<a href="%s"?%s=s>(%s)</a>',
                                  
                      htmlspecialchars($url_selfENT_QUOTES),
                                  
                      cgi_user_online,
                                  
                      htmlspecialchars($all)
                              );
                          }
                          
                      // ...
                          
                      return true// oder ein sinnvollerer Rueckgabewert

                      So in etwa würde ich das machen. Es gibt da sicher immer noch Verbesserungsmöglichkeiten, aber um die umzusetzen, müsste man mehr über das gesamte Script wissen. Was mir vor allem nicht gefällt, sind die ganzen festverdrahteten Zeichenketten. Wer sowas mal an andere Dateinamen, Pfade oder CGI-Parameter anpassen muss, darf fleißig das ganze Script umkrempeln. Viele (Quelltext-)Editoren bieten zu diesem Zweck in ihren Search-n-Replace-Dialogen übrigens Reguläre Ausdrücke an. Auf diese Weise kann man die auch üben.

                      Für änderungsvorschläge hab ich immer ein offenes auge.
                      Offenes Auge? Oder meintest du eher ein offenes Ohr?
                      Naja, immer noch besser als ein offenes Bein ...
                      Zuletzt geändert von fireweasel; 04.07.2009, 23:13.
                      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                      Kommentar


                      • #26
                        Zitat von fireweasel Beitrag anzeigen
                        Ganz offensichtlich nicht, denn es liefert ein Array zurück, wir wollten doch aber mit echo eine Zeichenkette ausgeben, oder hab ich was übersehen?
                        Ganz zum Anfang des Threads hiess es:
                        Ich möchte per echo den inhalt aller array-elemente ausgeben, ausser dem ersten elemend - index 0
                        Das mit dem Array kam hier höchstvermutlich daher, dass es schon explode genutzt wurde - aber eigentliches Anliegen wahr wohl, von einer vorliegenden Zeile nur den Rest ab einer bestimmten Position auszugeben.

                        Und je nachdem, wie einfach diese Position bestimmbar ist, wären hier weder RegEx noch explode meine erste Wahl, sondern simple Zeihenkettenfunktionen (wie strpos und substr).
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #27
                          Zitat: Was macht ihr da an stelle von PHP_SELF ?

                          Zitat von combie Beitrag anzeigen
                          Ich?
                          Einfach nur weglassen.
                          Da wollte ich nochmal nachhacken:
                          Soviel ich weiß ist das nicht valide, ausserdem ist das doch genau so gefährlich als vorher, ainschläußen kann man dort auch fremden code, oder?

                          <a href="">Link</a>
                          <a href="#">Link</a>
                          Beide varianten sind laut w3c in xhtml nicht zuläßig, ein link muß auch eine eindeutige linkadresse beinhalten!
                          ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

                          Kommentar


                          • #28
                            Zitat von RamonaS Beitrag anzeigen
                            <a href="">Link</a>
                            <a href="#">Link</a>
                            Beide varianten sind laut w3c in xhtml nicht zuläßig,
                            Wo hast du denn die Info her?
                            ein link muß auch eine eindeutige linkadresse beinhalten!
                            Ein leeres href/action-Attribut wird automatisch zur Adresse, von der das Dokument angefordert wurde, aufgelöst.
                            ausserdem ist das doch genau so gefährlich als vorher, ainschläußen kann man dort auch fremden code, oder?
                            Wo soll denn etwas eingeschleust werden, wenn gar nichts ausgegeben wird?

                            Hast du verstanden, worauf XSS beruht ...?


                            (Davon abgesehen verstehe ich die Panik, die einige hier machen, was Werte wie PHP_SELF, REQUEST_URI etc. angeht, nicht.
                            Vernünftig kontextgerecht behandelt stellt keiner davon eine XS-Gefahr dar.)
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #29
                              Soviel ich weiß ist das nicht valide,
                              Was ist da nicht valide?
                              Das action oder href Attribut MUSS vorhanden sein, aber es darf leer bleiben!

                              ainschläußen kann man dort auch fremden code, oder?
                              Dann aber nicht mehr über PHP_SELF.
                              Besser eine Tür mehr zu, als eine mehr offen.

                              Vernünftig kontextgerecht behandelt stellt keiner davon eine XS-Gefahr dar.
                              Nach entsprechnder Ausbildung, bei bestimmungsgemäßer Anwendung und mit richtiger Schutzkleidung ist eine 70cm 3.8PS Kettensäge auch recht ungefährlich.
                              Aber das alles ist bei RamonaS offensichtlich nicht gegeben.
                              Zuletzt geändert von combie; 06.07.2009, 14:39.
                              Wir werden alle sterben

                              Kommentar

                              Lädt...
                              X