Ankündigung

Einklappen
Keine Ankündigung bisher.

Logikfehler bei Botschutz im Kontaktformular

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von hellbringer Beitrag anzeigen

    Weil es den Code unübersichtlich und schwer nachvollziehbar macht. Ich hab z.B. erstmal rumsuchen müssen, wo überhaupt die Variable $vorname her kommt. Wenn man in Code rumsuchen muss, läuft da meistens was falsch.
    Ok, das sehe ich bei grösseren Projekten ein. Bei diesem Projekt, meiner Präsentationsseite, gibt es aber nur 2 PHP Seiten. Die Index.php und config.php; da ist der Code sehr übersichtlich und klein.

    Zitat von hellbringer Beitrag anzeigen
    Dann ist die Funktion generell Mist. Denn sie macht nicht das was du glaubst dass sie macht. Schadcode an sich ist wirkungslos. Er wird nur dann gefährlich, wenn er ausgeführt wird, also solltest du das nicht tun. Das passiert bei nicht behandelte Kontextwechsel. Du versuchst also einen Fehler bzw. eine Sicherheitslücke an einer falschen Stelle abzufackeln, wo es aber nicht wirklich möglich ist. Du hast irgendwas ohne Sinn zusammengebastelt und wiegst dich in falscher Sicherheit. Denn dein CLEAN() entfernt nicht jede Art von Schadcode, was aber technisch auch gar nicht 100% möglich ist, da Schadcode und Nutzdaten nicht klar unterscheidbar sind.
    In der Demo zum Beispiel werden die Textänderungen über der Administration auch mit HTML Tag's versehen.
    z.B.: <b></b> oder <fieldset></fieldset>

    SQL wird hier nicht verwendet und Tag's wie <script> werden ausgeklammert oder nicht wirksam ausgeführt. Ich werde es mir aber noch einmal durch den Kopf gehen lassen.

    Kommentar


    • #17
      Zitat von jonas3344 Beitrag anzeigen
      PHP-Code:
      $kopf "From: APS-Coding <info@aps-coding.com>\n"."Content-Type:text/html; charset="ISO-8859-1"\n"."Content-Transfer-Encoding: 8bit\n\n"
      Das wirft schon mal einen Parse-Error.
      charset="ISO-8859-1"
      Dieses Forum ersetzt Backslashes

      Danke!

      Kommentar


      • #18
        Zitat von Dennse Beitrag anzeigen
        Ok, das sehe ich bei grösseren Projekten ein. Bei diesem Projekt, meiner Präsentationsseite, gibt es aber nur 2 PHP Seiten. Die Index.php und config.php; da ist der Code sehr übersichtlich und klein.
        Umso mehr eine Leistung so wenig Code so schlecht lesbar zu gestalten. Wie chaotisch wird es dann erst bei mehr Code?

        Zitat von Dennse Beitrag anzeigen
        In der Demo zum Beispiel werden die Textänderungen über der Administration auch mit HTML Tag's versehen.
        z.B.: <b></b> oder <fieldset></fieldset>

        SQL wird hier nicht verwendet und Tag's wie <script> werden ausgeklammert oder nicht wirksam ausgeführt. Ich werde es mir aber noch einmal durch den Kopf gehen lassen.
        Ist ja schön und gut, dass du die Fälle aufzählst, die du beachtest. Aber es gibt auch noch zahlreiche andere Fälle, die du wohl nicht beachtet hast. Denn eine JavaScript-Injection kann auch ohne <script> stattfinden.

        Deswegen: Einfach immer richtig den Kontextwechsel behandeln, statt mit irgendwelchen schwindeligen Filterfunktionen Eingabewerte zu verstümmeln. Ersteres ist deutlich einfacher und funktioniert immer. Letzteres ist sehr komplex und lässt dann doch was durch, wenn man es am wenigsten erwartet.

        Kommentar


        • #19
          Korrektur:
          Dieses Forum entfernt Backslashes

          Kommentar


          • #20
            Das Thema gehört eigentlich auch zu den Anfängern.

            Wenn ich das Formular ausführe sehe ich keine Hinweise. Ich sehe nur standardmässig:
            Code:
             Sie müssen "ok" in das letzte Feld schreiben!
            wenn ich die Seite aufrufe, was schon mal seltsam ist.
            Ohne den gesamten Quelltext ist das schwierig nachzuvollziehen was da falsch läuft.
            Debugging müsstest du selbst betreiben:
            https://php-de.github.io/#debugging

            Ist Dir bewusst, dass da im Firefox im Menü oben noch die Ziffern der Liste zu sehen sind?

            Kommentar


            • #21
              Zitat von Dennse Beitrag anzeigen
              - mit dem Handy natürlich antippen
              Hab ich probiert, geht nicht (es liegt alles mehr oder weniger übereinander, es ist nicht möglich ein bestimmtes Kästchen anzuklicken). Liegt anscheinend aber am Browser, Opera kommt anscheinend mit irgendwas nicht zurecht, mit Chrome sind die Kästchen zumindest nebeneinander. Allerdings ist die Bedienung der Seite auch am Desktop eine Katastrophe, ständig springt da was hin und her und man muss höllisch aufpassen die Maus ja keinen Millimeter zu weit zu bewegen - besonders der persönliche Kontakt ist schwierig "einzufangen". Auch das Formular steckt in einem winzigen Fenster und man muss ewig scrollen - von der Bedienbarkeit über Tastatur (ja, das sollte funktionieren, es gibt Leute die darauf angewiesen sind!) ganz zu schweigen. Von den Fehlern im Code will ich jetzt nicht anfangen, nur soviel: dir ist bewusst dass vor dem <!DOCTYPE html> noch ein <h2> rumdümpelt?

              Zitat von Dennse Beitrag anzeigen
              - den Link habe ich mir angesehen und erwähne aber, das die Ausgaben und Durchläufe korrekt sind und Fehler nicht angezeigt werden
              Das alles richtig zu funktionieren scheint mag sein - das heißt aber nicht dass alles richtig ist. Kontextwechsel müssen *immer* richtig(!) behandelt werden, und nein, ein pauschales drüberbügeln mit htmlspecialchars und strip_tags reicht nicht um alle Kontextwechsel richtig zu behandeln.

              Zitat von Dennse Beitrag anzeigen
              Was ist denn aber eigentlich nun mit dem ursprünglichem Fehler?
              Ich verstehe das Problem nicht, warum sollte "Erfolgreich versendet!" nicht erscheinen? Wenn beide Aufrufe der mail-Funktion true geben, wird eben der else-Teil aufgerufen. Allerdings scheint mir das ganze nicht wirklich sinnvoll: wenn der erste Mailversand funktioniert, der zweite aber nicht bekommt der Kunde eine Bestätigungsmail, du bekommst aber nie irgendwas von dem verschickten Formular mit. Aber wie hier schon erwähnt wurde: das Script ist ohnehin ein Fall für /dev/null, da irgendwas reparieren zu wollen lohnt sich nicht.

              Kommentar


              • #22
                Weil hier anscheinend niemand so richtig zurecht kommt oder lesen kann, habe ich es mal mit einer Datei namens "test.php" vereinfacht:

                PHP-Code:
                <?php
                error_reporting
                (E_ALL);

                if(isset(
                $_POST)){

                if(isset(
                $_POST['nobot']) === 'ok'){    
                    echo 
                'super';}
                else{
                    echo 
                'falsch';}

                }    
                else{
                    echo 
                'kein Post';
                }


                ?>
                <hr>
                <form action="test.php" method="post">
                    <input type="text" name="nobot">
                    <input type="submit">
                </form>
                Eventuell ist $_POST so nicht mehr gültig. Bei php.net ist jedenfalls keine Änderung zu sehen.

                Kommentar


                • #23
                  PHP-Code:
                  isset($_POST['nobot']) 
                  ergibt entweder true oder false aber sicher nicht 'ok'

                  PHP-Code:
                  <?php
                  error_reporting
                  (E_ALL);

                  if(isset(
                  $_POST['submit'])){
                  if(
                  $_POST['nobot'] === 'ok'){    
                      echo 
                  'super';}
                  else{
                      echo 
                  'falsch';}

                  }    
                  else{
                      echo 
                  'kein Post';
                  }


                  ?>
                  <hr>
                  <form action="test.php" method="post">
                      <input type="text" name="nobot">
                      <input type="submit" name="submit">
                  </form>

                  Kommentar


                  • #24
                    Danke, das $_POST muss so bleiben, darum geht es ja.

                    Kommentar


                    • #25
                      123

                      Kommentar


                      • #26
                        Zitat von Dennse Beitrag anzeigen
                        Bitte lesen, probieren und besser machen!
                        Das ist eigentlich deine Aufgabe. Wo ist das Debugging?

                        Kommentar


                        • #27
                          Zitat von Dennse Beitrag anzeigen
                          Danke, das $_POST muss so bleiben, darum geht es ja.
                          $_POST ist eine superglobale Variable, isset($_POST) ist immer true. Du musst schon auf einen spezifischen key prüfen. Aber das hättest du auch selbst ausprobieren können.

                          Kommentar


                          • #28
                            Zitat von jonas3344 Beitrag anzeigen

                            $_POST ist eine superglobale Variable, isset($_POST) ist immer true. Du musst schon auf einen spezifischen key prüfen. Aber das hättest du auch selbst ausprobieren können.
                            Diese Form hatte damals aber immer funktioniert.
                            In diesem Fall werde ich es aber mal so ändern.

                            Kommentar


                            • #29
                              Somit kann dieses Thema geschlossen werden.

                              Kommentar


                              • #30
                                Zitat von Dennse Beitrag anzeigen
                                123
                                Hat der Post irgendeine aussage ?
                                Bitte lese doch mal den Announce der Fortgeschrittenen, und halte dich dementsprechend an die Forenregeln.


                                Kommentar

                                Lädt...
                                X