V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
FindHao
V2EX  ›  Python

coudflare 的邮件地址保护(混淆) 如何破?

  •  
  •   FindHao · 2016-05-27 09:58:20 +08:00 · 7044 次点击
    这是一个创建于 3101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用了 cloudflare 的服务,如果开启了 email Obfuscation ,页面里真正的 email 地址会被隐藏,但是人在浏览的时候是没有问题的,在爬的时候,单纯用 requests , cookie , session 等获得的还是被保护的信息:

    <a class="__cf_email__" data-cfemail="3645425d595b574476424618535243184551" href="/cdn-cgi/l/email-protection">
    [email protected]
    </a>
    <script data-cfhash="f9e31" type="text/javascript">
     /* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */
    </script>
    

    在官网关于 email Obfuscation 里有这样的说明:

    A page should have a MIME type (Content-Type) of "text/html" or "application/xhtml+xml" for the email obfuscation to happen. For instance, if you're doing some ajax calls, and wish to return email addresses in a JSON format, make sure your webserver returns a type of "application/json"

    想了解下它的原理。

    它的your webserver returns a type of "application/json"是什么意思?爬虫发送这个类型的请求没法得到正确的响应页面。

    14 条回复    2016-05-28 08:25:18 +08:00
    notgod
        1
    notgod  
       2016-05-27 10:04:26 +08:00   ❤️ 1
    [code]

    package main

    import (
    "bytes"
    "strconv"
    )

    func cf(a string) (s string) {
    var e bytes.Buffer
    r, _ := strconv.ParseInt(a[0:2], 16, 0)
    for n := 4; n < len(a)+2; n += 2 {
    i, _ := strconv.ParseInt(a[n-2:n], 16, 0)
    e.WriteString(string(i ^ r))
    }
    return e.String()
    }

    func main() {
    email := cf("f091809582839f9eb080999e97848582849c95de939f9d")
    print(email)
    print("\n")
    }

    [/code]
    notgod
        2
    notgod  
       2016-05-27 10:08:33 +08:00
    Go Lang
    https://gist.github.com/AbeEstrada/11e4511f9915b00f9714

    PHP

    ···php
    echo 'Decoded Email: '.deCFEmail('f091809582839f9eb080999e97848582849c95de939f9d');
    function deCFEmail($c){
    $k = hexdec(substr($c,0,2));
    for($i=2,$m='';$i<strlen($c)-1;$i+=2)$m.=chr(hexdec(substr($c,$i,2))^$k);
    return $m;
    }
    ```
    kslr
        3
    kslr  
       2016-05-27 11:24:27 +08:00
    @notgod 你这是助纣为孽
    kslr
        4
    kslr  
       2016-05-27 11:25:36 +08:00
    @notgod 每天邮箱里面的垃圾邮件还不够受的吗,你看看各种发邮箱的时候各种编码,不就是为了躲避。
    Marfal
        5
    Marfal  
       2016-05-27 11:38:53 +08:00
    @kslr 这样技术才能发展啊,掩耳盗铃只对自己有效,你不知道不代表别人不知道。
    kslr
        6
    kslr  
       2016-05-27 12:11:13 +08:00
    @Marfal “呵呵” 我已经给 cloudflare 发了邮件,请求更改算法。
    zsj950618
        7
    zsj950618  
       2016-05-27 12:21:20 +08:00
    竟然不是用图片来做保护。。。。。
    guoer
        8
    guoer  
       2016-05-27 12:49:59 +08:00
    lz 的问题是 cf 如何精准的区分人和爬虫的吧
    FindHao
        9
    FindHao  
    OP
       2016-05-27 13:08:18 +08:00
    @notgod 感谢
    @kslr 我是在给别人做提取信息,只是供展示而非滥发邮件。如果按照 cloudflare 的说法,实际上是可以给个接口的。
    @guoer 的确也存在疑惑。
    just1
        10
    just1  
       2016-05-27 13:08:57 +08:00 via Android
    用户收到的也是混淆的啊,只是 js 传唤出来了而已
    notgod
        11
    notgod  
       2016-05-27 17:35:10 +08:00
    @kslr 本来是不想回你的 不过你这么上纲上线 我就跟你讨论讨论说道说道
    这里只是单纯讨论技术问题

    其 1. 题主在询问的是问题 我只是个搬运工
    pingturtle.com/home/post/cloudflare-email-protection-decoder
    Jan 24, 2012
    这个问题 2012 年就已经有解决方案了
    这个只是个简单的输出混淆 并不涉及加密 如果是对称加密 没密匙解密不了
    但是这个不适合前端

    其 2. 垃圾邮件人人都恨 但是这个回复只是邮件地址的分析
    技术的存在本身并无善恶 在于用的人 题主并不是一定用在恶的方面
    而且现在的反垃圾邮件已经非常成熟了 我使用的 Gmail Outlook 垃圾邮件判断非常精准
    阻止垃圾邮件 要从源头去解决 如果你有能力 可以去开发反垃圾邮件网关这类的技术
    没有必要为一个清除数据混淆的算法而抨击我什么助纣为孽
    如果真不要垃圾邮件 直接不使用邮箱服务不是彻底解决了?

    其 3. 助纣为孽这么上纲上线对于我们真没必要
    百度推广卖假药 你能说百度助纣为孽 但是百度还存在吗?

    其 4. 您给 cloudflare 发了邮件,请求更改算法。
    这是您的权利, 同样的道理 你也可以发邮件给百度 让他们关闭推广
    技术的角度 CF 是前端输出内容给用户看 这个输出必须是可见的 无论如何混淆 都可以还原 只是算法而已
    和魔方一个道理 懂的人 无论如何都可以还原
    您应该告诉 Cloudflare 去提高识别率 判断人类和机器的行为 提高判断的准确度

    我是很心平气和的和您讨论这个事 希望能明白

    @Marfal 同意你观点,每种技术的出现 都是有攻有守 才能进步 这就是为什么存在白帽子和黑帽子的原因
    相对论 必须有对立的部分 才能推动一种技术的成熟和进步



    @guoer 对的 我也觉得应该重心放在人类访问和机器访问的判断上
    但是 Cloudflare 要考虑性能 不太可能和 Google 验证码那样 通过鼠标轨迹 点击轨迹 /频率去判断
    提高识别率 更精准 才是正道
    kslr
        12
    kslr  
       2016-05-27 17:40:17 +08:00
    @notgod 这个问题不需要讨论下去了,立场不同,我是非常讨厌垃圾邮件的,所以也会不遗余力的使用我的能力支持任何合理的行为。
    msg7086
        13
    msg7086  
       2016-05-28 05:43:39 +08:00
    @kslr 没有任何合理的地方。
    我偷了你的银行密码,但是我告诉你我没偷,你就放心了;我告诉你我偷了,你就方了?
    这已经不是立场的问题了。
    你让 CF 改算法,不明真相的人以为以后他们的邮件地址就很安全了,然后黑帽子照样花个 5 分钟破解了继续发辣鸡邮件,这样用户就没有损失了么。
    强行隐瞒事实,麻痹其他用户,才叫助纣为虐。
    franklinyu
        14
    franklinyu  
       2016-05-28 08:25:18 +08:00
    確實,從原理上來說,混淆無法「阻止」垃圾郵件,只能「阻礙」(而且是挺沒用的阻礙)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4928 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:53 · PVG 11:53 · LAX 19:53 · JFK 22:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.