我有一个开发网站和生产网站:
我在底部有一个 mailto email链接,php源代码完全如下:
<section>
<h2>Looking for a LAMP, WordPress or Drupal Developer?</h2>
<p>Contact me today: <br/>
<a href='mailto:mail@example.com'>mail@example.com</a>
<br/>
<a href='tel:+13334445555'>333 444 5555</a>
</p>
</section>
我的开发网站上的一切都很正常,生成的html如下:
<section>
<h2>Looking for a LAMP, WordPress or Drupal Developer?</h2>
<p>Contact me today: <br>
<a href="mailto:mail@example.com">mail@example.com</a>
<br>
<a href="tel:+13334445555">333 444 5555</a>
</p>
</section>
然后神秘地在我的生产网站上一些javascript被添加到我的mailto链接(并且只有mailto链接,在这种情况下只是一个但我添加了更多并且脚本也被添加到它们中)这是html输出在生产现场:
<section>
<h2>Looking for a LAMP, WordPress or Drupal Developer?</h2>
<p>Contact me today: <br>
<a href="mailto:mail@example.com">mail@example.com
<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function() {for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */
</script>
</a>
<br>
<a href="tel:+13334445555">333 444 5555</a>
</p>
</section>
我已经检查了我的生产服务器上的代码,这个脚本不存在。
可能会发生什么?
答案 0 :(得分:7)
这与ColdFusion无关。在此代码中,cf-hash
是SCRIPT
标记(纯HTML)的属性。搜索'cf-hash =“f9e31”会得到很多相似的代码。找到this link,表明它可能是CloudFlare电子邮件保护脚本。这将是您的生产服务器上运行的不在本地开发环境中的东西。
答案 1 :(得分:3)
默认情况下,CloudFlare会对您的电子邮件地址进行模糊处理。如果您想忽略电子邮件的混淆,只需将它们包装在HTML评论标签中即可。 CloudFlare将忽略这些。
<!--email_off-->EMAIL ADDRESS<!--/email_off-->
来源:http://roaringapps.com/blog/cloudflare-email-obfuscation/
答案 2 :(得分:1)
以下是如何用不同的语言来解码canflare的电子邮件混淆的方法:
function cfDecodeEmail(encodedString) {
var email = "", r = parseInt(encodedString.substr(0, 2), 16), n, i;
for (n = 2; encodedString.length - n; n += 2){
i = parseInt(encodedString.substr(n, 2), 16) ^ r;
email += String.fromCharCode(i);
}
return email;
}
console.log(cfDecodeEmail("543931142127353935313e352e7a373b39")); // usage
def cfDecodeEmail(encodedString):
r = int(encodedString[:2],16)
email = ''.join([chr(int(encodedString[i:i+2], 16) ^ r) for i in range(2, len(encodedString), 2)])
return email
print( cfDecodeEmail('543931142127353935313e352e7a373b39') ) # usage
function cfDecodeEmail($encodedString){
$k = hexdec(substr($encodedString,0,2));
for($i=2,$email='';$i<strlen($encodedString)-1;$i+=2){
$email.=chr(hexdec(substr($encodedString,$i,2))^$k);
}
return $email;
}
echo cfDecodeEmail('543931142127353935313e352e7a373b39'); // usage
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("543931142127353935313e352e7a373b39") // usage
print(email)
print("\n")
}
#include <iostream>
#include <string>
using namespace std;
string cfDecodeEmail(string encodedString);
int main()
{
cout << cfDecodeEmail("543931142127353935313e352e7a373b39") << endl;
}
string cfDecodeEmail(string encodedString)
{
string email;
char xorKey = stoi( encodedString.substr(0, 2), nullptr, 16);
for( unsigned i = 2; i < encodedString.length(); i += 2)
email += stoi( encodedString.substr(i, 2), nullptr, 16) ^ xorKey;
return email;
}
using System;
public class Program
{
public static string cfDecodeEmail(string encodedString)
{
string email = "";
int r = Convert.ToInt32(encodedString.Substring(0, 2), 16), n, i;
for (n = 2; encodedString.Length - n > 0; n += 2)
{
i = Convert.ToInt32(encodedString.Substring(n, 2), 16) ^ r;
char character = (char)i;
email += Convert.ToString(character);
}
return email;
}
public static void Main(string[] args)
{
Console.WriteLine(cfDecodeEmail("543931142127353935313e352e7a373b39")); // usage
}
}
答案 3 :(得分:0)
Cloudflare隐藏了电子邮件地址,以防止机器人从网页上抓取它们。
如果您是普通的Web用户而不是机器人,那么您将运行JavaScript。 Cloudflare注入了解读电子邮件地址的JavaScript。
某些网页不允许内联JavaScript运行,因此最终用户无法看到电子邮件地址。
考虑更改网站发布的Content_Security-Policy元标记,以允许运行内联JavaScript。
e.g。看到'unsafe-inline'的使用;
“从Chrome 46开始,内联脚本可以通过在策略中指定源代码的base64编码哈希来列入白名单。此哈希必须以使用的哈希算法为前缀(sha256,sha384或sha512)。请参阅哈希用法对于一个例子的元素。“
有关此内容的更多有用信息:https://developer.chrome.com/extensions/contentSecurityPolicy