Ergebnis 1 bis 11 von 11
  1. #1
    The_C ist offline Tripel-As
    registriert
    01-08-2011
    Beiträge
    232

    Angry Spams abhalten

    Hallo,
    ich habe ab und zu Spams die mein Formularregeln durchbrechen zum einen habe ich bei der Formulareingabe die HTML5 pattern="^[A-Za-z]{3,10}$" benutzt und auch im JS wird der Vorname, Nachname und das Mail abgefragt ob da was eingegeben wurde das gleiche im PHP die das schlußendlich zu mir sendet.
    Grundsätzlich funktioniert es ja auch, aber Spams kommen da irgendwie durch weil Sie beim Vornamen und Nachnamen das mit Zahlen befüllen obwohl ich nur Zeichen mit den pattern erlaubt habe!
    Das verstehe ich nicht

    Wie kann ich die Spams überlisten die Maileingabe müssen die ja auch richtig eintragen also wird die richtig überprüft und auch ausgefüllt...

    Habe hier mal alle Dokumente eingefügt die zum Formular gehören eventuell gibt es ja eine einfache Lösung für mein Problem.
    Ich weis nicht so recht wo ich da anfangen soll, weil ich habe 3 verschiedene Stellen an denen ich herumschrauben kann aber welche eignet sich dafür am besten.

    Danke schon mal jetzt für Eure Hilfe!

    Das HTML:
    PHP-Code:
    <div id="support">
              <
    div id="slidecontent1">
              <
    div class="supportheadline">Support</div>
                <
    div class="support_aleart"><b>Der Support</bstartet in kürze!</div>
                <
    div id="chat">
                  <
    a href="fileadmin/Resources/Private/rc-chat/">
                    <
    img src="fileadmin/Resources/Public/Images/livechat1.jpg" alt="Chat Live Support" title="Chat Live Support"/>
                  </
    a
                </
    div>
                <
    div id="modalDiv">
                  <
    iframe id="modalIFrame" title="Dialog Title"></iframe>
                </
    div>
                <
    form id='supportmail' method='post' action='fileadmin/Resources/Public/JavaScript/process.php'>
                  <
    dl>
                    <
    dd><input id='sender_vorname_chat' class="text" type="text" name="vorname" required="required" pattern="^[A-Za-z]{3,10}$" placeholder="Vorname" /></dd>
                    <
    dd><input id='sender_nachname_chat' class="text" type="text" name="nachname" required="required" pattern="^[A-Za-z]{3,10}$" placeholder="Nachname" /></dd>
                    <
    dd><input id='sender_mail_chat' class="text" type="text" name="email" required="required" pattern="[^@]+@[^@]+\.[a-zA-Z]{2,6}" placeholder="E-Mail" /></dd>
                    <
    dd><input type='submit' class='absende_button_chat' value='Anmelden' />
                      <
    div class="loading"></div>
                    </
    dd>
                  </
    dl>
                </
    form>
              </
    div>
            </
    div
    Das JS:
    PHP-Code:
    /************** JS Ajax mit PHP send Mail *********************/

    $(document).ready(function () {

    placeholder = ['Vorname''Nachname''E-Mail'];

        
    //var Input = $('input[type!="submit"]');
        
    var Input = $('#supportmail').find('input[type!="submit"]');

        
    trim = function (str) {
            return 
    str.replace(/^\s+/, '').replace(/\s+$/, '');
        };

        
    Input.each(function (i) {
            $(
    this).val(placeholder[i]).data('placeholder'placeholder[i]);
        });

        
    Input.focus(function () {
            var 
    element = $(this);
            if (
    trim(element.val()) == element.data('placeholder')) {
                $(
    this).val('');
            }
        });

        
    Input.blur(function () {
            var 
    element = $(this);
            if (
    trim(element.val()) == '') {
                
    element.val(element.data('placeholder'));
            }
        });

        
    // Wenn der Absende Button geklickt wird
        
    $('#supportmail').submit(function (e) {
            var 
    failed 0;
            $(
    'input[required="required"]').each(function () {
                var 
    element = $(this);
                var 
    value element.val();
                var 
    pattern element.attr('pattern');
                var 
    regex = new RegExp(pattern);
                var 
    result regex.exec(value);
                if (
    result === null || result == element.data('placeholder')) {
                    
    failed 1;
                    
    element.css('border-color''red');
                } else {
                    
    element.css('border-color''green');
                }
            });

            if (
    failed 0) {
                
    e.preventDefault();
                
    alert('Bitte füllen Sie das Formular richtig aus...');
            } else {
                
    e.preventDefault();
                var 
    data = $('#supportmail').serialize();
                
    //$('.text').attr('enabled','false');
                // Supportmail Formular ausblenden
                //$('#supportmail').fadeOut('slow');
                // Nachricht anzeigen
                //$('.support_aleart').fadeIn('slow');
                
    $('.loading').show();

                $.
    ajax({

                    
    // Url zum verarbeiteten PHP File
                    
    beforeSend: function () {
    //alert(data);
                    
    },
                    
    url"fileadmin/Resources/Public/JavaScript/process.php",
                    
    // GET Methode benutzen
                    
    type"GET",
                    
    // Abfrage mit data         
                    
    datadata,
                    
    // Die Page nicht cashen
                    
    cachefalse,
                    
    //success
                    
    datatype'html',
                    
    error: function() {
                        
    //alert('failed');
                    
    },
                    
    success: function (html) {
                        
    //alert(html);
                        // Wenn die PHP Datei 1 zurückgibt also richtig das Mail senden
                        // Wenn die PHP Datei 0 zurückgibt also falsch das Mail nicht senden und den Fehler ausgeben
                        
    if (html == 1) {
                            
    // Supportmail Formular ausblenden
                            
    $('#supportmail').fadeOut('slow');
                            
    // Nachricht anzeigen
                            
    $('.support_aleart').fadeIn('slow');
                            
                            
    // Plungi für Starter Chat
                            
    $.fn.delay = function( timename ) {
                                return 
    this.queue( ( name || "fx" ), function() {
                                    var 
    self this;
                                    
    setTimeout(function() { 
                                        $.
    dequeue(self); 
                                    } , 
    time );
                                });
                            };
                            $(
    '.support_aleart').delay(3000).fadeOut('slow');
                            
    // Starter Chat
                            
    $('#chat').delay(5000).fadeIn('slow');
                            
    //$('.support_aleart').fadeOut('slow');
                              
                            
    $('#modalDiv').dialog({
                                
    modalfalse,
                                
    autoOpenfalse,
                                
    height800,
                                
    width540,
                                
    draggabletrue,
                                
    resizeabletrue,
                                
    title'Live Support',
                                
    close: function( eventui ) {
                                    $(
    '#modalIFrame').attr('src''');
                                    $(
    '#supportmail').show();
                                }
                            });
                            
                            
    // Automatische Weiterleitung mit .trigger('click');                           
                            
    $('#chat').click(function(e) {
                                
    e.preventDefault();
                                $(
    this).delay(5000).fadeOut('slow');
                                
    url 'fileadmin/Resources/Private/chat/';
                                $(
    '#modalDiv').dialog('open');
                                $(
    '#modalIFrame').attr('src'url);
                            }).
    trigger('click');


                        } else {
                            
    alert('Es ist ein unerwarteter Fehler ist aufgetreten, bitte versuchen Sie es später noch einmal.');
                        }
                    }
                });
            }

        }); 
    // supportmail ende

    }); // ready end 
    und das PHP:
    PHP-Code:
    <?php

    //Retrieve form data. 
    //GET - user submitted data using AJAX
    //POST - in case user does not support javascript, we'll use POST instead
    $vorname = ($_GET['vorname']) ? $_GET['vorname'] : $_POST['vorname'];
    $nachname = ($_GET['nachname']) ? $_GET['nachname'] : $_POST['nachname'];
    $email = ($_GET['email']) ?$_GET['email'] : $_POST['email'];

    //flag to indicate which method it uses. If POST set it to 1
    if ($_POST$post 1;

    //Simple server side validation for POST data, of course, you should validate the email
    if (!$vorname$errors[count($errors)] = 'Geben Sie bitte Ihren Vornamen ein';
    if (!
    $nachname$errors[count($errors)] = 'Geben Sie bitte Ihren Nachnamen ein';
    if (!
    $email$errors[count($errors)] = 'Geben Sie bitte Ihre Mailadresse ein';  

    //if the errors array is empty, send the mail / no errors found
    if (!$errors) {


    //recipient
        
    $to 'admin@support.com';   
        
    //sender
        
    $from $vorname .' '$nachname ' <' $email '>';

        
    //subject and the html message
        
    $subject 'Chat Anmeldung'
        
    $message '
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head></head>
        <body>
        <table>
            <tr><td>Vorname</td><td>' 
    $vorname '</td></tr>
            <tr><td>Nachname</td><td>' 
    $nachname '</td></tr>
            <tr><td>Email</td><td>' 
    $email '</td></tr>
        </table>
        <p>Bitte Log Dich in den Chat ein<br />
        Ein User wartet auf Deine Antwort im Chat<br />
        <a href="fileadmin/Resources/Private/chat/">Chat LogIn</a>
        </body>
        </html>'
    ;

        
    //send the mail
        
    $result sendmail($to$subject$message$from);

        
    //if POST was used, display the message straight away
        
    if ($_POST) {
            echo 
    'Die Freischaltung wird aktiviert!';

        
    //This one for ajax
        //1 means success, 0 means failed
        
    } else {
            echo 
    '1';   
        }


    } else {
        
    //display the errors message
        
    for ($i=0$i<count($errors); $i++) echo $errors[$i] . '<br/>';
        echo 
    '<a href="http://www.url.com">Back</a>';
        exit;
    }


    //Simple mail function with HTML header
    function sendmail($to$subject$message$from) {
        
    $headers "MIME-Version: 1.0" "\r\n";
        
    $headers .= "Content-type:text/html;charset=iso-8859-1" "\r\n";
        
    $headers .= 'From: ' $from "\r\n";

        
    $result mail($to,$subject,$message,$headers);

        if (
    $result) return 1;
        else return 
    0;
    }

    ?>

  2. #2
    Avatar von Dormilich
    Dormilich ist offline Kaiser
    registriert
    15-01-2010
    Beiträge
    1.246

    AW: Spams abhalten

    aber Spams kommen da irgendwie durch weil Sie beim Vornamen und Nachnamen das mit Zahlen befüllen obwohl ich nur Zeichen mit den pattern erlaubt habe!
    Spambots sind keine Browser und können daher die HTML5-Validierung nach Belieben ignorieren.

    - - - Aktualisiert - - -

    Spambots müssen auch nicht dein Formular benutzen, sondern können den Request selbst zusammenbauen.

  3. #3
    The_C ist offline Tripel-As
    registriert
    01-08-2011
    Beiträge
    232

    AW: Spams abhalten

    Ja, aber die Frage bleibt wie blokiert man die?

  4. #4
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.484

    AW: Spams abhalten

    Indem man alle Überprüfungen auch auf dem Server (in PHP) macht. Sogar mit einem normalen Browser kann man die pattern-Überprüfung ausschalten.

  5. #5
    The_C ist offline Tripel-As
    registriert
    01-08-2011
    Beiträge
    232

    AW: Spams abhalten

    ok also in meinem PHP Code.
    Aber wie wo was schreib ich jetzt da hinein das es auch so funktioniert wie ich das möchte?
    PHP-Code:
    <?php

    //Retrieve form data. 
    //GET - user submitted data using AJAX
    //POST - in case user does not support javascript, we'll use POST instead
    $vorname = ($_GET['vorname']) ? $_GET['vorname'] : $_POST['vorname'];
    $nachname = ($_GET['nachname']) ? $_GET['nachname'] : $_POST['nachname'];
    $email = ($_GET['email']) ?$_GET['email'] : $_POST['email'];

    //flag to indicate which method it uses. If POST set it to 1
    if ($_POST$post 1;

    //Simple server side validation for POST data, of course, you should validate the email
    if (!$vorname$errors[count($errors)] = 'Geben Sie bitte Ihren Vornamen ein';
    if (!
    $nachname$errors[count($errors)] = 'Geben Sie bitte Ihren Nachnamen ein';
    if (!
    $email$errors[count($errors)] = 'Geben Sie bitte Ihre Mailadresse ein';  

    //if the errors array is empty, send the mail / no errors found
    if (!$errors) {


    //recipient
        
    $to 'admin@support.com';   
        
    //sender
        
    $from $vorname .' '$nachname ' <' $email '>';

  6. #6
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.484

    AW: Spams abhalten

    Du hast doch schon die "Simple server side validation"... das musst du einfach entsprechend erweitern. Was ist denn konkret deine Frage?

  7. #7
    The_C ist offline Tripel-As
    registriert
    01-08-2011
    Beiträge
    232

    AW: Spams abhalten

    Beim Vornamen und Nachnamen darf mann keine Zahlen eingeben, sondern nur Buchstaben.
    Das ist eigentlich alles die Mailvalidierung passt.

    - - - Aktualisiert - - -

    irgendwie so aber php ist nicht meine Stärke:
    if (!preg_match("/^[a-zA-Z ]*$/",$vorname,$nachname))

    - - - Aktualisiert - - -

    könnte das richtig sein?
    hab das jetzt nur für den Vornamen gemacht.

    PHP-Code:
    //Retrieve form data. 
    //GET - user submitted data using AJAX
    //POST - in case user does not support javascript, we'll use POST instead
    $vorname = ($_GET['vorname']) ? $_GET['vorname'] : $_POST['vorname'];
    $nachname = ($_GET['nachname']) ? $_GET['nachname'] : $_POST['nachname'];
    $email = ($_GET['email']) ?$_GET['email'] : $_POST['email'];

    //flag to indicate which method it uses. If POST set it to 1
    if ($_POST$post 1;

    //Simple server side validation for POST data, of course, you should validate the email
    //if (!$vorname) $errors[count($errors)] = 'Geben Sie bitte Ihren Vornamen ein';
    if (empty($_POST["vorname"])) {
        
    $errors "Geben Sie bitte Ihren Vornamen ein";
      } else {
        
    $vorname;
        
    // check if name only contains letters and whitespace
        
    if (!preg_match("/^[a-zA-Z ]*$/",$vorname)) {
          
    $errors "Nur Buchstaben erlaubt!";
        }
      }
    if (!
    $nachname$errors[count($errors)] = 'Geben Sie bitte Ihren Nachnamen ein';
    if (!
    $email$errors[count($errors)] = 'Geben Sie bitte Ihre Mailadresse ein';  

    //if the errors array is empty, send the mail / no errors found
    if (!$errors) { 
    bei dem count weis ich nicht ob ich das brauche das ist anscheinend da um eine Endlosschleife zu vermeiden...
    Geändert von The_C (18-04-2017 um 16:11 Uhr)

  8. #8
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.484

    AW: Spams abhalten

    Zitat Zitat von The_C Beitrag anzeigen
    könnte das richtig sein?
    Die Zuweisung an die $errors Variable ist falsch. Das musst du genauso wie im Original machen.

    Zitat Zitat von The_C Beitrag anzeigen
    bei dem count weis ich nicht ob ich das brauche das ist anscheinend da um eine Endlosschleife zu vermeiden...
    Doch, das brauchst du und das hat nichts mit einer Endlosschleife zu tun. Im Grunde genomme ist das ein push an das Array - wobei man das im PHP performanter machen kann
    PHP-Code:
    $errors[] = 'Geben Sie bitte Ihren Nachnamen ein'

  9. #9
    The_C ist offline Tripel-As
    registriert
    01-08-2011
    Beiträge
    232

    AW: Spams abhalten

    Hmmm... verstehe das leider nicht :-((
    Kannst mir Bitte den Code zeigen wie der zusammengebaut gehört?
    Danke!

  10. #10
    The_C ist offline Tripel-As
    registriert
    01-08-2011
    Beiträge
    232

    AW: Spams abhalten

    Dann eventuel so, also ich rate ja nur:
    PHP-Code:
    if (empty($_POST["vorname"])) {
        
    $errors[count($errors)] = "Geben Sie bitte Ihren Vornamen ein";
      } else {
        
    $vorname;
        
    // check if name only contains letters and whitespace
        
    if (!preg_match("/^[a-zA-Z ]*$/",$vorname)) {
          
    $errors[count($errors)] = "Nur Buchstaben erlaubt!";
        }
      } 
    - - - Aktualisiert - - -

    Jetzt habe ich eine andere Lösung um den Spamer zu verwirren...
    Im HTML habe ich einfach die action: <form id='supportmail' method='post' action='fileadmin/Resources/Public/JavaScript/process.php'> eine Fake action zugewiesen da es ja sowiso mit JS gesendet wird.
    <form id='supportmail' method='post' action='site.php?id=179'>
    Mal sehen ob es klappt somit ist auch der Spamer etwas beschäftigt ;-)
    Besser ist natürlich die PHP Methode wenn man sich damit auskennt!

  11. #11
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.484

    AW: Spams abhalten

    Zitat Zitat von The_C Beitrag anzeigen
    Dann eventuel so, also ich rate ja nur:
    Sieht besser aus.

    Zitat Zitat von The_C Beitrag anzeigen
    Jetzt habe ich eine andere Lösung um den Spamer zu verwirren...
    Dann funktioniert aber dein Formular nicht mehr, wenn der benutzer JS deaktiviert hat...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •