Как защитить веб-шрифты
У меня есть клиент, который хочет разместить свои веб-шрифты на своем собственном сервере. У меня есть аккаунт на font.com, где шрифт был размещен до сих пор. Я согласился с соглашением fonts.com (пункт 18), где говорится, что вы можете размещать файлы на своем собственном сервере, но вы должны защищать их как можно лучше.
Единственный способ, которым я могу думать, это ограничить запросы к этим файлам HTTP_REFERER
в .htaccess
,
Могу ли я сделать больше, чтобы защитить эти шрифты? Есть ли смысл делать больше, и считаете ли вы, что это достаточная защита?
Я лично не верю в техническую защиту от копирования, вы всегда можете скопировать то, что видите. Но я не хочу, чтобы у моего клиента были проблемы с законом. Есть ли у вас опыт с этим?
редактировать
Я также заинтересован в юридическом аспекте. Что может произойти, если кто-то сможет скачать шрифт и использовать его повторно? Они означают, что я должен защищать шрифт только от хотлинкинга или от скачивания?
5 ответов
Вы найдете несколько интересных методов в статье от typekit: "Обслуживание и защита шрифтов в Интернете"
Они используют такие методы, как проверка HTTP Referrer, base64-кодирование, сегментирование. Однако ни один из них не обеспечивает полную защиту, и каждый согласен с этим утверждением из статьи:
Дело в том, что для того, чтобы что-то появилось в браузере, оно должно быть в Интернете. Если он есть в сети, он не может быть полностью защищен.... Мы сами создали несколько препятствий. Наша цель - не допустить случайного неправильного использования и прояснить, что изъятие шрифтов из Typekit является явным и преднамеренным действием.
Второе, что следует иметь в виду, - это то, что лицензиат всегда может игнорировать соглашение, и именно поэтому такие компании, как Adobe, которая выпускает один из лучших шрифтов, указывают условия использования, в том числе для Интернета, на странице лицензирования шрифтов.
См. Также вопросы лицензирования шрифтов, обсуждаемые в спецификации веб-шрифтов W3 CSS3.
HTTP_REFERER и USER_AGENT могут быть легко подделаны. При этом, если вы хотите предотвратить горячие ссылки, то HTTP_REFERER - хорошее начало, чтобы ограничить его вызовами из вашего собственного приложения.
С Apache mode_security
SecFilterSelective "HTTP_REFERER" "^[^\?]*mydomain\.com"
Добавление вышеуказанного в каталог со шрифтами будет отклонять все несоответствующие запросы с других сайтов.
Для дополнительной безопасности, когда кто-то использует ваше приложение, вы предоставляете им сеанс на сервере (скажем, PHP) и сохраняете там уникальный идентификатор.
<?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 соответствует их сеансу, в противном случае вы предполагаете, что это поддельная горячая ссылка реферера. По сути, это то же самое, что размещение файла в аутентифицированном пользовательском каталоге, но это будет работать только в том случае, если пользователи вошли в систему, в то время как вышеописанный метод просто требует от пользователя загрузить страницу до загрузки шрифта, чтобы предотвратить появление горячих ссылок.,
См. https://bugzilla.mozilla.org/show_bug.cgi?id=540859
По-видимому, одобрен FontShop (последний комментарий) и предложено MyFonts (http://twitter.com/#!/MyFonts/status/98767132321521664).
РЕДАКТИРОВАТЬ: я думаю, что это решение, упомянутое в комментарии 26:
RewriteCond "%{HTTP_HOST}_%{HTTP_REFERER}" "!\.?([^\.]+\.[^\.]+?)_https?://.*\1/.*$"
RewriteRule \.(woff|eot)$ - [F,NC,L]
Не эксперт по 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 вашего собственного сайта.
Это смешанная цель - защитить файл от копирования, предоставив каждому копию файла. Ответ Twisted Pear, вероятно, лучший с точки зрения нахождения среднего уровня.
Если вы хотите защитить файл, то выведите текст в изображения на сервере.
Юридически вы можете использовать DMCA для сайтов, на которых размещен ваш файл шрифтов.