Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 20. Dezember 2010 20:26

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

E-Mail verschlüsseln

Moin moin!

E-Mail-Adresssen hexadezimal verschlüsseln - gabs da nicht mal ein Tag dafür? Ich find nix in der aktuellen Liste. Und in der Forge gibts nur veraltete Sachen.

Hat jemand nen Tipp?

Servus
Alex

Offline

#2 20. Dezember 2010 20:31

kasimir
Gast

Re: E-Mail verschlüsseln

mit {mailto encode='hex' address='ich@du.de'} wird die mailadresse "verschlüsselt".

Kasimir

#3 20. Dezember 2010 20:46

piratos
Gast

Re: E-Mail verschlüsseln

#4 20. Dezember 2010 20:55

spike
hat von CMS/ms gehört
Registriert: 04. Dezember 2010
Beiträge: 6

Re: E-Mail verschlüsseln

kannscht auch ein text="parameter" dazu fügen
{mailto address="anallehexe@t-online.de" encode="hex" text="voodoo"}
gruss - spike

Offline

#5 20. Dezember 2010 21:26

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: E-Mail verschlüsseln

Ich nutze dazu jeweils einen Prefilter:

Datei prefilter.mailsecure.php (ab CMSMS 1.11):

<?php


function smarty_prefilter_mailsecure($tpl_source, &$smarty)
{
   return encrypt_content_email($tpl_source);
}

function fm_cryptmail($email){
	$n = 0;
	$r = '';
	$s = $email;

	for($i=0; $i < strlen($s); $i++){
		$n = ord($s[$i]);
		 
		if($n >= 8364){
			$n = 128;
		}
		$r .= chr($n+1);
	}

	return $r;
}

function encrypt_content_email($content) {

    // Attribute, ggf. aendern
    $atzeichen = "(at)"; // Ersatzzeichen fuer das @    
    
    // hier via regEx alle email-adressen heraussuchen
    preg_match_all("/(mailto:)?([a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum))/im",$content,$matches);
        
    // hier jetzt alle gefundenen durchgehen und ersetzen
    if ( isset ($matches[0][0]) and $matches[0][0] != '') {
        for ($m = 0; $m < count ($matches[0]); $m++) {
            $mystring = $matches[0][$m];
            $findme  = 'mailto:';
            $pos = strpos($mystring, $findme);
            $encrypted_email_address = ""; 
            if ($pos === false) {
                $encrypted_email_address .= str_replace("@",$atzeichen,$mystring);
            } else {
                $encrypted_email_address .= "javascript:linkTo_UnCryptMailto('{literal}".fm_cryptmail($mystring)."{/literal}')";
            }
            $content = str_replace($matches[0][$m],$encrypted_email_address,$content);
        }
    }
    return $content;
}

Diese wird im Plugin-Ordner gespeichert.

Nun braucht es im Template folgendes JavaScript:

function UnCryptMailto(s)
{
    var n = 0;
    var r = "";
    for( var i = 0; i < s.length; i++) {
        n = s.charCodeAt( i );
        if( n >= 8364 ) {
            n = 128;
        }
        r += String.fromCharCode( n - 1 );
    }
    return r;
}

function linkTo_UnCryptMailto( s )
{
    location.href=UnCryptMailto( s );
}

Der Vorteil dieser Lösung ist, dass die E-Mailadressen automatisch maskiert werden und der Benutzer bei der Eingabe im Backend keine kryptischen Smarty Funktionen für E-Mailadressen verwenden muss

Edit 28.3.2014 - Script angepasst

Beitrag geändert von nockenfell (28. März 2014 08:45)


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#6 17. Oktober 2012 14:54

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: E-Mail verschlüsseln

Habs jetzt so gelöst:

a) Im "Benutzerdefinierte Listenfeld" des TinyMCE folgende Zeilen ergänzen:

---|---
Email schützen|{mailto address="|" encode="hex"}

b) Mail-Adresse eingeben und markieren

c) Auf den Eintrag im Listenfeld klicken

Fertsch ...

Servus,
Alex

Offline

#7 26. März 2014 23:34

ampelmann
probiert CMS/ms aus
Registriert: 24. Januar 2012
Beiträge: 35

Re: E-Mail verschlüsseln

nockenfell schrieb:

Ich nutze dazu jeweils einen Prefilter:

.....

Der Vorteil dieser Lösung ist, dass die E-Mailadressen automatisch maskiert werden und der Benutzer bei der Eingabe im Backend keine kryptischen Smarty Funktionen für E-Mailadressen verwenden muss

@Nockenfell:  Das Ding funktioniert bei mir nicht, wenn ich an letzer Stelle der Mailadresse ein z habe z.b. Holz@hotmail.com. Kannst Du das bei Dir nachvollziehen?

LG.
Ampelmann

Offline

#8 26. März 2014 17:23

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: E-Mail verschlüsseln

Kurz geänderte Funktion des Smarty Plugins:

<?php


function smarty_prefilter_mailsecure($tpl_source, &$smarty)
{
   return encrypt_content_email($tpl_source);
}

function fm_cryptmail($email){
	$n = 0;
	$r = '';
	$s = $email;

	for($i=0; $i < strlen($s); $i++){
		$n = ord($s[$i]);
		 
		if($n >= 8364){
			$n = 128;
		}
		$r .= chr($n+1);
	}

	return $r;
}

function encrypt_content_email($content) {

    // Attribute, ggf. aendern
    $atzeichen = "(at)"; // Ersatzzeichen fuer das @    
    
    // hier via regEx alle email-adressen heraussuchen
    preg_match_all("/(mailto:)?([a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum))/im",$content,$matches);
        
    // hier jetzt alle gefundenen durchgehen und ersetzen
    if ( isset ($matches[0][0]) and $matches[0][0] != '') {
        for ($m = 0; $m < count ($matches[0]); $m++) {
            $mystring = $matches[0][$m];
            $findme  = 'mailto:';
            $pos = strpos($mystring, $findme);
            $encrypted_email_address = ""; 
            if ($pos === false) {
                $encrypted_email_address .= str_replace("@",$atzeichen,$mystring);
            } else {
                $encrypted_email_address .= "javascript:linkTo_UnCryptMailto('".fm_cryptmail($mystring)."')";
            }
            $content = str_replace($matches[0][$m],$encrypted_email_address,$content);
        }
    }
    return $content;
}

Kannst du das mal testen?


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#9 27. März 2014 21:26

ampelmann
probiert CMS/ms aus
Registriert: 24. Januar 2012
Beiträge: 35

Re: E-Mail verschlüsseln

nockenfell schrieb:

Kurz geänderte Funktion des Smarty Plugins:

...
Kannst du das mal testen?

Habe ich gemacht aber keine Verbesserung.

Hilft das weiter? Der Fehler kommt nicht bei Umwandlung einer Mailadresse wie xyz(at)irgendwo.com sondern nur bei der Umwandlung des href-Elements:

Error: at line 709 in file pfadname/content/lib/smarty/sysplugins/smarty_internal_templatecompilerbase.php

<a href="javascript:linkTo_UnCryptMailto('", expected one of: "}" , " " , ATTR

Offline

#10 28. März 2014 08:44

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: E-Mail verschlüsseln

Danke für die Präzisierung: Hier das aktualisierte Plugin

Datei prefilter.mailsecure.php (ab CMSMS 1.11):

<?php

function smarty_prefilter_mailsecure($tpl_source, &$smarty)
{
   return encrypt_content_email($tpl_source);
}

function fm_cryptmail($email){
	$n = 0;
	$r = '';
	$s = $email;

	for($i=0; $i < strlen($s); $i++){
		$n = ord($s[$i]);
		 
		if($n >= 8364){
			$n = 128;
		}
		$r .= chr($n+1);
	}

	return $r;
}

function encrypt_content_email($content) {

    // Attribute, ggf. aendern
    $atzeichen = "(at)"; // Ersatzzeichen fuer das @    
    
    // hier via regEx alle email-adressen heraussuchen
    preg_match_all("/(mailto:)?([a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum))/im",$content,$matches);
        
    // hier jetzt alle gefundenen durchgehen und ersetzen
    if ( isset ($matches[0][0]) and $matches[0][0] != '') {
        for ($m = 0; $m < count ($matches[0]); $m++) {
            $mystring = $matches[0][$m];
            $findme  = 'mailto:';
            $pos = strpos($mystring, $findme);
            $encrypted_email_address = ""; 
            if ($pos === false) {
                $encrypted_email_address .= str_replace("@",$atzeichen,$mystring);
            } else {
                $encrypted_email_address .= "javascript:linkTo_UnCryptMailto('{literal}".fm_cryptmail($mystring)."{/literal}')";
            }
            $content = str_replace($matches[0][$m],$encrypted_email_address,$content);
        }
    }
    return $content;
}

[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#11 29. März 2014 23:50

ampelmann
probiert CMS/ms aus
Registriert: 24. Januar 2012
Beiträge: 35

Re: E-Mail verschlüsseln

Prima, nun läuft es.  smile

Dankeschön für Deine Hilfe.

LG. Ampelmann

Offline

#12 23. Mai 2014 13:43

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 281

Re: E-Mail verschlüsseln

@nockenfell
Lasst sich Deine Lösung auch für News-/CGBlog-Artikel realisieren? Hier ist sie für Varianten, die den Seiten-Content ersetzen, leider unwirksam. Habe auch schon probiert, das JS ganz oben ins News-Template zu packen anstatt ins Seitentemplate.

Offline

#13 23. Mai 2014 20:04

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: E-Mail verschlüsseln

Du kannst die Funktion in einen Modifier umbauen:

modifier.mailsecure.php --> ins ./plugin Verzeichnis

<?php
function smarty_modifier_mailsecure($tpl_source)
{
   return encrypt_content_email($tpl_source);
}

function fm_cryptmail($email){
	$n = 0;
	$r = '';
	$s = $email;

	for($i=0; $i < strlen($s); $i++){
		$n = ord($s[$i]);
		 
		if($n >= 8364){
			$n = 128;
		}
		$r .= chr($n+1);
	}

	return $r;
}

function encrypt_content_email($content) {

    // Attribute, ggf. aendern
    $atzeichen = "(at)"; // Ersatzzeichen fuer das @    
    
    // hier via regEx alle email-adressen heraussuchen
    preg_match_all("/(mailto:)?([a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum))/im",$content,$matches);
        
    // hier jetzt alle gefundenen durchgehen und ersetzen
    if ( isset ($matches[0][0]) and $matches[0][0] != '') {
        for ($m = 0; $m < count ($matches[0]); $m++) {
            $mystring = $matches[0][$m];
            $findme  = 'mailto:';
            $pos = strpos($mystring, $findme);
            $encrypted_email_address = ""; 
            if ($pos === false) {
                $encrypted_email_address .= str_replace("@",$atzeichen,$mystring);
            } else {
                $encrypted_email_address .= "javascript:linkTo_UnCryptMailto('{literal}".fm_cryptmail($mystring)."{/literal}')";
            }
            $content = str_replace($matches[0][$m],$encrypted_email_address,$content);
        }
    }
    return $content;
}

Der Aufruf erfolgt wie folgt:


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline