zu lange ladezeiten bei array mit tausenden datensätzen

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

  • zu lange ladezeiten bei array mit tausenden datensätzen

    Jetzt brauch ich ne gute lösung.

    Ich baue da doch an so nen SPAM und Wurmprotector... jetzt hab ich mir in laaanger kleinarbeit bad ips und so zusammen gesucht diese stehen untereinander in einer txt datei.

    diese datei lese ich mit file() in ein arry und prüfe ob die REMOTE_ADDR dort existiert...

    taja das problem liegt eigentlich auf der hand, es vergehen sekunden bis das array mit den tausenden datensätzen durchlaufen wurde.

    Gibt es eine schnellere möglichkeit (ausser mysql - da das tool ja ohne DB läuft)?

  • #2
    SQLite
    shell_exec('grep ...')

    Kommentar


    • #3
      Deine Datei anders organisieren. Du könntest zum Beispiel je nach IP-Range eine andere Datei verwenden, so dass diese Datensätze aufgeteilt werden!

      Kommentar


      • #4
        was spricht gegen sowas?

        PHP-Code:

        $ip 
        $_SERVER['REMOTE_ADDR'];
        $bad file("addr.txt");

        if(
        in_array($ip$bad))
          echo 
        "BAAAAAAAD";
        else
          echo 
        "OKAY"
        andererseits würde das mit MySQL, wo die IP als Zahl drinnen steht VIIIIEEEL schneller gehen!

        SELECT count(*) FROM bad_ips WHERE ip = $ip

        1000 Array Einträge sind n Klax!
        Find Parties?
        Partysuche

        Kommentar


        • #5
          Also von dem was ihr mir bis jetzt gepostet habt, kann ich nur in_array() ausprobieren... sofern das schneller als eine while-schleife ist...

          MySql ist sicher die beste lösung, aber das kann ich nicht nehmen da ich ja versuche sql-injects zu filtern... da macht es wenig sinn es aus einer DB zu holen da ich ja sonst so wieder eine lücke geschaffen habe und nicht jeder MySql hat

          mit
          SQLite
          shell_exec('grep ...')
          kann ich garnichts anfangen... zumal ich ja ein tool bau was auf jedem server laufen soll.

          Kommentar


          • #6
            ... aber das kann ich nicht nehmen da ich ja versuche sql-injects zu filtern... da macht es wenig sinn es aus einer DB zu holen da ich ja sonst so wieder eine lücke geschaffen habe und nicht jeder MySql hat
            das ist unsinn - warum sollte es eine lücke sein?
            zumal ich ja ein tool bau was auf jedem server laufen soll.
            auch ohne php und internetzugang? diese utopische vorstellung solltest du näher spezifizieren.
            Zuletzt geändert von penizillin; 23.08.2007, 14:38.

            Kommentar


            • #7
              das ist unsinn - warum sollte es eine lücke sein?
              Denke ich nicht... ich durchsuche als aller erstes (direkt nach <?php ) den querystring nach sql-injects und und und... heißt also wenn ich vorher meine mysql-datenbank nach badwords abfrage ist sie geöffnet und böse leute können so versuchen zuerst mein tool zu hebeln dann die seite... also warum nicht meine badwords erst ohne datenbank? wo keine datenbank verbindung besteht kann doch auch keiner rein... somit hab ich dieses sicherheitsrisiko ausgeschlossen

              auch ohne php und internetzugang? diese utopische vorstellung solltest du näher spezifizieren.
              brauch ich nicht... du weißt wie es gemeint ist! Falls du doch drauf bestehst und andere user es ja dann nicht verstehen würden und so weiter, bitte schön:

              "zumal ich ja ein tool bau was auf jedem server laufen soll." welcher einem internetzugang und auf dem php läuft... oder besser: welches auf einem webserver mit php und internetverbindung laufen soll
              Zuletzt geändert von Nordin; 23.08.2007, 14:55.

              Kommentar


              • #8
                Denke ich nicht... ich durchsuche als aller erstes (direkt nach <?php ) den querystring nach sql-injects und und und... heißt also wenn ich vorher meine mysql-datenbank nach badwords abfrage ist sie geöffnet und böse leute können so versuchen zuerst mein tool zu hebeln dann die seite... also warum nicht meine badwords erst ohne datenbank? wo keine datenbank verbindung besteht kann doch auch keiner rein... somit hab ich dieses sicherheitsrisiko ausgeschlossen
                Quatsch, solange du Daten für Datenbankabfragen entsprechend escapest und dich an Grundregeln hälst besteht da keine Gefahr, zumal du bei einem Dateizugriff (falls Variabel) die gleichen Probleme hättest.

                Wenn du beim Textfile bleiben willst (und bei der Struktur) helfen dir evtl. serialisierte Arrays weiter, am besten mit der IP als Key, dann kannst du schneller prüfen ob die IP vorhanden ist.
                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar


                • #9
                  Jap will bei Textfiles bleiben... so können es auch mehr user nutzen...

                  ich hab mir es grad so überlegt das ich die IP-Rangen auf einzelne files verteile. z.b 1.txt dort sind dann alls ips der Range 1.xxx.xxx.xxx drin bis hin zu 255.xxx.xxx.xxx

                  $ip = $_SERVER['REMOTE_ADDR'];
                  wenn $ip range == 10 dann nimm 10.txt und prüfe ob ip vorhanden

                  von serialisierte Arrays hatte ich noch nichts gehört, werd ich mir mal anschauen

                  Kommentar


                  • #10
                    Original geschrieben von Nordin
                    Jap will bei Textfiles bleiben... so können es auch mehr user nutzen...
                    schon richtig, mysql wird nämlich im zusammenhang mit php von ganz wenigen hostern angeboten.

                    Original geschrieben von Nordin
                    ich hab mir es grad so überlegt das ich die IP-Rangen auf einzelne files verteile. z.b 1.txt dort sind dann alls ips der Range 1.xxx.xxx.xxx drin bis hin zu 255.xxx.xxx.xxx
                    dolle idee von dir
                    Original geschrieben von PHP-Desaster
                    Du könntest zum Beispiel je nach IP-Range eine andere Datei verwenden, so dass diese Datensätze aufgeteilt werden!
                    wobei die letzten stellen der ip eine bessere streuung geben würden.
                    254 einzelne dateien? meine fresse, hast du viele spam-ips. werden die eigentlich nach einer gewissen zeit gelöscht, oder hat derjenige pech, der nach ner woche zufällig eine von den ips zugewiesen bekommt?

                    ehrlich gesagt habe ich auch keinen plan, was du da veranstaltest http://www.ctxtra.de/ und wer das nutzen soll.

                    Kommentar


                    • #11
                      @3DMax

                      Mir und vielen anderen usern hat es bis jetzt geholfen. Du musst es ja nicht nutzen...

                      Zumal es hier nicht um sinn oder unsinn geht sondern um eine frage...

                      Und ja ich habe viele IPs, sehr viele IPs gesammelt aus ebensovielen blacklists aus den tiefen des internets... Wenn deine IP in der liste ist hast du pech richtig!

                      Wie machst du es wenn deine IP im Spamhaus ( http://www.spamhaus.org/sbl/index.lasso ) landet?? Sie löschen oder? Gut. Übersinn und unsinn brauchen wir hier nicht zu reden da hatte ich schonmal einen Beitrag zu verfasst...

                      Kommentar


                      • #12
                        ehrlich gesagt habe ich auch keinen plan, was du da veranstaltest http://www.ctxtra.de/ und wer das nutzen soll.
                        OffTopic:
                        Voralldem wenn man sich so schnell ausperren kann, und wenn die Software meint ?action=delete sei ein Sicherheitsrisiko ...irgendwie der falsche Ansatz.
                        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                        Kommentar


                        • #13
                          Original geschrieben von Nordin
                          Zumal es hier nicht um sinn oder unsinn geht sondern um eine frage...
                          klar geht es darum!
                          Der CTXtra blockt und loggt Angriffe dass du sie auswerten und anderen usern zur Verfügung stellen kannst. Die Zusammenarbeit aller User gewährleistet einen noch höheren Schutz gegen SPAM und Angriffen.
                          heißt für mich im klartext, dass jedes scriptkiddy deine blacklisten manipulieren kann, so dass sie völlig unbrauchbar sind.
                          jetzt ist mir auch klar, warum du soviele einträge hast

                          Kommentar


                          • #14
                            @3DMax
                            heißt für mich im klartext, dass jedes scriptkiddy deine blacklisten manipulieren kann, so dass sie völlig unbrauchbar sind.
                            jetzt ist mir auch klar, warum du soviele einträge hast
                            Du verstehst da irgendwas völlig falsch...

                            und wenn die Software meint ?action=delete sei ein Sicherheitsrisiko
                            Das ist ebenfalls nicht richtig... die software hat in diesem fall "delete" gefunden und da die software leider noch nicht lernen und denken kann hat sie es als angriff gewertet... Im ACP hat man dann die möglichkeit das erkannte "Badword" (im falle das es eine variable oder so ist die man in seinen sacripten benutzt) in eine whitelist einzutragen... das macht man dann einmal und gut... alles andere was dann über die url reinkommt (GET) wird als angriff gewertet.

                            Bei mir konnte ich auf 5 verschiedenen Seiten 30 angriffe in zwei tagen blocken und nicht ein einziger geblockter ist ein guter gewesen... heißt also das er funktioniert!! Dieser angriff wird geloggt und die ip wird gespeichert... versucht ein anderer user die seite dann aufzurufen und hat er die dann zufällig die geblockte ip bekommen, wird im eine meldung gezeigt das er eine email an den admin schreiben soll... optinal wird in der nächsten version die geblockte ip 48 stunden geblockt... jetzt komm mir bitte nicht wieder mit nicht sinnvoll... bei mir und anderen user funktioniert es... falls du den sinn noch nicht richtig verstanden hast, dann lies dort im forum nach oder unterhalt dich dort mit usern die ihn bereits nutzen dann könnt ihr gern solche aussagen treffen... aber ohne ihn getestet zu haben ist es reine spekulation was ihr macht.

                            Kommentar


                            • #15
                              Original geschrieben von Nordin
                              Du verstehst da irgendwas völlig falsch...
                              du erklärst es aber auch nicht genauer.

                              Original geschrieben von Nordin
                              Im ACP hat man dann die möglichkeit das erkannte "Badword" (im falle das es eine variable oder so ist die man in seinen sacripten benutzt) in eine whitelist einzutragen... das macht man dann einmal und gut... alles andere was dann über die url reinkommt (GET) wird als angriff gewertet.
                              der ansatz ist völlig falsch, gewöhnlich werden parameter ausschließlich anhand einer whitelist gefiltert, dann kann man sich solche ungetüme:
                              http://www.php-resource.de/forum/sho...5&pagenumber=1
                              sparen, da sie eh nicht alle fälle abdecken können, langsam und fehlerträchtig sind.
                              aber mach mal.

                              Kommentar

                              Lädt...
                              X