Ankündigung

Einklappen
Keine Ankündigung bisher.

CCS, Schadcode

Einklappen

Neue Werbung 2019

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

  • CCS, Schadcode

    Hallo,

    ich habe verschiedene Sachen über schädlichen Code und Cross-Site-Scripting gelesen. Kann mir jemand erklären wie soetwas funktioniert? Ich kann mir den Ablauf von solchen Angriffen nicht vorstellen. Wichtig ist mir natürlich was ich dagegen machen kann.

    Heißt Schadcode, daß jemand ein Script ins Eingabefeld schreibt? Würde es dann reichen einfach die < und > Zeichen rauszufiltern?

    CCS heißt, daß sich jemand ein eigenes Eingabeformular schreibt und an mein im action angegebenes Script schickt. Soweit hab ich das verstanden. Und was passiert weiter?

    Wer kann mir Denkanstöße liefern?

    Gruß Sven


  • #2
    XSS:
    http://www.inphpfriend.de/forum/show...57&postcount=4

    Les dir aber am besten das ganze Tutorial durch.
    Sichere PHP-Web-Applikationen schreiben:
    http://www.inphpfriend.de/forum/showthread-t_125.html

    Kommentar


    • #3
      Na das hilft mir doch einen riesigen Schritt weiter, besten Dank!

      Gruß Sven


      PS: meinte natürlich CSS und nicht CCS, auch noch 2 mal falschgeschrieben, tztz

      Kommentar


      • #4
        CCS? CSS? Ich glaube du meinst XSS!

        Kommentar


        • #5
          Hallo,

          $variable = false;
          $variable = $_POST['variable'];

          ist wirkungslos, wenn die anschließende Weiterverarbeitung nicht innerhalb von

          if (isset($submit))

          steht. Kann man $submit auch über die URL übergeben oder ist das nicht möglich? Ich habe keinen Weg gefunden es zu übergeben, aber ich bin auch kein Profi. Andererseits kann ich ohne

          $variable = false;
          $variable = $_POST['variable'];

          und mit

          if (isset($submit))

          die Variable $variable auch nicht über die URL übergeben. Dann kann ich

          $variable = false;
          $variable = $_POST['variable'];

          doch auch weglassen? Ich bin verwirrt

          Gruß Sven

          Kommentar


          • #6
            $_POST[] - sachen über ein formular
            $_GET[] - sachen über die url

            Kommentar


            • #7
              Zitat von ZiMD
              $_POST[] - sachen über ein formular
              $_GET[] - sachen über die url
              Es gibt auch GET-Formulare. Und Post-Daten können von überall her kommen, nicht nur von Formularen. GET auch.
              mod = master of disaster

              Kommentar


              • #8
                Grundsätzlich solltest du deine Daten so prüfen:
                PHP-Code:
                <?php
                $data 
                false;
                if( isset(
                $_POST['data']) )
                        
                $data $_POST['data'];
                ?>
                Das gilt natürlich auch für $_GET..
                Vorher nicht gesetzte Variablen findets du, indem du an den Anfang deines Scriptes ein
                PHP-Code:
                <?php
                error_reporting
                (E_ALL);
                ?>
                setzt.. Der Rest steht in dem (sehr guten) Tutorial auf inphpfriend.de (siehe oben).

                Kommentar


                • #9
                  Genau um die Prüfung geht es ja. Ich erklär mal kurz den Ablauf.

                  - script.php enthält das Formular mit dem Eingabefeld name=variable und dem Button name=submit
                  - scriptsave.php enthält die Verarbeitung und wird über action aufgerufen
                  - ich gebe 12345 ins Eingabefeld ein und schicke es weg

                  Wenn das Script so aussieht:
                  PHP-Code:
                  <?php
                  if(isset($submit)) {
                  echo 
                  $variable;
                  }
                  ?>
                  wird 12345 augegeben. Schreibe ich jetzt scriptsave.php?variable=abcde in die Adresszeile wird nichts ausgegeben. Also wie es sein soll. Jetzt verstehe ich nicht wozu ich

                  $variable = false;
                  $variable = $_POST['variable'];

                  brauche und die Frage, ob man $submit über die URL übergeben kann. Ohne isset ist

                  $variable = false;
                  $variable = $_POST['variable'];

                  wirkungslos. Bei scriptsave.php?variable=abcde wird abcde ausgegeben.

                  Ist es möglich isset zu umgehen?

                  Gruß Sven

                  Kommentar


                  • #10
                    Zitat von Waq
                    Zitat von ZiMD
                    $_POST[] - sachen über ein formular
                    $_GET[] - sachen über die url
                    Es gibt auch GET-Formulare. Und Post-Daten können von überall her kommen, nicht nur von Formularen. GET auch.
                    bei ihm gehts aber um ein formular

                    un bei get-formularen sollte er ja selber erkennen dass es da über die url geht

                    Kommentar


                    • #11
                      Also es ist folgendermaßen:
                      PHP-Code:
                      <?php
                      echo '<form action="submit.php" method="post">'// Hier wurde die POST gewählt
                      echo ' <input type="text" name="text" />';
                      echo 
                      '</form>';
                      ?>
                      In diesem Fall hast du dein Formular als Post definiert (get ist ebenso möglich). Im entsprechenden Script rufst du eben auch die Werte mit $_POST bzw $_GET auf. $_GET beinhaltet immer die Variablen, die per URL mitgegeben werden. Sprich:
                      datei.php?variable=wert&test=test

                      An variable und test kommst du heran, indem du $_GET benutzt.
                      Allerdings sollte man sich nicht immer darauf verlassen, dass die Daten (bestes Beispiel: $_POST) auch von einem Formular kommen. Es ist nämlich möglich, einen POST-Request auf einem Server zu simulieren, in dem man diesen mit fsockopen() anspricht in die dementsprechenden Parameter übergibt..
                      PHP-Code:
                      <?php
                      $variable 
                      false;
                      $variable $_POST['variable']; 
                      ?>
                      Falls $_POST['variable'] nicht gesetzt ist, wirst du hier vom PHP mit error_reporting(E_ALL) eine Fehlermeldung bekommen. Daher:
                      Arbeite mit isset.
                      Isset kann man nicht umgehen, wie auch, der Befehl prüft ja, ob eine Variable gesetzt ist, also existiert, oder nicht.
                      Ob die Variable leer ist, bestimmt isset() aber nicht - dazu kannst du empty() benutzen.

                      Kommentar


                      • #12
                        isset() testet, ob eine Variable existiert (und ungleich null ist).
                        Das kann nicht umgangen werden - php weiss, was gesetzt wurde, und was nicht. Bzw andersherum: wovon php keine Kenntnis hat, ist nicht gesetzt.
                        PHP-Code:
                        <?php
                        echo isset($a) ? 'j':'n';
                        $a 42;
                        echo isset(
                        $a) ? 'j':'n';
                        ?>
                        gibt nj aus.

                        Werden Parameter mit dem Request übergeben, setzt php die entsprechenden Elemente in den Felder $_POST/$_GET/$_COOKIE usw. bevor das eigentliche Skript ausgeführt wird.
                        Das tut es nach einfachen, festen Regeln. Von den Intentionen des Programmieres oder Benutzers hat php keine Ahnung. Im Request gibt es einen POST-Paramenter variable? Dann setzt php $_POST[variable] auf den entsprechenden Wert. variable wurde per GET übergeben? PHP setzt $_GET[variable] usw usw

                        Kommentar


                        • #13
                          wenn es dir darum geht keinen html oder javascript auszuführen, dann kannst du mit htmlentities() den eingegebenen text so wie er eingetippt wurde ausgeben.

                          <?
                          echo htmlentities($_POST['variable'])
                          ?>

                          was willst den denn machen , kannst du dein problem etwas genauer beschreiben?

                          Kommentar


                          • #14
                            wenn es dir darum geht keinen html oder javascript auszuführen, dann kannst du mit htmlentities() den eingegebenen text so wie er eingetippt wurde ausgeben.
                            Falsch! htmlentities() wandelt den Text in sonderzeichen, & nach &amp; " nach &quot; usw.. um..

                            Kommentar


                            • #15
                              hi Chr!s ,

                              du hast das richtig erkannt
                              genau deswegen kann der html und js -code nicht ausgeführt werden und wird dir mit echo als text ausgegeben

                              Kommentar

                              Lädt...
                              X