利用自定义web-font实现数据防采集

 

From:https://blog.csdn.net/fdipzone/article/details/68166388

完整源码:https://download.csdn.net/download/fdipzone/9798142

 

 

web-font介绍

web-font 是 CSS3 中的一种标记 @font-face
在 @font-face 声明里,你可以声明一种字体,指定这种字体字体库文件从网络某个地址下载。

具体写法如下:

@font-face {font-family: '字体名称';src:  url('http://www.example.com/字体名称.eot'); /* IE9 Compat Modes */src:  url('http://www.example.com/字体名称.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */url('http://www.example.com/字体名称.ttf') format('truetype'), /* Safari, Android, iOS */url('http://www.example.com/字体名称.woff') format('woff'),  /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */url('http://www.example.com/字体名称.svg?#字体名称') format('svg'); /* Legacy iOS */
}

当网页数据需要使用特别的字体来修饰时,我们就可以使用web-font。因为使用web-font会自动从网络中加载字体,并不需要用户本机有安装这个字体。

 

使用自定义web-font实现数据防采集

防采集原理:
使用web-font可以从网络加载字体,因此我们可以自己创建一套字体,设置自定义的字符映射关系表。
例如设置0xaaa是映射字符1,0xbbb是映射字符2,以此类推。
当需要显示字符1时,网页的源码只会是0xaaa,被采集的也只会是0xaaa,并不是1,使采集者采集不到正确的数据。而对于正常访问的用户则没有影响。

对于中文的防采集不适合使用web-font这种方法,因为中文的字体库太大。而对于数字,英文则适合使用此方法实现防采集。
 

实例:使用自定义web-font实现数字数据防采集(例如股票,电影票房等数据)

1.创建指定字符的自定义字体

首先选择一款字体,为方便演示,选择系统自带的Arial字体。

ttf转svg

这里写图片描述

进入 https://everythingfonts.com/ttf-to-svg
上传ttf文件,将字体文件转为svg格式,另存为my_webfont.svg
 

选择需要使用的字符及设置字体映射关系

这里写图片描述

进入 https://icomoon.io/app/#/select
选择左上角 Import Icons 按钮,导入my_webfont.svg
导入后选择我们要使用的字符,本例只需要选择0-9,然后点击右下角 Generate Font 按钮

设置字符映射
Arial字体字符映射关系(字符与16进制)

0 => 30
1 => 31
2 => 32
3 => 33
4 => 34
5 => 35
6 => 36
7 => 37
8 => 38
9 => 39

我们这里修改映射关系,可以尽量复杂一点且没有规律,使不容易猜出。

例如把映射关系设置为

0 => e1f2
1 => efab
2 => eba3
3 => ecfa
4 => edfd
5 => effa
6 => ef3a
7 => e6f5
8 => ecb2
9 => e8ae

 

这里写图片描述

并把名字也按映射关系修改,设置映射关系后,点击右下角download下载字体。

把下载的字体文件全部命名为my_webfont.*
 

2.在网页中使用web-font显示数据

首先需要设置 @font-face

@font-face {font-family: 'my_webfont';src:  url('fonts/my_webfont.eot?fdipzone');src:  url('fonts/my_webfont.eot?fdipzone#iefix') format('embedded-opentype'),url('fonts/my_webfont.ttf?fdipzone') format('truetype'),url('fonts/my_webfont.woff?fdipzone') format('woff'),url('fonts/my_webfont.svg?fdipzone#my_webfont') format('svg');
}

然后需要定义一个css的class,font-family使用这个web-font

.my_webfont{font-family: my_webfont !important;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;
}

在需要显示这种数据的地方,填入数据,且容器的class定义为my_webfont

<p class="my_webfont">&#xefab</p>

这样就可以显示字符1了。

 

3.完整的实例代码

<?php
// 字体映射关系
function get_font_num($num){$result = '';$font_map = array(0 => 'e1f2',1 => 'efab',2 => 'eba3',3 => 'ecfa',4 => 'edfd',5 => 'effa',6 => 'ef3a',7 => 'e6f5',8 => 'ecb2',9 => 'e8ae');for($i=0,$len=strlen($num); $i<$len; $i++){$n = substr($num, $i, 1);if(is_numeric($n)){$result .= '&#x'.$font_map[$n].';';}else{$result .= $n;}}return $result;
}$data = array(array('金刚:骷髅岛', 4921.98, 5),array('美女与野兽', 971.36, 12),array('欢乐喜剧人', 590.27, 5),array('一条狗的使命', 389.76, 26),array('领袖1935', 271.27, 1),
);?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><title>利用自定义web-font实现数据防采集</title><style type="text/css">@font-face {font-family: 'my_webfont';src:  url('fonts/my_webfont.eot?fdipzone');src:  url('fonts/my_webfont.eot?fdipzone#iefix') format('embedded-opentype'),url('fonts/my_webfont.ttf?fdipzone') format('truetype'),url('fonts/my_webfont.woff?fdipzone') format('woff'),url('fonts/my_webfont.svg?fdipzone#my_webfont') format('svg');font-weight: normal;font-style: normal;}.my_webfont{font-family: my_webfont !important;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;}td{padding: 0px 5px 0px 5px;text-align: center;}.left{text-align: left;}</style></head><body><table><tr><td>排名</td><td>片名</td><td>实时票房(万)</td><td>上映天数</td></tr>
<?phpfor($i=0,$len=count($data); $i<$len; $i++){echo '<tr>'.PHP_EOL;echo '<td>'.($i+1).'</td>'.PHP_EOL;echo '<td class="left">'.$data[$i][0].'</td>'.PHP_EOL;echo '<td class="my_webfont">'.get_font_num($data[$i][1]).'</td>'.PHP_EOL;echo '<td class="my_webfont">'.get_font_num($data[$i][2]).'天</td>'.PHP_EOL;echo '</tr>'.PHP_EOL;}
?></table></body>
</html>

在浏览器访问可以看到正常的数据

这里写图片描述

但html源码实际上是

<tr>
<td>1</td>
<td class="left">金刚:骷髅岛</td>
<td class="my_webfont">&#xedfd;&#xe8ae;&#xeba3;&#xefab;.&#xe8ae;&#xecb2;</td>
<td class="my_webfont">&#xeffa;天</td>
</tr>

 

这里写图片描述

采集者只能获取到类似&#x edfd;的数据,并不能知道&#x edfd;映射的字符是什么,实现了数据防采集。

当然采集者可以通过分析,知道每一个映射代表的意思,从而进行采集后转换处理。
我们可以创建多个不同的字体文件和映射表。每次访问都随机使用一种,并定期更新一批字体文件和映射表,加大采集的难度。
这样采集者需要把所有的字体文件和映射表都分析并做转换处理,才可能采集到数据,这样采集的成本将会大大增加。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字证书~证书链

来源&#xff1a;客户端认证https服务端证书过程详解——证书链_huzhenv5的博客-CSDN博客_证书链认证过程 基本概念 证书 首先&#xff0c;我们看看在wikipedia上对证书的定义&#xff0c;In cryptography, a public key certificate (also known as a digital certificate o…

反反爬技术,破解猫眼网加密数字

From&#xff1a;https://blog.csdn.net/qq_31032181/article/details/79153578 From&#xff1a;http://www.freebuf.com/news/140965.html 利用自定义web-font实现数据防采集&#xff1a;http://blog.csdn.net/fdipzone/article/details/68166388 利用前端字体文件(.ttf)混…

数字签名,数字证书,证书链原理

来源&#xff1a;数字签名&#xff0c;数字证书&#xff0c;证书链原理&#xff08;图文详解&#xff09;_Ruby丶彬的博客-CSDN博客_证书链验证原理 数字签名&#xff0c;数字证书&#xff0c;加密简述 数字签名&#xff1a;谈及数字签名&#xff0c;就如小时候老师叫把卷子或…

猫眼 — 破解数字反爬获取实时票房

From&#xff1a;https://zhuanlan.zhihu.com/p/33112359 js分析 猫_眼_电_影 字体文件 font-face&#xff1a;https://www.cnblogs.com/my8100/p/js_maoyandianying.html 解析某电影和某招聘网站的web-font自定义字体&#xff1a;https://www.jianshu.com/p/5400bbc8b634 Fo…

Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」

原文来源&#xff1a;arXiv 作者&#xff1a;Alex Lamb、Jonathan Binas、Anirudh Goyal、Dmitriy Serdyuk、Sandeep Subramanian、Ioannis Mitliagkas、Yoshua Bengio「雷克世界」编译&#xff1a;嗯~是阿童木呀、KABUDA、EVA导语&#xff1a;深度神经网络在各种各样的重要任…

PDF签名系列(1):PDF签名机制的漏洞分析

来源&#xff1a;PDF签名系列(1):PDF签名机制的漏洞分析 - 知乎 研究PDF文件的签名机制有一段时间了&#xff0c;刚开始学习的时候就看到有提到说&#xff0c;被签名的PDF内容的Range gap&#xff0c;会成为这个机制的漏洞&#xff0c;但是一直不能完全参透。直到昨天看到一篇…

linux date命令显示毫秒,解决MacOS系统中date命令没有毫秒和sha512sum、sha256sum、md5sum等命令的问题...

安装brew/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"使用brew安装coreutilsbrew install coreutils设置系统新的命令软连接sudo ln -sv /usr/local/bin/gsha256sum /usr/local/bin/sha256sumsudo ln -sv /…

PDF签名系列(2):PDF的签名值到底存在哪里?

来源&#xff1a;PDF签名系列(2):PDF的签名值到底存在哪里? - 知乎 研究过PDF签名的同学应该见过下面这张图, 来自ADOBE的文档Acrobat_DigitalSignatures_in_PDF.pdf PDF被签名的内容是整个文档除去signature dictionary里/Contents下面的内容. 签过名的哈希值再连同其他一些…

数字签名时间戳服务器的原理

时间戳服务工作流程&#xff1a; ◆ 用户对文件数据进行Hash摘要处理&#xff1b; ◆ 用户提出时间戳的请求&#xff0c;Hash值被传递给时间戳服务器&#xff1b; ◆ 时间戳服务器对哈希值和一个日期/时间记录进行签名&#xff0c;生成时间戳&#xff1b; ◆ 时间戳数据和文…

android x86 笔记本卡屏,笔记本死机卡屏怎么办

笔记本死机卡屏的解决方法&#xff1a;首先按住键盘上ctrlaltdel&#xff0c;弹出任务管理器&#xff1b;然后在弹出任务管理器中选择explorer.exe&#xff1b;接着右键点击explorer.exe&#xff0c;在弹出菜单中选择“结束进程”&#xff1b;最后输如explorer.exe即可。首先&a…

【读书笔记】《框架设计(第2版)CLR Via C#》中两个比较有趣的知识点

本季度公司要求阅读《框架设计&#xff08;第2版&#xff09;CLR Via C#》这本书&#xff0c;由于前两个月一直很忙&#xff0c;也没有时间阅读&#xff0c;偶尔阅读也是很晚回家以后临睡前拿起这经典之作读那么一个小节。最近利用周末可以说一鼓作气的看了大半本&#xff0c;感…

8个最高效的Python爬虫框架,你用过几个?

From&#xff1a;https://segmentfault.com/a/1190000015131017 1.Scrapy Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。。用这个框架可以轻松爬下来如亚马逊商品信…

300+Jquery, CSS, MooTools 和 JS的导航菜单资源

如果你是网站前端开发人员&#xff0c;那么对你来说&#xff0c;也许做一个漂亮导航菜单会很得心应手。本文要为大家总结各种导航菜单的资源&#xff0c;以便让大家的网站前端开发的工作更方便更快速&#xff0c;只要选择现成的例子就可以应用于自己的网站了。本文收集的这些资…

轻量级分布式任务调度平台 XXL-JOB

From&#xff1a;https://www.cnblogs.com/xuxueli/p/5021979.html github 地址 及 中文文档地址&#xff1a;https://github.com/xuxueli/xxl-job 《分布式任务调度平台XXL-JOB》 一、简介 1.1 概述 XXL-JOB是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发…

畅玩4c刷android 9.0,华为畅玩4C电信版 CyanogenMod 13.0_Android_6.0.1 【HRT_chiwahfj】

本帖最后由 chiwah渔夫 于 2016-9-9 22:31 编辑【基本信息】ROM名称&#xff1a;华为畅玩4C电信版 CyanogenMod 13.0_Android_6.0.1ROM大小&#xff1a;617M适配版本&#xff1a;CyanogenMod 13.0_android_6.0.1测试机型&#xff1a;华为畅玩4C电信版作者简介&#xff1a;HRT团…

可以叫板Google的一个搜索引擎 —— DuckDuckGo

From&#xff1a;https://blog.csdn.net/inter_peng/article/details/53223455 作为习惯了使用Google进行资料查询的我来说&#xff0c;如果没有Google&#xff0c;真的感觉很难受。纵使找了一些可以翻墙的软件&#xff0c;但无奈还是经常不稳定&#xff0c;总是时断时续的。Bi…

小米鸿蒙1001小米鸿蒙,小米高管早就放下狠话!愿意使用鸿蒙2.0系统:那其他厂商呢?...

【9月14日讯】相信大家都知道&#xff0c;自从华为鸿蒙OS系统2.0版本正式发布以后&#xff0c;由于华为消费者业务CEO余承东正式确认&#xff1a;“华为手机在12月开始适配鸿蒙OS系统&#xff0c;明年所有华为手机全面启用鸿蒙OS系统。” 这也意味着国产智能手机厂商也将彻底的…

WCF中的管道——管道类型

管道是所有消息进出WCF应用程序的渠道。它的职责是以统一的方式编制和提供消息。管道中定义了传输、协议和消息拦截。管道以层级结构的形式汇总&#xff0c;就创建了一个管道栈。管道栈以分层的方式进行通信并处理消息。例如&#xff0c;一个管道栈可以使用一个TCP协议管道和一…

android德州扑克计算器,学界 | 一台笔记本打败超算:CMU冷扑大师团队提出全新德扑AI Modicum...

原标题&#xff1a;学界 | 一台笔记本打败超算&#xff1a;CMU冷扑大师团队提出全新德扑AI Modicum选自arXiv参与&#xff1a;路、晓坤CMU 冷扑大师团队在读博士 Noam Brown、Tuomas Sandholm 教授和研究助理 Brandon Amos 近日提交了一个新研究&#xff1a;德州扑克人工智能 M…

神器 | 百度云资源搜索

From&#xff1a;https://blog.csdn.net/qq_21492635/article/details/81109247 直接上神器 该网页没有做自适应&#xff0c;也没有专门的手机站点&#xff0c;因此建议电脑使用。也可下载桌面客户端&#xff08;仅支持windows&#xff09;&#xff0c;稳定不卡&#xff0c;速度…