Fonts 如何保护网页字体

Fonts 如何保护网页字体,fonts,webfonts,Fonts,Webfonts,我有一个客户希望在自己的服务器上托管他的webfonts。我有一个font.com帐户,该字体在此之前一直托管。我说的是事实(第18点)。他们说,你可以在自己的服务器上托管文件,但你必须尽可能地保护它们 我能想到的唯一方法是通过.htaccess中的HTTP\u REFERER限制对这些文件的请求 我可以做更多的工作来保护这些字体吗?是否有任何意义,使更多,你认为这是一个足够的保护 我个人不相信技术上的复制保护,你总是可以以某种方式复制你能看到的东西。但我不想让我的当事人陷入法律纠纷。你有这方面

我有一个客户希望在自己的服务器上托管他的webfonts。我有一个font.com帐户,该字体在此之前一直托管。我说的是事实(第18点)。他们说,你可以在自己的服务器上托管文件,但你必须尽可能地保护它们

我能想到的唯一方法是通过
.htaccess
中的
HTTP\u REFERER
限制对这些文件的请求

我可以做更多的工作来保护这些字体吗?是否有任何意义,使更多,你认为这是一个足够的保护

我个人不相信技术上的复制保护,你总是可以以某种方式复制你能看到的东西。但我不想让我的当事人陷入法律纠纷。你有这方面的经验吗

编辑


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

HTTP\u REFERER和USER\u AGENT很容易被欺骗。也就是说,如果您想防止热链接,那么HTTP\U REFERER是一个很好的开端,可以将其限制为来自您自己的应用程序的调用

使用Apache模式_安全

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与他们的会话匹配时,才返回字体文件,否则就假定它是伪造的referer热链接。这基本上与将文件放在经过身份验证的仅限用户的目录中相同,但这仅在用户登录时起作用,而上述方法仅要求用户在加载字体之前加载页面,防止热链接。

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

如果要保护文件,请在服务器上将文本渲染为图像

从法律上讲,您可以对承载字体文件的站点调用DMCA。

请参阅

显然,FontShop(最后评论)已批准,MyFonts建议(http://twitter.com/#!/MyFonts/status/98767132321521521664)

编辑:我想这是在以下章节中提到的解决方案:


您将在typekit的文章中找到一些有趣的方法:

他们使用HTTP引用检查、base64编码和分段等方法。然而,这些都不能提供完全的保护,有人同意本条的说法:

事实上,要想让某些东西出现在浏览器中,它必须出现在web上。如果是在网络上,就不能完全保护它……我们自己也设置了一些障碍。我们的目的只是阻止随意的误用,并明确表示从Typekit中获取字体是一种明确的、故意的行为

第二件需要注意的事情是,被许可方总是可以无视该协议,这就是为什么像Adobe这样的公司会生产一种最优秀的字体,并在声明中说明使用条款,包括网络的使用条款


另请参见W3 CSS3 webfonts规范中讨论的。虽然不是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访问。

这并不是回答我的问题。我想知道能做些什么。你问这种方法是否有意义,我同意。使用mod_security之类的模块,并将“SecFilterSelective”HTTP_REFERER“^[^\?]*mydomain\.com”之类的过滤器应用到带有字体的目录中,将拒绝来自其他站点的所有不符合要求的请求。是的,但你说的是一个良好的开端,那么接下来呢?:)当有人使用你的应用程序时,你在服务器上给他们一个会话(比如说PHP),然后你在那里存储一个唯一的ID。然后,引用字体的动态页面(比如getFont.php?uniqueId=foo),只有当unqiueId与他们的会话匹配时,才返回字体文件,否则就假定它是伪造的referer热链接。这基本上与将文件放在经过身份验证的仅限用户的目录中相同,但这仅在用户已登录的情况下起作用,而上述方法只是要求用户在加载字体之前加载页面,以防止热链接。啊,很好,如果你将此放在回答中,你至少会得到+1。这是我唯一想要的,是为了遵守font.com协议,不使用图像。。。那么,使用网络字体会有什么样的兴趣呢?很难找到合适的帖子。如果你能添加与你的答案相关的引语,你至少会得到我的+1答案,也许是正确的答案。我投票以离题的方式结束这个问题,因为它是关于法律建议,而不是编程建议。@durron597创建4年后,不管怎样:D法律方面只是一个额外的问题。实际上,这是关于技术方面的。我能做些什么让这更清楚?
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]