2012-01-22 10 views
4

我一直在阅读电子邮件混淆。PHP + CSS Obfuscation - PHP ord THEN PHP strrev + CSS反向文本,如何获得特殊字符验证向后?

我发现了一篇名为Best Method for Email Obfuscation? - By Jeff Starr的有趣文章,他描述了SilvanMühlemann在1.5年前进行的各种测试。

根据这项研究,尽管存在各种缺点,但在1.5年的测试中,css obfustication仍然100%有效。

看到我在玩这种笨拙的方法之前,我决定再给它一次,增加一个我过来的php函数。

下面是函数:

// Converts email and tel into html special characters 
function convert_email_adr($email) 
{ 
    $pieces = str_split(trim($email)); 
    $new_mail = ''; 
    foreach ($pieces as $val) 
    { 
     $new_mail .= '&#'.ord($val).';'; 
    } 
    return $new_mail; 
} 

这里是使用该功能的PHP。

$lstEmail = convert_email_adr("{$row['email']}"); 

这不正是所描述的,我也认为这会工作得非常好,假设收割机没有写识别特殊字符的字符串和解码他们的代码。

所以我决定,如果我将这两种方法结合起来,如在,我打破串入特殊字符,然后用它strrev,然后用css来扭转串...简单...

这里是PHP的补充peice的是反转的实际字符串作为页面的源代码看出:

$lstEmail = strrev($lstEmail); 

和CSS来再次扭转它在客户端:

span.obfuscate { unicode-bidi:bidi-override; direction: rtl; } 

和HTML:

<p><span class='listHeadings'>eMail:</span> <span class='obfuscate' style='font-size:0.6em;'><a href='mailto: $lstEmail?subject=Testing 123'>$lstEmail</a></span></p> 

但问题是,串现在在反向而无法通过验证...下面是一个例子:

; 901#&; 111#&; 99#&; 64#&; 801#&; 501#&; 79#&; 901#&; 301#&; 46#&; 411#&; 101#&; 001#&; 011#&; 111#&; 611#&; 011#&; 79#&; 811#&; 301#&; 501#&; 79#&; 411#&; 99#&

会发生什么情况是特殊字符不会被解码为实际字符,所以您只能看到特殊字符串的反向。

还有一个缺点,如Jeff Starr所述,您无法使用mailto中的css方法,因为您无法在href属性中使用span标记。

所以现在我真的被困在如何去完成这项任务的可能性。我想如果他们想给我发邮件,我可能会迫使他们自己输入我的电子邮件地址......但另一方面,我不太确定。

有一天来验证反向特殊字符的任务......

会有人能够向我提供这方面的任何类型的输入或支持?此外,任何建议以不同的,合法的方式去完成这项任务将不胜感激!

我说是合法的,因为我打算在我的一个活的项目中使用这些函数,这是一个商业列表网站(目前使用上面的php函数)...我想要做的最后一件事是开始玩并创建一个差距,并让垃圾邮件发送者的一堆信息!我认为这对商业会很糟糕......

+1

我要说的是,任何obsfucation的问题是,你无法衡量的人向你谁得到转过身去联系。在文章中,他表示该方法是100%有效的,然后继续前进。非常明显的是,它可以100%有效地防止垃圾邮件的收集,而不是100%有效地允许那些希望实际使用电子邮件地址的人继续进行交流。 – Kzqai

+0

@Tchalvak @Tchalvak这是一个很好的观点......但我的意思是,在这样的情况下,为了更好的安全性(更少的垃圾邮件)为他们中的大多数人打开一些用户是不是更好? –

+0

问题是,如果没有稳健的测试(例如,在点击隐藏的电子邮件地址或其他地方时对服务器进行ping处理的javascript计数器),则不会有多少人被拒绝。人们常常被一些小障碍拒之门外,比如电子邮件地址在所有字符被点击时都会颠倒过来...... – Kzqai

回答

1

它取反,你混淆前...

$email = '[email protected]'; 
$new = convert_email_adr($email); 

echo '<span style="unicode-bidi:bidi-override; direction: rtl;">'.$new.'</span>'; 

function convert_email_adr($email, $reverse = true, $obfuscate = true) 
{ 
    $email = trim($email); 

    if($reverse) 
    { 
     $email = strrev($email); 
    } 

    if($obfuscate) 
    { 
     $pieces = str_split($email); 
     $email = ''; 

     foreach($pieces as $piece) 
     { 
      $email .= '&#'.ord($piece).';'; 
     } 
    } 

    return $email; 
} 
2

作为网站管理员,我总是在联系网站上以纯文本形式显示我的电子邮件。它是访问者最舒适的解决方案,如果支持css或js,它可以独立工作。

自10年以来,我用几封电子邮件做了这件事..是的,我收到了一些垃圾邮件,但没有那么多,每天大约3-5次。我有一个很好的垃圾邮件过滤器,每周收集一次垃圾邮件并删除它。

我不使用mailto,因为很多人没有配置本地电子邮件程序,也不知道点击mailto-link时如何处理弹出窗口。

+0

感谢您的输入。你提出一个好的观点,但在我看来,尽管每天3-5封垃圾邮件可能并不多,对于我的一些客户来说可能是不可接受的......我不能指望他们每个人都明白垃圾邮件是什么,以及如何避免它。有了这个说法,我认为,通过我的网站引发的一封垃圾邮件......会对整个企业造成不利影响。你提出的有关mailto的观点是有效的,我曾考虑过......但作为一个列表服务,人们可能会期望这样的功能。 –

+0

打算加1,直到我找到“我不使用mailto”部分。完全没有意义。 – Kzqai

1

为什么你不这样使用它?

function convert_email_adr($email) 
{ 
    $pieces = str_split(strrev(trim($email))); 
    $new_mail = ''; 
    foreach ($pieces as $val) 
    { 
     $new_mail .= '&#'.ord($val).';'; 
    } 
    return $new_mail; 
} 
+0

有趣...但仍然在我原来的输入范围内,因此允许有相同的副作用。 –

1

一般情况下,很好地解决了这是围绕提供完全的电子邮件地址,我指的不是只是电子邮件地址的抽象层,提供一个接触的形式。他们填写他们的信息并提交,然后服务器将信息发送到正确的电子邮件地址。

这不是一个特别扩展的方法,不过,一般大多适用于单一的“联系我”的局面,而不是“这是我们公司的上市联系”的局面,在这种情况下obsfucation直接违背你的目标运行确保客户尽可能轻松地与目标联系。在这种情况下,您通常希望获得良好的垃圾邮件保护。