Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PHP-Formmailer ohne Captcha

Frage Entwicklung PHP

Mitglied: ovu-p86

ovu-p86 (Level 1) - Jetzt verbinden

10.12.2011, aktualisiert 21:34 Uhr, 3397 Aufrufe, 6 Kommentare

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


1. Frage:

Habt ihr eine Empfehlung bzw. Code für ein sicheres Kontaktformular ohne Catcha.


2. 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:

01.
/* 
02.
Fügen sie die Funktionen "spamlevel_ermitteln" und "spamlevel_verarbeitung"  
03.
irgendwo in den Quellcode ihres PHP-Formmailers ein. 
04.
 
05.
Passen sie die Variable $meine_domain an ihren Domainnamen an. 
06.
*/ 
07.
 
08.
function spamlevel_ermitteln($text, $linebreak, $remove_linebreaks, &$remove_linebreaks_from_text) { 
09.
   $spam_level=0; 
10.
   $meine_domain="antikoerperchen.de"; //BITTE ANPASSEN 
11.
	if (strpos(strtolower($text), "@".$meine_domain)) $spam_level+=3; 
12.
	if (strpos(strtolower($text), "\ncc:")) $spam_level+=1; 
13.
	if (strpos(strtolower($text), "\nbcc:")) $spam_level+=1; 
14.
	if (strpos(strtolower($text), "\nsubject:")) $spam_level+=1; 
15.
	if (strpos(strtolower($text), "\ncontent-type:")) $spam_level+=1; 
16.
	if (strpos(strtolower($text), "\nmime-version:")) $spam_level+=1; 
17.
	if (strpos(strtolower($text), "\ncontent-transfer-encoding:")) $spam_level+=1; 
18.
	if (strpos(strtolower($text), "\ncontent-disposition:")) $spam_level+=1; 
19.
 
20.
	if (strpos(strtolower($text), "\rcc:")) $spam_level+=1; 
21.
	if (strpos(strtolower($text), "\rbcc:")) $spam_level+=1; 
22.
	if (strpos(strtolower($text), "\rsubject:")) $spam_level+=1; 
23.
	if (strpos(strtolower($text), "\rcontent-type:")) $spam_level+=1; 
24.
	if (strpos(strtolower($text), "\rmime-version:")) $spam_level+=1; 
25.
	if (strpos(strtolower($text), "\rcontent-transfer-encoding:")) $spam_level+=1; 
26.
	if (strpos(strtolower($text), "\rcontent-disposition:")) $spam_level+=1; 
27.
 
28.
	if (strpos(strtolower($text), "\lcc:")) $spam_level+=1; 
29.
	if (strpos(strtolower($text), "\lbcc:")) $spam_level+=1; 
30.
	if (strpos(strtolower($text), "\lsubject:")) $spam_level+=1; 
31.
	if (strpos(strtolower($text), "\lcontent-type:")) $spam_level+=1; 
32.
	if (strpos(strtolower($text), "\lmime-version:")) $spam_level+=1; 
33.
	if (strpos(strtolower($text), "\lcontent-transfer-encoding:")) $spam_level+=1; 
34.
	if (strpos(strtolower($text), "\lcontent-disposition:")) $spam_level+=1; 
35.
 
36.
	if ($linebreak!="no_linebreak_check") { 
37.
		if (($count=substr_count($text, "\n"))>0) $spam_level+=$count*1; 
38.
		if (($count=substr_count($text, "\r"))>0) $spam_level+=$count*1; 
39.
		if (($count=substr_count($text, "\l"))>0) $spam_level+=$count*1; 
40.
41.
	if ($remove_linebreaks!="no_linebreak_remove") { 
42.
		$remove_linebreaks_from_text=str_replace("\n", "", $remove_linebreaks_from_text); 
43.
		$remove_linebreaks_from_text=str_replace("\r", "", $remove_linebreaks_from_text); 
44.
		$remove_linebreaks_from_text=str_replace("\l", "", $remove_linebreaks_from_text); 
45.
46.
	return $spam_level
47.
48.
	 
49.
function spamlevel_verarbeitung($spam, &$betreff, &$text) { 
50.
	$spamlevel=5; //Ab diesem Spamlevel wird eine SPAM-Warnung an die E-Mail angehängt. 
51.
	$spamerkanntlevel=10; //Ab diesem Level wird angenommen, dass es sich um Spam handelt. 
52.
	$spamstoplevel=15; //Ab diesem Spamlevel wird der E-Mail-Versand verweigert. 
53.
	$spamwarnungverdacht="ACHTUNG: DIESE MAIL WURDE ALS POTENTIELLER SPAM ERKANNT."; //Diese Meldung wird in der E-Mail als Warnung ausgegeben, wenn Spamverdacht besteht. 
54.
	$spamwarnungerkannt="ACHTUNG: DIESE MAIL WURDE ALS SPAM ERKANNT."; //Diese Meldung wird in der E-Mail als Warnung ausgegeben, wenn Spamverdacht besteht. 
55.
	$spamverdacht="SPAM-VERDACHT"; //Diese Meldung wird vor den Betreff gestellt, wenn eine E-Mail möglicherweise als Spam in Betracht kommt. 
56.
	$spamerkannt="SPAM"; //Diese Meldung wird vor den Betreff gestellt, wenn eine E-Mail als Spam erkannt wurde. 
57.
	$nospam_meldung="NO SPAM, THX."; //Abbruchmeldung, wenn E-Mail-Versand aufgrund eines zu hohen Spamlevels verweigert wird. 
58.
 
59.
	if ($spam>=$spamstoplevel) die($nospam_meldung); //Breche E-Mail-Versand ab. 
60.
	 
61.
	elseif ($spam>=$spamlevel && $spam<$spamstoplevel) { 
62.
		if ($spam<$spamerkanntlevel) { 
63.
			$betreff=$spamverdacht.": ".$betreff
64.
			$text=$spamwarnungverdacht."\nSPAM-LEVEL: ".$spam."\n\n".$text
65.
			} else
66.
				$betreff=$spamerkannt.": ".$betreff
67.
				$text=$spamwarnungerkannt."\nSPAM-LEVEL: ".$spam."\n\n".$text
68.
69.
70.
71.
 
72.
 
73.
/* 
74.
Fügen sie die nachfolgenden Quellcode-Block VOR der Quellcodezeile ein, in der die 
75.
Mail verschickt wird. Passen sie die Variablennamen  
76.
$betreff, $name, $absender_mail und $text an die Variablennamen ihres  
77.
Formmailers an. 
78.
*/ 
79.
 
80.
$spamlevel+=spamlevel_ermitteln( 
81.
                                $name,  
82.
                                "check_linebreaks",  
83.
                                "remove_linebreaks",  
84.
                                $name 
85.
                                ); 
86.
$spamlevel+=spamlevel_ermitteln( 
87.
                                $absender_mail,  
88.
                                "check_linebreaks",  
89.
                                "remove_linebreaks",  
90.
                                $absender_mail 
91.
                               ); 
92.
$spamlevel+=spamlevel_ermitteln( 
93.
                                $betreff
94.
                                "check_linebreaks"
95.
                                "remove_linebreaks"
96.
                                $betreff 
97.
                               ); 
98.
$spamlevel+=spamlevel_ermitteln( 
99.
                                $text,  
100.
                                "no_linebreak_check",  
101.
                                "no_linebreak_remove",  
102.
                                $text 
103.
                               ); 
104.
spamlevel_verarbeitung($spamlevel, $betreff, $text); 
105.
 

Ü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
Mitglied: nxclass
10.12.2011 um 23:01 Uhr
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.
Bitte warten ..
Mitglied: ovu-p86
10.12.2011 um 23:19 Uhr
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
Bitte warten ..
Mitglied: nxclass
11.12.2011 um 00:35 Uhr
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.
Bitte warten ..
Mitglied: ovu-p86
11.12.2011 um 01:15 Uhr
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
Bitte warten ..
Mitglied: mrtux
11.12.2011 um 02:28 Uhr
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
Bitte warten ..
Mitglied: ovu-p86
11.12.2011 um 03:05 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (14)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...