2010-12-04 83 views
4

我的客戶要求我在他的網站上使用@ font-face的特殊字體。但是,這種字體對他的組織來說是一種資產,他害怕人們會竊取它。那麼,有什麼辦法可以讓瀏覽器訪問該.ttf文件,但是阻止直接訪問(現在,您可以讀取.css文件中的url,並使用任何瀏覽器下載字體)。防止使用.htaccess訪問字體

我知道沒有絕對的解決方案,字體仍然適用於具有正確技能的人。但我只是想讓這些非專家更難以竊取。

任何建議將不勝感激!謝謝!


我怎麼解決這個問題?

閱讀this。 Typekit的團隊在這一項上做了很棒的工作。防止犯罪行爲是不可能的,但你可以讓它變得困難。我做了兩兩件事:

  1. 隨着FontSquirrel發電機,我 刪除了所有桌面字形, 使得字體的 桌面上不可用。

  2. 使用Base64將我的TTF直接編碼到我的CSS 文件中。 (即SRC: URL(數據:字體; BASE64,jdslajdsaljdlsajdsa))

  3. EOT字體,對於IE,不能 轉換爲Base64。但是,你可以加載那些通過 檢查引用者的php腳本,並阻止 直接訪問。

你仍然可以重新組裝具有base64的字體,是的,你可以僞造引用者並下載.EOT。但是,這需要具備正確技能的人。竊取字體的人是不知道如何欺騙apache的常規設計師。

+2

沒有關於此事的專家,但我相信你必須允許訪問字體。否則,瀏覽器將如何使用它在頁面上呈現? – shamazing 2010-12-04 23:43:51

回答

4

這是完全不可能的。

相反,請考慮使用圖像或從字體中刪除未使用的字符。

+0

謝謝!我會研究它。 – fedeisas 2010-12-04 23:52:26

4

如果你讓某些東西去瀏覽器然後它的公共。 AFAIK沒有辦法阻止你讓瀏覽器讀取它的東西!

編輯這段代碼,你可以用字體的文本的圖像你想(這需要GD庫):

<?php 
$image = imagecreatetruecolor(145, 30);// Image size 
$color = imagecolorallocate($image, 163, 197, 82);// color 
$bg = imagecolorallocate($image, 255, 255, 255); // background color white 
imagecolortransparent($image, $bg);// Makes Background transparent! 
imagefilledrectangle($image,0,0,399,99,$bg); 
imagettftext($image, 25, 0, 25, 25, $color, "add/to/font.ttf", "text you can get from post or somewhere"); 
header("Content-type: image/png"); 
imagepng($image); 
?> 
+0

這個網站有很多使用字體的地方。導航欄和每個標題。在每個頁面加載時,在服務器上使用php渲染50個圖像會很沉重。雖然,我可以製作一個緩存文件夾來防止這種情況。這將是一個苛刻的事情,是圖像不被搜索機器人可讀。這就是爲什麼我更喜歡使用文本。感謝您的建議! – fedeisas 2010-12-04 23:55:27

+0

您的歡迎和搜索機器人「alt」屬性非常方便,您可以添加一些CSS使其看起來與Text In圖像的大小和顏色相同,以便用戶在圖像加載之前擁有所有內容,並且還可以搜索漫遊器! – 2010-12-05 00:03:03

0

渲染服務器上的文字。

+0

謝謝!我會研究它。 – fedeisas 2010-12-04 23:55:45

+0

你會怎麼做呢?將其作爲圖像在服務器上呈現? – sam 2012-11-07 21:24:40

2

創建一個名爲.ttf的CGI腳本。將AddHandler cgi-script ttf添加到此目錄的Apache選項(在httpd.conf或.htaccess中)。

讓CGI腳本檢查Referer字段(是的,它的拼寫與規範中的拼寫不正確),並將其與您期望它來自的地址進行比較。如果是這樣,打開字體文件並寫入它(當然,前面加上了幾個HTTP頭文件)。如果不是,則重定向到其他地方。

我從來沒有檢查過Referer字段,但很久以前我做了一些與PDF類似的事情。

注意:如果我想獲得字體,這隻會讓我放慢一點。但它會讓大多數人減慢很多。我建議用你的文字製作一個圖像文件並放入你的網站。