ovu-p86
Goto Top

PHP-Formmailer ohne Captcha

Hallo,

suche nach einem sicheren PHP-Formmailer ohne Captcha für ein Kontaktformular.

Ich weiß, das Internet wimmelt nur so von Beiträgen dazu.
Da ich keine Ahnung von PHP habe, ist mein Problem, daß ich die Qualität der Beiträge und Lösungen nicht einschätzen kann.

Deshalb bitte keine allgemeinen Verweise auf Google.
Die Frage richtet sich an Praktiker, die mir eine Empfehlung geben können, oder sogar einen Code haben der sicher ist.


Wichtig wäre mir:
1. keine Lösung die über den Server eines Fremdanbieters läuft
2. Code der keine zusätzlichen Tools wie z.B. YDFramework notwendig macht.
3. kein Captcha


back-to-top1. Frage:
Habt ihr eine Empfehlung bzw. Code für ein sicheres Kontaktformular ohne Catcha.


back-to-top2. Frage:
Folgendes Codefragment hab ich im Internet gefunden. Wie bewertet ihr das?

Fand ich mit meinen beschränkten Kenntnissen gut. Gut finde ich, daß ich dadurch auch Rückmeldungen bekomme.
Gefunden habe ich den Beitrag bei blog.antikoerperchen.de

Hier der Code:

/*
Fügen sie die Funktionen "spamlevel_ermitteln" und "spamlevel_verarbeitung"  
irgendwo in den Quellcode ihres PHP-Formmailers ein.

Passen sie die Variable $meine_domain an ihren Domainnamen an.
*/

function spamlevel_ermitteln($text, $linebreak, $remove_linebreaks, &$remove_linebreaks_from_text) {
   $spam_level=0;
   $meine_domain="antikoerperchen.de"; //BITTE ANPASSEN  
	if (strpos(strtolower($text), "@".$meine_domain)) $spam_level+=3;  
	if (strpos(strtolower($text), "\ncc:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\nbcc:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\nsubject:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\ncontent-type:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\nmime-version:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\ncontent-transfer-encoding:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\ncontent-disposition:")) $spam_level+=1;  

	if (strpos(strtolower($text), "\rcc:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\rbcc:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\rsubject:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\rcontent-type:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\rmime-version:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\rcontent-transfer-encoding:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\rcontent-disposition:")) $spam_level+=1;  

	if (strpos(strtolower($text), "\lcc:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\lbcc:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\lsubject:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\lcontent-type:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\lmime-version:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\lcontent-transfer-encoding:")) $spam_level+=1;  
	if (strpos(strtolower($text), "\lcontent-disposition:")) $spam_level+=1;  

	if ($linebreak!="no_linebreak_check") {  
		if (($count=substr_count($text, "\n"))>0) $spam_level+=$count*1;  
		if (($count=substr_count($text, "\r"))>0) $spam_level+=$count*1;  
		if (($count=substr_count($text, "\l"))>0) $spam_level+=$count*1;  
		}
	if ($remove_linebreaks!="no_linebreak_remove") {  
		$remove_linebreaks_from_text=str_replace("\n", "", $remove_linebreaks_from_text);  
		$remove_linebreaks_from_text=str_replace("\r", "", $remove_linebreaks_from_text);  
		$remove_linebreaks_from_text=str_replace("\l", "", $remove_linebreaks_from_text);  
		}
	return $spam_level;
	}
	
function spamlevel_verarbeitung($spam, &$betreff, &$text) {
	$spamlevel=5; //Ab diesem Spamlevel wird eine SPAM-Warnung an die E-Mail angehängt.
	$spamerkanntlevel=10; //Ab diesem Level wird angenommen, dass es sich um Spam handelt.
	$spamstoplevel=15; //Ab diesem Spamlevel wird der E-Mail-Versand verweigert.
	$spamwarnungverdacht="ACHTUNG: DIESE MAIL WURDE ALS POTENTIELLER SPAM ERKANNT."; //Diese Meldung wird in der E-Mail als Warnung ausgegeben, wenn Spamverdacht besteht.  
	$spamwarnungerkannt="ACHTUNG: DIESE MAIL WURDE ALS SPAM ERKANNT."; //Diese Meldung wird in der E-Mail als Warnung ausgegeben, wenn Spamverdacht besteht.  
	$spamverdacht="SPAM-VERDACHT"; //Diese Meldung wird vor den Betreff gestellt, wenn eine E-Mail möglicherweise als Spam in Betracht kommt.  
	$spamerkannt="SPAM"; //Diese Meldung wird vor den Betreff gestellt, wenn eine E-Mail als Spam erkannt wurde.  
	$nospam_meldung="NO SPAM, THX."; //Abbruchmeldung, wenn E-Mail-Versand aufgrund eines zu hohen Spamlevels verweigert wird.  

	if ($spam>=$spamstoplevel) die($nospam_meldung); //Breche E-Mail-Versand ab.
	
	elseif ($spam>=$spamlevel && $spam<$spamstoplevel) {
		if ($spam<$spamerkanntlevel) {
			$betreff=$spamverdacht.": ".$betreff;  
			$text=$spamwarnungverdacht."\nSPAM-LEVEL: ".$spam."\n\n".$text;  
			} else {
				$betreff=$spamerkannt.": ".$betreff;  
				$text=$spamwarnungerkannt."\nSPAM-LEVEL: ".$spam."\n\n".$text;  
				}
		}
	}


/*
Fügen sie die nachfolgenden Quellcode-Block VOR der Quellcodezeile ein, in der die
Mail verschickt wird. Passen sie die Variablennamen 
$betreff, $name, $absender_mail und $text an die Variablennamen ihres 
Formmailers an.
*/

$spamlevel+=spamlevel_ermitteln(
                                $name, 
                                "check_linebreaks",   
                                "remove_linebreaks",   
                                $name
                                );
$spamlevel+=spamlevel_ermitteln(
                                $absender_mail, 
                                "check_linebreaks",   
                                "remove_linebreaks",   
                                $absender_mail
                               );
$spamlevel+=spamlevel_ermitteln(
                                $betreff,
                                "check_linebreaks",  
                                "remove_linebreaks",  
                                $betreff
                               );
$spamlevel+=spamlevel_ermitteln(
                                $text, 
                                "no_linebreak_check",   
                                "no_linebreak_remove",   
                                $text
                               );
spamlevel_verarbeitung($spamlevel, $betreff, $text);


Über Antorten zu den Fragen wäre ich dankbar.

(Wie gesagt kenne ich mich mit PHP nicht aus. Kann lediglich durch die Kenntnisse aus anderen Sprachen kleinere Einbindungen im Try und Error-Verfahren vornehmen.)


Gruß
Uwe

Content-ID: 177535

Url: https://administrator.de/contentid/177535

Ausgedruckt am: 03.12.2024 um 18:12 Uhr

nxclass
nxclass 10.12.2011 um 23:01:58 Uhr
Goto Top
Hallo,
das ist ein netter Code, aber viel bringt das auch nichts, denn am Ende bekommst du trotzdem die Nachricht - und dass evtl. 1000 mal wenn der Spamer es will.

Ist den das Kontaktformular denn so wichtig für Dich ?
ich keine Ahnung von PHP habe
... und offenbar auch keinen Programmierer - nehme ich mal an, dass Du nur eine kleine Webseite hast mit paar Privaten- oder Firmen- Informationen.
Sollte es so sein, würde ich eher auf eine Telefonnummer oder E-Mail Adresse verweisen und dem Client seine eigene Kontaktart und E-Mail Programm wählen lassen.
ovu-p86
ovu-p86 10.12.2011 um 23:19:38 Uhr
Goto Top
Hallo nxclass,

danke für die Antwort.

Ist den das Kontaktformular denn so wichtig für Dich ?

Ja, in der Form, daß ich endlich ein universelles Instrument haben möchte, mit dem ich ein Standard-Kontaktformular, aber auch andere Antwortformulare erzeugen kann. Ich möchte eine Grundbasis, die ich mir entsprechend anpasse.

Wichtig ist mir, daß ich nicht zur Spam-Schleuder werde.

Was ich bisher an Grundprinzipien rausbekommen habe ist; 1, daß man Eingabeformular und php trennen sollte und 2. das man die Ziel-eMail-Adresse nicht als Variable definieren soll sondern fest verdrahten soll.


Noch mal eine Frage zum Codefragment:

Du sagst, das ist wirkungslos.
Ist das prinzipiell so, oder kann ich durch anpassen der Level (also Versand wird früher verhindert) das Problem lösen?
Vor allem verhindert der Code zumindest teilweise, daß ich zur Spam-Schleuder werde?
Was kann ich zusätzlich tun?
Wie gesagt trotz meiner beschränkten php-Kenntnisse finde ich den Code einleuchtend gut. Vor allem das ich mitbekomme wenn ich als Spamschleuder mißbraucht werde

Kannst du mir irgendwie weiterhelfen?


Gruß
Uwe
nxclass
nxclass 11.12.2011 um 00:35:03 Uhr
Goto Top
Wichtig ist mir, daß ich nicht zur Spam-Schleuder werde.
... damit ich das richtig verstehe - die Formular Daten werden nur an eine bestimmte E-Mail Adresse gesendet oder an eine Adresse die der Client definiert ?

Ziel-eMail-Adresse nicht als Variable definieren soll sondern fest verdrahten soll.
... also wahrscheinlich nicht - dann wird auch nur diese Adresse gespammt, wenn jemand das Formular 1000 mal sendet - und das muss verhindert werden.
(man sollte dann allerdings auch nicht eine "Kopie an Sie" senden - sonnst wird es ggf. Böse enden)

Sowas kann man erreichen, indem man ein Log (sqlite?) führt und einen Client nach zB: 3 gesendeten Nachrichten innerhalb von 5 min - für eine gewisse zeit sperrt.
Eingaben wie E-Mail Adresse und Name sollte man sowieso immer prüfen.
ovu-p86
ovu-p86 11.12.2011 um 01:15:40 Uhr
Goto Top
Hallo nxclass,

die Formulardaten sollen zunächst nur an mich, meine im Code definierte eMail-Adresse gesendet werden.
(wenn ich mich mal besser auskenne werde ich das auch noch ergänzen um eine Antwortmail an den Absender, also an die im Formular vom Absender angegebene eMail-Adresse, zu senden, zunächst aber nicht.)

Wie gesagt Hauptziel ist: Ich will nicht zur Spamschleuder werden. Wenn ja, will ich das mitbekommen. Ich denke das ist ok.
Wenn ich selber zugespammt werde kann ich immer noch reagieren.

Ich suche eigentlich nur ein sicheres Code-Grundgerüst auf dem ich aufbauen kann.

Fragen:
1. Ist das oben angegebene Codefragment wirksam um nicht als Spamschleuder mißbraucht zu werden? Falls ja, bekomme ich das mit?
2. Hast du nicht eine Code-Grundstruktur die du posten kannst?

Hab zwischenzeitlich noch rumgesucht und getestet.
Gut finde ich auch den folgenden Beitrag 1ingo. Hab mit dem auch rumprobiert und modifiziert.. Funktioniert auch soweit. Problem, ich weiß nicht wie den von mir so geliebten (wegen der Rückmeldung), oben genannten Code integieren kann.


Gruß
Uwe
mrtux
mrtux 11.12.2011 um 02:28:11 Uhr
Goto Top
Hi !

Warum willst Du das unbedingt ohne Captcha realisiert haben, gibt es dafür irgend einen plausiblen Grund?

Auch wenn das ein Thema ist, wo es immer wiedermal Diskussionen über Sinn und Zweck gibt (siehe Bericht in der ct), reichen sie meist immerhin aus, um wenigstens Otto Möchtegern Spammer und den kleinen Klausi Skriptkid davon abzuhalten, die Forms als Spielwiese fürs Selbststudium zu nutzen oder neu erworbene "Hacker" Kenntnisse zu testen.

mrtux
ovu-p86
ovu-p86 11.12.2011 um 03:05:39 Uhr
Goto Top
Hallo mrtux,

ich finde Captchas ungastlich. Möchte es dem Nutzer nicht zu kompliziert machen.

Ich denke im Sinne der Community ist es doch ok, wenn ich zunächst hauptsächlich daran denke nicht selber als Spamschleuder genutzt zu werden und erst in zweiter Linie daran selber nicht zugemüllt zu werden.

In diesem Sinne wäre es schon ein riesen Vorteil möglichst schnell zu erfahren ob man als Spamschleuder mißbraucht wird. Dann kann man noch rechtzeitig abschalten.

Frage: Ist das ganz oben angegebene Codefragment wirksam um nicht als Spamschleuder mißbraucht zu werden? Falls ja, bekomme ich das mit?


Gruß
Uwe