使用了 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"
是什么意思?爬虫发送这个类型的请求没法得到正确的响应页面。
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] |
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; } ``` |
7
zsj950618 2016-05-27 12:21:20 +08:00
竟然不是用图片来做保护。。。。。
|
8
guoer 2016-05-27 12:49:59 +08:00
lz 的问题是 cf 如何精准的区分人和爬虫的吧
|
9
FindHao OP |
10
just1 2016-05-27 13:08:57 +08:00 via Android
用户收到的也是混淆的啊,只是 js 传唤出来了而已
|
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 验证码那样 通过鼠标轨迹 点击轨迹 /频率去判断 提高识别率 更精准 才是正道 |
13
msg7086 2016-05-28 05:43:39 +08:00
@kslr 没有任何合理的地方。
我偷了你的银行密码,但是我告诉你我没偷,你就放心了;我告诉你我偷了,你就方了? 这已经不是立场的问题了。 你让 CF 改算法,不明真相的人以为以后他们的邮件地址就很安全了,然后黑帽子照样花个 5 分钟破解了继续发辣鸡邮件,这样用户就没有损失了么。 强行隐瞒事实,麻痹其他用户,才叫助纣为虐。 |
14
franklinyu 2016-05-28 08:25:18 +08:00
確實,從原理上來說,混淆無法「阻止」垃圾郵件,只能「阻礙」(而且是挺沒用的阻礙)
|