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

  • Logikfehler bei Botschutz im Kontaktformular

    Hi, ich bin neu hier und brauche aber professionelle Hilfe!

    Nach einer längeren und unfreiwilligen Pause habe ich mein Kontaktformular mit einem sichereren Botschutz überarbeitet, jedoch hänge ich jetzt fest.
    Bei meiner Logik sollte Der Hinweis "Erfolgreich versendet" nicht auftauchen.

    Link zum Kontaktformular auf der Seite: https://www.aps-coding.com/#kontakt
    ... Maus über "Angebot anfordern" halten!

    Und der Quellcode:
    PHP-Code:
    <?php

    function CLEAN($eingabe$encoding 'UTF-8'){
      return 
    htmlspecialchars(strip_tags($eingabe), ENT_QUOTES ENT_HTML5$encoding);}

    // function TMP($t){$tmp=tmpfile();fwrite($tmp,$t);fseek($tmp,0);$e=fread($tmp,1024);fclose($tmp);return $e;}
    // echo TMP('Hallo');  


    if(isset($_POST)){
    $post = ['submit''inhalt''nummer''plz''telefon''webseite''mail''anrede''vorname''nachname''strasse''ort''agb''rueckruf''firma''anfrage''auftrag''nobot'];

    // $tmp = '';

    foreach($post as $p){
        $
    $p = !empty($_POST[$p]) ? CLEAN($_POST[$p]) : '';}
      
    $date date("d.m.Y");


     
    $kopf "From: APS-Coding <info@aps-coding.com>\n"."Content-Type:text/html; charset="ISO-8859-1"\n"."Content-Transfer-Encoding: 8bit\n\n";


    if(
    $nobot === 'ok'){    
    if(isset(
    $auftrag)){

     
    $cmms = array('cms1' => 'Anpassen einer bestehenden Seite''cms2' => 'Erstellen einer neuen Seite''cms3' => 'Bereitstellung des Speicherplatzes ''cms4' => 'Buchung einer Internet- Adresse''cms5' => 'Eigenes Design''cms6' => 'Inklusiv- Design''cms7' => 'Eigene Verifizierung bei Google''cms8' => 'Mehrere Profile verwenden''cms9' => 'Erweiterbare Kategorien''cms10' => 'eMail- Funktion''cms11' => 'Zeitgesteuerte Backup- Funktion''cms12' => '&Auml;nderungen am Design''cms13' => 'Spezielle W&uuml;nsche');

        
    $erg '';    
    foreach(
    $cmms as $ms => $s){
        
    $erg.= isset($_POST[$ms]) ? '<li>'.$s.'</li>' '';}

     
    $ausg = <<<HTML
    <!DOCTYPE html>
    <html lang="de">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>APS-Coding | Mail</title>
    <style
    /*
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    ::::::::::::::: Coding by Denis Aps :::: http://aps-coding.com ::::::::::::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    */

    body {
        width: 100%;
        height: auto;
        margin: 0;
        background: url('http://aps-coding.com/img/logo.png') #111;
        background-size: 50% 100%;
        background-repeat: no-repeat;
        background-attachment: fixed;
        color: rgb(0, 0, 0);
        text-shadow : 1px 1px 2px rgb(255, 255, 255);
        font-family: corbel, 'Raleway', sans-serif;
        font-size: 18px;
        font-weight: 500;
        letter-spacing: 1px;
    }

    a[href] {
        text-decoration: none;
        color: rgba(033, 033, 033, 0.8);
        outline: 0;
    }

    a:focus {
        color: #fff;
    }

    a:active, a:focus {
        color: #000;
        border: none;
    }

    i, strong, small, hr {
        color: rgb(022, 022, 022);
        text-shadow : 1px 1px 3px rgb(255, 255, 255);
    }

    .clear {
        clear: both;
    }

    ul, ol {
        width: 90%;
        list-style-type: none;
    }

    ul li, ol li {
        width: 100%;
        margin: 4px;
        padding: 4px;
        background: rgb(033, 033, 033);
        border: 1px inset rgb(033, 033, 033);
        border-radius: 6px;
    }

    .fieldset{
        float: left;
        margin: 10px;
        width: auto;
        height: auto;
        border: 2px groove rgb(238, 238, 209);
        border-radius: 10px;
        background: rgb(099, 099, 099);
    }

    .fieldset legend {
        padding: 4px;
        color: rgb(139, 035, 035);
        background: rgba(238, 238, 209, 0.8);
        border-bottom: 1px solid rgb(0, 0, 0);
        border-radius: 10px;
    }
    </style>
    </head>
    <body>
    <br><br>
    <h2>Best&auml;tigung der Auftragsanfrage</h2>
    Hallo 
    ${anrede} ${nachname},<br>
    <br>
    Ihre Anfrage aus <a href="http://aps-coding.com">APS-Coding</a> am 
    ${date} wird somit best&auml;tigt und bearbeitet!

    <fieldset class="fieldset"><legend>Ihre Angaben sind:</legend>
    <ul>
        <li>
    ${anrede} ${vorname} ${nachname}</li>
        <li>
    ${strasse} ${nummer}</li>
        <li>
    ${plz} ${ort}</li>
        <li>Tel: 
    ${telefon}</li>
        <li>Mail: 
    ${mail}</li>
        <li>Firma: 
    ${firma}</li>
        <li>Web: 
    ${webseite}</li>
        <li>Text:<br>
    ${inhalt}</li>
    </ul>
    <hr>
        <ul>
    ${erg}</ul>
    </fieldset>
    <br>
    Sie werden von uns in den n&auml;chsten Tagen telefonisch zu einer Terminvereinbarung kontaktiert!<br>
    <br>
    Mit freundlichen Gr&uuml;&szlig;en,<br>
    <i>Denis Aps</i> (<small>Gesch&auml;ftsf&uuml;hrer</small>)

    <footer><a href="http://aps-coding.com">aps-coding.com</a></footer>

    </body>
    </html>

    HTML;
    }

    if(isset(
    $anfrage)){

     
    $ausg = <<<HTML
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>APS-Coding | Mail</title>
    <link href="http://aps-coding.com/sys/style.css" rel="stylesheet" media="all">
    </head>
    <body>
    <br><br>
    <section class=" home box_main" style="height: auto !important; opacity: 0.9;">
    <header>Best&auml;tigung der Auftragsanfrage</header>
    <article>
    Hallo 
    ${anrede} ${nachname},<br>
    <br>
    Ihre Anfrage aus <a href="http://aps-coding.com">APS-Coding</a> am 
    ${date} wird somit best&aumlk;tigt und bearbeitet!

    <fieldset class="fieldset"><legend>Ihre Angaben sind:</legend>
    <ul>
        <li>
    ${anrede} ${vorname} ${nachname}</li>
        <li>
    ${strasse} ${nummer}</li>
        <li>
    ${plz} ${ort}</li>
        <li>Tel: 
    ${telefon}</li>
        <li>Mail: 
    ${mail}</li>
        <li>Text:<br>
    ${inhalt}</li>
    </ul>
    </fieldset>
    <br>
    Sie werden in den telefonisch kontaktiert!<br>
    <br>
    Mit freundlichen Gr&uuml;&szlig;en,<br>
    <i>Denis Aps</i> (<small>Gesch&auml;ftsf&uuml;hrer</small>)
    </article>
    <aside></aside>
    </section>

    <footer>
    <a href="http://aps-coding.com">aps-coding.com</a>
    </footer>

    </body>
    </html>

    HTML;
    }

    if(!
    mail($mail'Best&auml;tigung von "'.$_SERVER['SERVER_NAME'], utf8_encode($ausg), $kopf)){
        echo 
    '<h2>Nicht versendet!</h2>'; }        
    elseif(!
    mail('info@aps-coding.com''Best&auml;tigung von "'.$_SERVER['SERVER_NAME'], utf8_encode($ausg), $kopf)){    
        echo 
    '<h2>Nicht versendet!</h2>'; }
    else{
        
    file_put_contents('kunde/'.$vorname.'_'.$nachname.'_'.$date.'_Auftrag.html'utf8_encode($ausg));
        echo 
    '<h2>Erfolgreich versendet!</h2>';}


    }
    else {
        echo 
    '<h2>Sie m&uuml;ssen "ok" in das letzte Feld schreiben!</h2>';}




    }
    ?>
    Ich hoffe Ihr könnt mir helfen

  • #2
    Das Formular ist eine einzige Sicherheitslücke. Kontextwechsel werden nicht beachtet. mail() wird verwendet. Werte werden ungefiltert in Dateipfaden verwendet. Dazu noch ein eingestreutes utf8_encode(), das in der heutigen Zeit nutzlos ist, da nicht mal €-Zeichen unterstützt werden. Ich würde das wegwerfen und neu machen.

    Ich hoffe das ist nirgendwo so produktiv im Einsatz.

    Kommentar


    • #3
      Vielen Dank für die Hinweise. Ich bin auch nicht mehr auf dem laufenden.
      - mail()
      alternetive kannte ich nicht

      - Datei ungefiltert schreiben
      hatte ich vergessen

      - utf8 hatte ich auch nicht gewusst. Da gab es damals noch fehler bei mir

      Kommentar


      • #4
        Zitat von Dennse Beitrag anzeigen
        Vielen Dank für die Hinweise. Ich bin auch nicht mehr auf dem laufenden.
        - mail()
        alternetive kannte ich nicht
        Schau dir mal fertige Mailer an wie zB. PHPMailer.

        Kommentar


        • #5
          Hatte gerade noch gesehen, das die POST Daten doch alle gefiltert werden
          PHP-Code:
          foreach($post as $p){
              $
          $p = !empty($_POST[$p]) ? CLEAN($_POST[$p]) : '';} 

          Kommentar


          • #6
            was ist denn bei mail() so verkehrt? Funktionieren tut es ja! Und es wird nichts externes geladen

            Kommentar


            • #7
              Zitat von Dennse Beitrag anzeigen
              Nach einer längeren und unfreiwilligen Pause habe ich mein Kontaktformular mit einem sichereren Botschutz überarbeitet, jedoch hänge ich jetzt fest.
              Ich habe die Erfahrung gemacht dass eine einfache Vorschau vor dem eigentlichen Absenden auch reicht.

              ... Maus über "Angebot anfordern" halten!
              Welche Maus? Hast du die Seite schonmal auf einem Handy angeschaut? Keine Chance. Die Tatsache dass ein placeholder-Attribut kein label-Element ersetzt ist dann auch schon fast egal ...

              Zitat von Dennse Beitrag anzeigen
              Hatte gerade noch gesehen, das die POST Daten doch alle gefiltert werden
              Nein, das ist keine richtige Behandlung des Kontextwechsels (von dem du ja verschiedene hast)!

              Kommentar


              • #8
                Zitat von Dennse Beitrag anzeigen
                was ist denn bei mail() so verkehrt? Funktionieren tut es ja! Und es wird nichts externes geladen
                https://stackoverflow.com/questions/...-mail-function

                Kommentar


                • #9
                  Zitat von Dennse Beitrag anzeigen
                  Hatte gerade noch gesehen, das die POST Daten doch alle gefiltert werden
                  PHP-Code:
                  foreach($post as $p){
                  $
                  $p = !empty($_POST[$p]) ? CLEAN($_POST[$p]) : '';} 
                  1. Du verwendest variable Variablen, das sollte man nicht tun.

                  2. Die Funktion heißt zwar CLEAN(), macht aber was ganz anderes. Sie fügt HTML-Steuerzeichen hinzu. Der Funktionsname ist also hochgradig irreführend.

                  Kommentar


                  • #10
                    An tk1234:
                    - mit der Vorschau ist eine gute Idee
                    - mit dem Handy natürlich antippen
                    - den Link habe ich mir angesehen und erwähne aber, das die Ausgaben und Durchläufe korrekt sind und Fehler nicht angezeigt werden

                    Kommentar


                    • #11
                      Zitat von hellbringer Beitrag anzeigen

                      1. Du verwendest variable Variablen, das sollte man nicht tun.
                      Warum nicht?

                      Zitat von hellbringer Beitrag anzeigen

                      2. Die Funktion heißt zwar CLEAN(), macht aber was ganz anderes. Sie fügt HTML-Steuerzeichen hinzu. Der Funktionsname ist also hochgradig irreführend.
                      Dies ist eine generelle Funktion für meine Projekte, wo es erwünscht ist. Auch weil es HTML-Schadcode nicht gibt

                      Kommentar


                      • #12
                        Was ist denn aber eigentlich nun mit dem ursprünglichem Fehler?

                        Kommentar


                        • #13
                          Zitat von Dennse Beitrag anzeigen
                          Warum nicht?
                          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.

                          Zitat von Dennse Beitrag anzeigen
                          Dies ist eine generelle Funktion für meine Projekte, wo es erwünscht ist. Auch weil es HTML-Schadcode nicht gibt
                          Dann ist die Funktion generell Mist. Denn sie macht nicht das was du glaubst dass sie macht. Schadcode an sich ist wirkungslos und ungefährlich. 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.

                          Kommentar


                          • #14
                            Danke, den Unterschied werde ich mal testen und ggf. ersetzen.

                            Kommentar


                            • #15
                              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.

                              Kommentar

                              Lädt...
                              X