Leere Mails auf AJAX Formularverarbeitung

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich habe hier eine Seite zur Überarbeitung bekommen, die auf einem responsiven Template basiert. Das Kontakt und ein Reservierungsformular werden von einem AJAX Script verarbeitet, das auch die Mails erzeugt.
Hier geht es jetzt um das Reservierungsformular, das auch korrekt arbeitet. Wenn man Pflichtfelder frei läßt oder nur Leerzeichen einträgt, wird das entsprechend angemeckert. Trotzdem kommt es fast täglich vor, daß leere Emails ankommen, bei denen nur die Feldbeschriftungen, aber keine Inhalte drin stehen.

Hier mal das gekürzte Verarbeitungsscript:

HTML:
jQuery(document).ready(function($){

	// hide messages 
	$("#error").hide();
	$("#sent-form-msg").hide();
	
	// on submit...
	$("#reservationForm #submit").click(function() {
		$("#error").hide();
		
		//name
		var name = $("input#name").val();
		name = $.trim(name);
		if(name == ""){
			$("#error").fadeIn().text("Bitte Namen eingeben.");
			$("input#name").focus();
			return false;
		}
		//vorname
		var vorname = $("input#vorname").val();
		vorname = $.trim(vorname);
		if(vorname == ""){
			$("#error").fadeIn().text("Bitte Vornamen eingeben.");
			$("input#vorname").focus();
			return false;
		}

		// checkbox
		if ($("input#checkbox_1").attr("checked"))
			var checkbox_1 = $("input#checkbox_1").val();
		else
			var checkbox_1 = '';
		if ($("input#checkbox_2").attr("checked"))
			var checkbox_2 = $("input#checkbox_2").val();
		else
			var checkbox_2 = '';

		// comments
		var comments = $("#comments").val();
		
		// send mail php
		var sendMailUrl = $("#sendMailUrl").val();

		//to, from & subject
		var to = $("#to").val();
		var from = $("#from").val();
		var subject = $("#subject").val();

		// data string
		var dataString = 'name='+ name
						+ '&vorname=' + vorname        
						+ '&strasse=' + strasse        
						+ '&plz=' + plz        
						+ '&ort=' + ort        
						+ '&checkbox_1=' + checkbox_1
						+ '&checkbox_2=' + checkbox_2
						+ '&checkbox_3=' + checkbox_3
						+ '&checkbox_4=' + checkbox_4
						+ '&checkbox_5=' + checkbox_5
						+ '&checkbox_6=' + checkbox_6
						+ '&checkbox_7=' + checkbox_7
						+ '&checkbox_8=' + checkbox_8
						+ '&email=' + email
						+ '&tel=' + tel
						+ '&comments=' + comments
						+ '&to=' + to
						+ '&from=' + from
						+ '&subject=' + subject;						         
		// ajax
		$.ajax({
			type:"POST",
			url: sendMailUrl,
			data: dataString,
			success: success()
		});
	});  
		
		
	// on success...
	 function success(){
	 	$("#sent-form-msg").fadeIn();
	 	$("#contactForm").fadeOut();
	 }
	
    return false;
});

Wie kann es zu solchen leeren Mails kommen und wie kann man die verhindern?

Viele Grüße,
Sprint
 
Sofern die Form eine action hat kann man JS abschalten und das Formular abschicken. Das heisst jenachdem wie wichtig das ist, muss auch eine Prüfung auf Serverseite (sprich im PHP File dass das Formular verarbeitet) stattfinden.

Das könntest du relativ einfach testen. Erstelle ein Hiddenfield mit dem value="No JS". Dann setze mit Javascript einen anderen Value, zB value="JS active".

In den Mails wirst du dann entweder "NO JS" oder "JS active" sehen.
 
Hmm dann wirds schwieriger. name und vorname checkst du und wenn ich das richtig sehe kommt man ohne böse Absicht nicht an diesem Check vorbei. Die anderen Felder können aber leer sein.

Eventuell noch das HTML dazu posten (nicht dass es da zB doppelte IDs drin hat oder so..)
 
Die meisten Felder sind Pflichtfelder und werden alle ähnlich geprüft. Da das aber immer das gleiche Prozedere ist, hab ich das einfach nur gekürzt.

Das HTML Formular ist soweit auch in Ordnung und wenn man über die Webseite das Formular normal ausfüllt, wird die Mail auch völlig korrekt erstellt und bei leeren Pflichtfeldern wird auch korrekt hingewiesen und die Mail nicht abgeschickt.

Gäbe es denn eine Möglichkeit, mit bösen Absichten das zu umgehen? Ich hab es schon ein paar Mal erlebt, daß sich Leute einfach einen Spaß daraus machen, leere Mails zu generieren.

Bei einem anderen, nicht JS verarbeiteten, Formular passiert das gleiche, wenn das nach mehr als 24 Stunden nach dem Aufrufen abgeschickt wird. Das kann aber hier doch eigentlich nicht passieren, oder? An diesem Formular ist ja keinerlei PHP bzw. Sessions beteiligt.
 
Klar kann man mit "bösen Absichten" eine leere Mail versenden, indem man die Adresse in sendMailUrl einfach direkt aufruft. Da kann man auch Parameter mitgeben wenn man will. Das dies aber fast täglich passiert kann ich mir irgendwie nicht vorstellen.
 
Ich hatte auch eher gedacht, daß man die Feldprüfung irgendwie umgehen kann. Denn die Mails sind ja nicht leer, sondern nur ohne Inhalte. Die Feldbezeichner, also Name, Vorname, Telefon usw. stehen drin. Nur die Daten dahinter fehlen.
 
Die Seite ist online und du kannst auch gerne testen, da die Mails aber nicht auf meine Adresse gehen, muß ich dem Inhaber Bescheid sagen, damit der weiß was los ist.
Daten dazu kommen per PN.
 
Hallo,

auch wenn das Thema schon erledigt ist....

Warum überträgst du die Daten nicht mit "serialize()"?

Code:
$.ajax({
    url: 'LINK_ZUR_DATEI', // zum Bsp. sendmail.php
    type: 'POST',
    data: {
        'data': form.serialize()
    },
    ...
});
und in PHP müsstest du die Daten ja sowieso nochmal prüfen....
PHP:
//
// form.serialize() decodieren
$post = array();
parse_str($_POST['data'], $post);

$vorname = $post['vorname'];
// usw.
und kannst so auf deine Form-Felder wieder zugreifen.
 

Neue Beiträge

Zurück