日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/7/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用自定义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可以從網絡加載字體,因此我們可以自己創(chuàng)建一套字體,設置自定義的字符映射關系表。
例如設置0xaaa是映射字符1,0xbbb是映射字符2,以此類推。
當需要顯示字符1時,網頁的源碼只會是0xaaa,被采集的也只會是0xaaa,并不是1,使采集者采集不到正確的數據。而對于正常訪問的用戶則沒有影響。

對于中文的防采集不適合使用web-font這種方法,因為中文的字體庫太大。而對于數字,英文則適合使用此方法實現防采集。
?

實例:使用自定義web-font實現數字數據防采集(例如股票,電影票房等數據)

1.創(chuàng)建指定字符的自定義字體

首先選擇一款字體,為方便演示,選擇系統(tǒng)自帶的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

我們這里修改映射關系,可以盡量復雜一點且沒有規(guī)律,使不容易猜出。

例如把映射關系設置為

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;映射的字符是什么,實現了數據防采集。

當然采集者可以通過分析,知道每一個映射代表的意思,從而進行采集后轉換處理。
我們可以創(chuàng)建多個不同的字體文件和映射表。每次訪問都隨機使用一種,并定期更新一批字體文件和映射表,加大采集的難度。
這樣采集者需要把所有的字體文件和映射表都分析并做轉換處理,才可能采集到數據,這樣采集的成本將會大大增加。

?

?

?

總結

以上是生活随笔為你收集整理的利用自定义web-font实现数据防采集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。