使用.htaccess阻止访问字体

时间:2010-12-04 23:41:17

标签: css apache .htaccess font-face

我的客户要求我在他的网站上使用@ font-face的特殊字体。但是,这种字体对他的组织来说是一种资产,而且他担心人们会窃取它。那么,有没有办法让浏览器可以访问.ttf文件,但是阻止直接访问(现在,您可以读取.css文件中的URL,并使用任何浏览器下载该字体)。

我知道没有绝对的解决方案,对于拥有合适技能的人来说,字体仍然可用。但我只是想让非专家更难窃取。

任何建议都将不胜感激!谢谢!


我是如何解决这个问题的?

阅读this。 Typekit的团队在这一方面做了很棒的工作。防止骚乱是不可能的,但你可以让它变得困难。我做了两件事:

  1. 使用FontSquirrel Generator,我 删除了所有桌面字形, 使字体无法使用 桌面。

  2. 直接在我的CSS上使用Base64编码我的所有TTF 文件。 (即src: URL(数据:字体; BASE64,jdslajdsaljdlsajdsa))

  3. IE的EOT字体不能 转换为Base64。但是你可以 加载那些vía一个PHP脚本 检查引用者,并防止 直接访问。

  4. 您仍然可以重新组装具有base64的字体,是的,您可以伪造引用并下载.EOT。但这需要有合适技能的人。窃取字体的人是那些不知道如何欺骗apache的普通设计师。

5 个答案:

答案 0 :(得分:4)

这完全不可能。

相反,请考虑使用图像,或从字体中删除未使用的字符。

答案 1 :(得分: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);
?>

答案 2 :(得分:2)

创建一个名为.ttf的CGI脚本。将AddHandler cgi-script ttf添加到此目录的Apache选项中(在httpd.conf或.htaccess中)。

让CGI脚本检查Referer字段(是的,它的拼写错误,如规范中所示)并将其与您希望它来自的地址进行比较。如果是,打开字体文件并写入(当然,前面有几个HTTP头)。如果没有,请重定向到其他地方。

我从未检查过Referer字段,但很久以前我就用PDF做了类似的事情。

注意:如果我想获得字体,这只会让我慢下来。但它会让大多数人放慢脚步。我建议使用您的文字制作图像文件并将其放入您的网站。

答案 3 :(得分:0)

在服务器上渲染文本。

答案 4 :(得分:0)

听说过Cufon? http://cufon.shoqolate.com/generate/

或typekit:http://typekit.com/

或SFIR:http://wiki.novemberborn.net/sifr/

我希望这些可以帮助你进行研究。