如何保护WebFonts

时间:2011-06-29 15:50:13

标签: fonts webfonts

我有一个客户想要在自己的服务器上托管他的webfonts。我有一个font.com帐户,字体托管到现在为止。我明白fonts.com agreement(第18点)。他们说,你可以在你自己的服务器上托管文件,但你必须尽可能地保护它们。

我能想到的唯一方法是限制HTTP_REFERER.htaccess对这些文件的请求。

我可以做更多保护这些字体吗?做更多是否有意义,你认为这是一个充分的保护吗?

我个人并不相信技术版权保护,你可以随时复制你能看到的东西。但我不希望我的客户陷入法律纠纷。你有这方面的经验吗?

修改

我也对法律方面感兴趣。如果有人可以下载并重复使用它,会发生什么?它们是否意味着我必须仅保护字体免受热链接或下载?

5 个答案:

答案 0 :(得分:14)

HTTP_REFERER和USER_AGENT很容易被欺骗。话虽这么说,如果你想阻止热链接,那么HTTP_REFERER是一个很好的开始,将它限制为来自你自己的应用程序的调用。

使用Apache mode_security

SecFilterSelective "HTTP_REFERER" "^[^\?]*mydomain\.com"

将上述内容添加到具有字体的目录中将拒绝来自其他站点的所有不合规请求。

为了提高安全性,当有人使用您的应用时,您会在服务器上为他们提供会话(例如PHP),并在那里存储uniqueId。

<?PHP
// #header.php - in the head of the page that uses the font
// ...
if( !isset( $_SESSION['uniqueId'] ) ) {
    $_SESSION['uniqueId'] = rand( pow(2,16), pow(2,31) );
}
$uniqueId = $_SESSION['uniqueId'];

echo '<script type="text/javascript" src="http://foo.com/getFont.php?u='.$uniqueId.'"></script>';
?>

这就是字体。

<?PHP
// #getFont.php - serve your fonts from here
// ...
if( !isset( $_GET['u'] ) || !isset( $_SESSION['uniqueId'] ) || $_SESSION['uniqueId']!=$_GET['u'] ) {
    die('Bad Request');
}

// cat out the file contents here for the request font file
?>

然后,您引用字体的动态页面(比如getFont.php?uniqueId = foo),如果unqiueId与其会话匹配,则只返回字体文件,否则您认为它是一个欺骗性的引用热链接。这与将文件放在经过身份验证的用户目录中基本相同,但这只有在用户登录时才有效,而上述方法只需要用户在加载字体之前加载页面,以防止热链接

答案 1 :(得分:4)

请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=540859

显然已获得FontShop批准(最后评论)并由MyFonts建议(http://twitter.com/#!/MyFonts/status/98767132321521664)。

编辑:我想这是comment 26中提到的解决方案:

RewriteCond "%{HTTP_HOST}_%{HTTP_REFERER}" "!\.?([^\.]+\.[^\.]+?)_https?://.*\1/.*$"
RewriteRule \.(woff|eot)$ - [F,NC,L]

答案 2 :(得分:4)

您可以在文章中找到一些有趣的方法:type "Serving and Protecting Fonts on the Web"

他们使用HTTP Referrer检查,base64编码,分段等方法。然而,这些都没有提供完整的保护,并且人们同意文章中的这一陈述:

  

事实是,对于浏览器中出现的内容,它必须在网络上。如果它在网上,它就不能完全受到保护......我们已经设置了一些我们自己的障碍。我们的目的只是为了防止偶然滥用,并明确表示从Typekit中获取字体是一种明确而有意的行为。

第二件事是,被许可人总是可以忽略协议,这就是为什么像Adobe这样生产最优秀字体的公司会在Font licensing page中列出包括网络在内的使用条款。

另请参阅W3 CSS3 webfonts规范中讨论的Font Licensing Issues

答案 3 :(得分:2)

不是Apache的专家,但是我们使用了它,它似乎运行良好:

Options -Indexes
IndexIgnore *.woff *.eot
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yoursite\.com/.* [NC]
RewriteCond %{REQUEST_URI} !hotlink\.(woff|eot) [NC]
RewriteRule .*\.(woff|eot)$ http://yoursite.com/ [NC,F,L]

直接下载会导致403,但仍然可以通过您自己网站的CSS访问这些文件。

答案 4 :(得分:0)

这是一个混合目标 - 保护文件不被复制,同时为每个人提供文件的副本。 Twisted Pear的答案可能是找到中间地带的最佳答案。

如果要保护文件,请将文本渲染到服务器上的图像中。

从法律上讲,您可以针对托管您的字体文件的网站调用DMCA。