javascript简单的电子邮件混淆器可以工作吗?

时间:2011-03-10 02:30:37

标签: javascript obfuscation

我正在开发一个网站,该网站将存储数千条电子邮件地址记录供公众参考,由于服务器资源非常低且负载非常高,我正在考虑编写一个简单的电子邮件混淆器。 / p>

它应该或多或少地像这样工作:

  • 生成加密密钥;
  • PHP加密电子邮件;
  • 在鼠标移动时,js向控制器发出ajax调用,该控制器返回加密密钥;
  • 电子邮件由javascript解密,然后将其放入正确的DOM元素中;

密钥将在运行时生成(哈希客户端名称?)。

问题是:我知道如何打破这个以及类似的混淆器类别,还有默默无闻的安全性等等,但是:用这种方法可以期待一定程度的安全吗?

另外,大多数刮痧蜘蛛是否有模拟鼠标移动等等?

对不起,也许这是一个愚蠢的问题,但我真的不是加密相关领域的王牌,这是我第一次做类似的事情。

客户提出了一个包含电子邮件的图片,但这个想法让我皱眉甚至比混淆更多。


另外我想知道,如果你觉得特别友善,我的手术部分是否多余/无用。我有一些想法(例如,如果蜘蛛模拟一个动作,加密会增加什么?但是再说一次,如果ajax数据不被识别为电子邮件,那可能会更好),但这是我以前从未探索过的领域。 / p>

2 个答案:

答案 0 :(得分:2)

正如sdleihssirhc指出的那样,简单的混淆实际上非常有效。这是一个简单的PHP函数,它使用ROT13来混淆mailto链接:

/**
 * GET OBFUSCATED MAILTO
 *
 * Takes an email and returns HTML to render the mailto: link in javascript.  This way, the
 * plaintext email is not in the page source, but is in the generated source.  Regular users can
 * copy and paste and click the mailto: link as normal, but spiders will face a major hurdle.
 *
 * @see String.prototype.rot13()
 *
 * @param string $email The address which the mailto: link will point to.
 * @param string $text (optional) The anchor text.  Default: same as $email.
 * @return string HTML with javascript to render mailto: link from obfuscated source.
 */
function getObfuscatedMailto($email, $text = false){

    $text = $text ? $text : $email;
    $link = '<a href="mailto:'.$email.'">'.$text.'</a>';

    // ROT13 encode javascript string
    $link = str_rot13($link);
    $link = str_replace("'","\\'",$link);

    $html = "<script>var s='$link';document.write(s.rot13());</script>";
    return $html;
}

这是javascript:

/**
 * ROT 13
 * 
 * Credit: Jonas Raoni Soares Silva
 *         http://jsfromhell.com/string/rot13
 */
String.prototype.rot13 = function(){
  return this.replace(/[a-zA-Z]/g, function(c){
      return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
  });
};

答案 1 :(得分:1)

如果您的最终目标是在公共网页上显示电子邮件地址,不需要用户身份验证或验证码,并阻止蜘蛛抓取您的网页以收集电子邮件地址以进行垃圾邮件发送,则答案为是和否。

这一切都取决于抓取您网站的机器人的复杂程度。事实是,如果它在网络浏览器DOM中可用,机器人可以从您的页面中提取它。

我可以想到的一种方法是阻止这种情况,将电子邮件地址的图像显示为超链接,当有人点击电子邮件地址的图像时,提示他们回答验证码,然后再拨打ajax电话将电子邮件地址下载到客户端浏览器。您显然需要保护获取电子邮件地址的请求,如果可能,您可以在成功回答CAPTCHA后将其发送回浏览器。

就鼠标移动而言,这取决于。如果我特意想要抓住你的网站,我会检查你的html和javascript代码,以便我的机器人可以做任何必须做的事情来实现它的目标。验证码可能是阻止我提取所需数据的唯一因素。或者是一个非常复杂的系统,用于扭曲你的html结构,这样我就没有一致的结构来编码。

我不认为您可以采用任何基于加密/安全性的方法,因为您公开显示数据。即使您使用密码保护数据,也必须将密码提供给某人才能查看数据。在这种情况下,如果他们正在编写机器人,他们的机器人只会使用该密码来刮取您的网站。

CAPTCHA可能是保护这些电子邮件地址并仍然作为图像公开显示的唯一好方法。虽然只是使用电子邮件地址创建图像并不能保护您免受所有人的侵害,但它可以保护您免受大多数人的侵如果你想要你可以通过几乎将电子邮件地址图像转换成他们自己的“验证码”图像来变得更加复杂,但这些会损害用户体验。

没有一个完美的解决方案,除了不显示电子邮件地址,并在您的网站上有一个人们可以用来发送电子邮件的表格。

此外,既然你说你的资源很少但负载很多,你建议的方法可能对你的服务器来说太麻烦,因为你需要随时加密每个电子邮件地址一次一个页。

希望这有帮助。

标记