Как я могу встроить шрифт, не давая пользователю возможность загрузить его? - PullRequest
0 голосов
/ 17 ноября 2011

Я знаю, что это немного противоречит тому, что браузеру придется загружать шрифт для его рендеринга, но мне было интересно, есть ли способ разместить его там, где его нельзя напрямую загрузить (или кэшировать на компьютер пользователя дляэто важно).

Решением, которое я придумал, было создание PHP-скрипта, который хэширует текущее время с точностью до секунды (добавляя соль).Если конкретная переменная в запросе GET соответствует этому хешу, она отправит заголовок для MIME-типа шрифта, а затем выведет содержимое файла шрифта.

Затем я воссоздаю хеш в таблице стилей и конкатенируюСтроки, где это будет действительный запрос к сценарию PHP.

Это основная идея.У меня было это работает.Но в этом было два недостатка:

  1. Если браузер запрашивает шрифт в другую секунду, PHP-скрипт не сможет соответствовать хеш-значениям, поэтому ничего не будет выводиться, поэтому шрифт будетрезервный шрифт (или шрифт по умолчанию, если он не был предоставлен)
  2. Если бы кто-то был достаточно быстр, он / она мог бы загрузить шрифт напрямую, если бы он / она запросил его в ту же секунду (при условии, что это, вероятно, придетсябыть сценарием, который сделал бы это.

Также браузер кэширует шрифт где угодно (не то, чтобы кэширование помогло, так как хеш в URI практически всегда был бы другим).

РЕДАКТИРОВАТЬ: Есть ли $_SERVER переменные, которые я мог бы использовать?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2011

Как говорят другие ответы, это очень сложно (невозможно) против того, кто действительно хочет его скачать. Всегда есть способ. Однако, чтобы дать вам несколько идей, эта статья описывает, как Typekit решает эту проблему.

1 голос
/ 17 ноября 2011

Если вы ожидаете, что шрифт будет использоваться браузером для отображения вашей страницы, вы ДОЛЖНЫ разрешить его загрузку каким-либо образом.После того, как он подключен к сети и отправлен в браузер, он совершенно не в ваших руках в отношении того, что пользователь будет с ним делать.

Вы можете только усложнить его получение, и опытный пользовательобойдут все, что вы делаете, с простой тривиальностью.

0 голосов
/ 17 ноября 2011

Вы можете усложнить задачу, как это делает ваше решение, однако, если ваша цель - защитить ваш IP-адрес шрифта, он просто не может быть загружен браузером. Вы не можете контролировать то, что делает браузер, независимо от того, как сильно вы пытаетесь, против выделенного противника.

Что вы можете сделать, хотя, возможно, это предоставить серверный код для генерации изображения, используя ваш шрифт, и вместо этого обслуживать это изображение. Я предполагаю, что вы не пытаетесь помешать пользователю видеть рендеринг этого шрифта, просто напрямую использовать шрифт?

...