Hacker Angriff?

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

  • Hacker Angriff?

    Hallo,
    jemand postet derzeit immer wieder folgende Nachricht:
    TliyWc <a href=\"http://zoqrqnyefkvp.com/\">zoqrqnyefkvp</a>, sfrathtxqbnk, [link=http://shnndgkqtmyv.com/]shnndgkqtmyv[/link], http://qpvcjszpdzxi.com/
    Kann das ein Hackerangriff sein?
    Zuletzt geändert von sanktusm; 26.01.2016, 11:42.

  • #2
    Muß es denn immer gleich ein Hacker sein?!
    Das ist stinknormaler Spam. Kommen die Eingaben über ein Formular? Dann ist der nicht ausreichend gegen SpamBots geschützt!

    Kommentar


    • #3
      So,

      nur kurz, ich habe n coolen code geschrieben um Spam zu vermeiden - falls du genug hast von captchas usw. -> verwende doch meine Botstop PHP Klasse PHP Bot Protection: Detection of bot users asking predefined questions - PHP Classes

      Dies ist als reine Hilfestellung gedacht!

      Und außerdem ist die Klasse kostenlos!


      Gruß Robert
      Immer eine Handbreit Puffer unterm Code

      Kommentar


      • #4
        OT:

        You need to be a registered user and login to get this file.

        […]

        The registration requirement is an option of the package author. This package has that option set.
        Ich fand den Gedanken hinter phpclasses.org ja immer gut, aber die Seite ist aus Nutzersicht sooo nervtötend. (Ich wollte nur den Source einsehen.) Und ich glaube, dass das schon Absicht ist. Da gibt es wirklich bessere Optionen, Software zu verbreiten.

        Kommentar


        • #5
          Hallo,

          Ich rate dem TE und anderen davon ab, die Klasse zu verwenden.

          Ein paar Gründe von vielen:
          • offensichtliche HTTP-Header-Probleme werden mit @ eleminiert
          • [FONT="Courier New"][COLOR="DarkGreen"]include[/COLOR][/FONT] des Fragen-Katalogs im Konstruktor
          • Sind Fragen/Antworten nicht auch irgendwie Captchas?


          Sorry, die Klasse ist m.M.n. allein von der Umsetzung nicht zur Verbreitung zu empfehlen.

          Gruß Arne

          Kommentar


          • #6
            Zitat von ArneDrews Beitrag anzeigen
            Hallo,

            Ich rate dem TE und anderen davon ab, die Klasse zu verwenden.

            Ein paar Gründe von vielen:
            • offensichtliche HTTP-Header-Probleme werden mit @ eleminiert
            • [FONT=Courier New][COLOR=DarkGreen]include[/COLOR][/FONT] des Fragen-Katalogs im Konstruktor
            • Sind Fragen/Antworten nicht auch irgendwie Captchas?


            Sorry, die Klasse ist m.M.n. allein von der Umsetzung nicht zur Verbreitung zu empfehlen.

            Gruß Arne
            Es tut mir sehr Leid aber du bist wahrscheinlich auch einer, der es selbst nicht hinbekommt auf komfortable Art und Weise User von Bots zu trennen!

            Wenn du @session_start() meinst? Darfst du drei Mal raten warum?

            Kommst wahrscheinlich eh ned drauf!

            Ich finds ne rießen Sauerei hier so ein Schwachsinn zu posten -> Sorry aber das Script funktioniert Einwandfrei! 250 Downloads sprechen für sich!!!

            So und jetzt muss ich mich erstmal abreagieren!


            Robert
            Zuletzt geändert von ibor; 07.02.2016, 18:13.
            Immer eine Handbreit Puffer unterm Code

            Kommentar


            • #7
              So ich will mal Auflösen,

              du solltest dir mal das hier ansehen:

              https://www.owasp.org/index.php/Full_Path_Disclosure

              Deshalb auch @session_start() - denn es gibt viele viele Menschen, die nicht die Möglichkeit haben, diese Meldung abzuschalten!


              So und nun viel Spass beim Weiterbilden !


              Gruß Robert
              Immer eine Handbreit Puffer unterm Code

              Kommentar


              • #8
                Ehe du hier so nen Aufstand machst, nutze das session_start doch mal richtig.
                Das @ brauchst du nicht, wenn die Session noch nicht gestartet ist und noch keine Header gesendet wurden.

                Beides! kann man ordentlich abfragen:
                PHP-Code:
                if( session_status() == PHP_SESSION_NONE && ! headers_sent() ) {
                    
                session_start();

                TBT

                Die zwei wichtigsten Regeln für eine berufliche Karriere:
                1. Verrate niemals alles was du weißt!


                PHP 2 AllPatrizier II Browsergame

                Kommentar


                • #9
                  Ehrlich gesagt: Solche Themen sind immer extrem knifflig bis gar nicht sinnvoll zu behandeln, wenn man dazu auch noch von einem Anwender ausgeht, der so unbedarft ist, dass er sich zu einem x-beliebigen Zeitpunkt was im global state zerschießt (Session-Gedöns kann von überall aus dem Code manipuliert werden) und dass er dazu noch davor bewahrt werden soll, dabei Fehlermeldungen zu produzieren.

                  Es lohnt eigentlich nicht, das überhaupt zu versuchen.

                  Wobei es aber natürlich auch nicht verkehrt ist, am Anfang seines Codes mal ein, zwei „Stecker drin?“-Checks zu machen. Wobei da dann wieder die Frage ist, was man bei einem Fehler tut? Man kann ja zum Beispiel keine Exception werfen, wenn man davon ausgeht, dass der Anwender die möglicherweise nicht fängt und dadurch dann Server-Pfade an Besucher gelangen. Wie gesagt: So richtig „tragfähig“ ist der Ansatz nicht, auf so was Rücksicht zu nehmen.



                  Wie sollte man es hier konkret machen?

                  Hängt von der eigenen Philosophie ab. Aus Designsicht unterliegt es sicherlich nicht der Zuständigkeit dieser Klasse, Sessions zu starten. Verträglicher für die Hobbybastler ist es vielleicht schon, ihnen die Session kurz zu starten, wenn sie es nicht gemacht haben, aber… Ich tue mich schwer damit. Der Anwender lernt halt auch nichts, wenn man ihn immer durchs ganz seichte Wasser schippert. Und, na ja, ein paar Grundlagen sollte man schon lieber wissen, wenn man als Anwender am Ende „eigenen“ Code ins Web stellt.

                  Wäre es bei phpclasses.org möglich und wäre die Lizenz des Projekts nicht so inkompatibel, hätte ich dir wahrscheinlich einen Pull-Request geschickt.



                  Letztlich sind es aber auch nur ~40 Zeilen Code. Das ist so kurz, dass sich ein stundenlanges Reflektieren und Diskutieren im Grunde nicht lohnt.

                  Kommentar


                  • #10
                    Hallo zusammen,

                    vielen Dank für eure konstruktive Kritik - ich werde es mir merken und dann evtl. was am Script ändern

                    vielen Dank!



                    Gruß Robert!

                    PS: Ich wüsste auch nicht, warum, wenn im Konstruktor ein include Befehl steht, die Klasse nicht verwendbar wäre?
                    Zuletzt geändert von ibor; 08.02.2016, 20:40.
                    Immer eine Handbreit Puffer unterm Code

                    Kommentar


                    • #11
                      Zitat von ibor Beitrag anzeigen
                      Ich wüsste auch nicht, warum, wenn im Konstruktor ein include Befehl steht, die Klasse nicht verwendbar wäre?
                      Ich darf den Code nicht ansehen, weil ich keinen phpclasses.org-Account habe, deswegen nur eine allgemeine Antwort: Prinzipiell sollte eine Klasse alle ihre benötigten Daten im Konstruktor als Parameter übergeben bekommen und sie sich nicht selber beschaffen.
                      Zuletzt geändert von h3ll; 08.02.2016, 21:55.

                      Kommentar


                      • #12
                        Hallo,

                        ja das mag ja sein, aber deswegen stellt man nicht die Funktionsweise des ganzen Scripts in Frage :/

                        An alle, die sich die Klasse nicht downloaden können, hier der Link http://blog.beran-solutions.de/?wpfb_dl=8

                        ich bitte sehr darum mir konstruktive Kritik zu geben! Schließlich ist die Ausführung: "Sind Fragen/Antworten nicht auch irgendwie Captchas?" nicht sehr Hilfreich

                        Gruß
                        Robert
                        Immer eine Handbreit Puffer unterm Code

                        Kommentar


                        • #13
                          Hallo ibor,
                          habe dir mal einige Anmerkungen riengeschrieben

                          PHP-Code:
                          <?php

                          /**
                           * Description of botstop_class
                           *
                           * @author burncycle
                           */
                          class botstop_class {

                              
                          // was soll das public hier?
                              // diese Member sollten privat sein
                              
                          public $file "answers_questions.php";
                              public 
                          $question "";
                              public 
                          $answer "";
                              public 
                          $lang "de";

                              
                          // der Konstruktor sollte die Fragen und Antworten als
                              // Parameter erhalten und selbst kein include machen
                              
                          public function __construct() {

                                  
                          // das @ entfernen und sesion_start mit einer Bedingung umschliessen
                                  
                          @session_start();

                                  
                          // siehe Methodenhinweis
                                  
                          include($this->file);

                                  
                          $rand rand0count$question[$this->lang] ) - );

                                  
                          $this->question $question[$this->lang][$rand];
                                  
                          $this->answer $answer[$this->lang][$rand];
                              }

                              
                          // keinerlei Funktion, $this->file wird außer im Konstruktor
                              // nicht genutzt
                              
                          public function set_file$file ) {

                                  
                          $this->file $file;
                              }

                              public function 
                          get_question() {

                                  
                          $_SESSION["answer"] = $this->answer;

                                  return 
                          $this->question;
                              }

                              public function 
                          is_correct$answers ) {

                                  
                          // Prüfung ob der array Index existiert fehlt
                                  
                          if( !empty( $_SESSION["answer"] ) ) {

                                      
                          // warum einfache Stringvergleiche mit aufwenigen RegExp?
                                      // diesen ganzen If Zweig kann man durch einfaches
                                      //
                                      // return in_array( strtolower( $answers ), explode( "|", strtolower( $_SESSION["answer"] ) ) );
                                      //
                                      // ersetzen

                                      
                          $answerss explode"|"$_SESSION["answer"] );


                                      if( 
                          count$answerss ) > ) {
                                          
                                          foreach( 
                          $answerss as $value ) {

                                              if( 
                          $bool preg_match"/".preg_quote$value"/" )."/i"$answers ) ) {

                                                  break;
                                              }
                                          }
                                      } else {

                                          
                          $bool preg_match"/".preg_quote$_SESSION["answer"], "/" )."/i"$answers );
                                      }

                                      
                          // einfach "return $bool;" statt dem if/else
                                      
                          if( $bool == true ) {

                                          return 
                          true;
                                      } else {

                                          return 
                          false;
                                      }
                                  } else {

                                      
                          // warum soll der User Cookies aktivieren - unnötig
                                      // außerdem sollte die Klasse keine Ausgabe machen,
                                      // sondern dem umliegen Skript einen entsprechenden Fehler
                                      // zurückgeben
                                      
                          echo "Please Activate Cookies to submit botstop!";

                                      return 
                          false;
                                  }
                              }

                          }
                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Kommentar


                          • #14
                            (Sorry, wird etwas offtopic/meta. Ich finde das Thema recht spannend.)

                            Ich stimme den Anmerkungen zu. Der Vollständigkeit halber noch ein, zwei Ergänzungen.

                            Zitat von TBT
                            PHP-Code:
                                    // Prüfung ob der array Index existiert fehlt
                                    
                            if( !empty( $_SESSION["answer"] ) ) { 
                            Technisch gesehen prüft empty das selbst.

                            PHP-Code:
                                        // warum einfache Stringvergleiche mit aufwenigen RegExp?
                                        // diesen ganzen If Zweig kann man durch einfaches
                                        //
                                        // return in_array( strtolower( $answers ), explode( "|", strtolower( $_SESSION["answer"] ) ) );
                                        //
                                        // ersetzen 
                            Die preg_match-Aufrufe im Originalcode sind nicht verankert (etwa per ^…$ oder – richtiger – \A…\z). Sie verhalten sich dadurch eher wie strpos als wie ==. Das ist aber wahrscheinlich gar nicht so gewünscht, und deine Variante wäre auch noch ein Bugfix.

                            PHP-Code:
                                        // einfach "return $bool;" statt dem if/else
                                        
                            if( $bool == true ) {

                                            return 
                            true;
                                        } else {

                                            return 
                            false;
                                        } 
                            return (bool) $bool;

                            preg_match liefert einen Integer.

                            Im gesamten Code fehlen zudem noch einige Fehlerüberprüfungen, wenn man es eng sieht.



                            Funktional ist der Code wohl recht genau das hier:

                            PHP-Code:
                            class botstop_class
                            {
                                public function 
                            get_question($dataFile 'answers_questions.php'$lang 'de')
                                {
                                    @
                            session_start();

                                    require 
                            __DIR__ '/' $dataFile;

                                    
                            $rand rand(0count($questions[$lang]) - 1);

                                    
                            $_SESSION["answer"] = $answers[$lang][$rand];

                                    return 
                            $questions[$lang][$rand];
                                }

                                public function 
                            is_correct($answer)
                                {
                                    @
                            session_start();

                                    if (empty(
                            $_SESSION["answer"])) {
                                        echo 
                            "Please Activate Cookies to submit botstop!";
                                        return 
                            false;
                                    }

                                    return 
                            in_array(
                                        
                            strtolower($answer),
                                        
                            explode("|"strtolower($_SESSION["answer"]))
                                    );
                                }

                            Die Klasse braucht im Grunde gar keinen Zustand zu halten (Instanzvariablen).

                            Um diese Kürze geht es mir, wenn ich sage, dass es sich nicht „lohnt“, das wirklich groß zu besprechen, weil es einfach sehr wenig tut. Da kann man irgendwie immer alles und nichts anmerken, und es wird etwas willkürlich, auf Basis welches Anspruchs man das tut.

                            Man könnte zum Beispiel kritisieren, dass der Code nicht prüft, ob eine Sprache vorhanden ist und ob $questions und $answers die gleiche Feld-Größe und die passenden Datentypen haben (oder überhaupt gesetzt sind). Zudem wird nicht geprüft, ob die Datei mit den Fragen und Antworten überhaupt existiert und lesbar ist. Dann ist die Fehlerunterdrückung mit @ natürlich nicht toll, und man sollte auch nicht einfach so auf $_SESSION zugreifen, sondern das besser irgendwie kapseln (um verdeckte Seiteneffekte zu vermeiden und um vielleicht die Werte einfach mit einem Namespace ($_SESSION['myproject']['antwort']) versehen zu können).

                            Aber das wäre dann sehr schnell ein völlig anderes Projekt und nicht mehr die kleine Lösung, die vermutlich für viele Anwender ausreicht, auch wenn sie nicht in dem Sinne „gut“ ist.

                            Andererseits ist konstruktive Kritik natürlich auch nicht verkehrt und oft sicherlich auch hilfreich.
                            Zuletzt geändert von mermshaus; 12.02.2016, 00:02.

                            Kommentar


                            • #15
                              hmm,

                              es scheint, als würden die Leute viel Wirbel um nix in die Höhe zu heben!
                              Und mal ehrlich, zeigt mir doch Mal ein Script von euch!
                              Dann reden wir hier erst weiter

                              Wie gesagt - das was ihr da bemengelt betrifft FORMFEHLER - dies ändert NICHTS an der Funktionalität des Scripts! Ich nehme die Kritik an aber teilweise, wie gesagt wird hier aus ner Mücke n Elefant gemacht...

                              Aso ja ... hier ist auch nicht alles gut Programmiert

                              Viele viele Bugs - und man sollte übrigens bevor man andere, wegen des Gleichen Kritisiert, vor seiner EIGENEN Türe kehren!


                              AU revoir!
                              ibor
                              Immer eine Handbreit Puffer unterm Code

                              Kommentar

                              Lädt...
                              X