Предотвратить SVG от простого обратного проектирования - PullRequest
0 голосов
/ 29 мая 2018

Я только начал работать в новой компании, и меня попросили сделать то, что я считаю невозможным, но мне нужно подтверждение по этому поводу.Веб-сайт моей компании позволяет пользователям просматривать изображения в чрезвычайно высоком разрешении с помощью SVG.Мы создали специальный просмотрщик для этих изображений, который позволяет вам масштабировать и прокручивать изображение, и это работает хорошо.Из-за этого формат изображения «должен» оставаться SVG.Однако нам нужно добавить водяной знак на это изображение.То, как мы делаем это прямо сейчас, - это передача водяного знака SVG и PNG клиенту, вставка водяного знака в SVG и отображение его пользователю.Очевидно, что это легко взломать, как известно любому, кто имеет опыт работы на стороне клиента (здесь команда разработчиков в основном состоит из старых разработчиков и не имеет большого опыта работы в Интернете).Даже если необработанный SVG не будет перехвачен, он все равно может просто удалить водяной знак из источника.Я убедил моего босса сделать так, чтобы водяной знак вводился на стороне сервера, поэтому остается только проблема, заключающаяся в том, что SVG доступны для редактирования конечным клиентом.

Что я хочу знать, так это то, что одна из этих двух вещей возможна:

1) Существует ли другой формат изображения, похожий на SVG, который можно использовать для сохранения этого масштабируемого изображения без потери разрешенияи без возможности непосредственного редактирования конечным клиентом?Единственные варианты, которые люди, кажется, обсуждают для Интернета - это JPG, GIF, PNG и SVG.Я рассматривал файлы Adobe .rator «EPS» и EPS (Encapsulated PostScript) в качестве других векторных опций, но нигде не могу найти, могу ли я изменить эти изображения в PHP, что является ключевым моментом, если я хочу наложить водяной знак всерверный код.

2) Есть ли способ обфусцировать необработанный контент SVG, чтобы пользователь не мог его использовать и манипулировать им?Я видел SVG с тегами <image ...> внутри, с PNG, представленными в виде длинных и сложных строк.Что-то вроде xlink:href="data:image/png;base64...".Мне было интересно, есть ли способ отобразить SVG в качестве этой строки, чтобы данные не могли быть напрямую обработаны.Я уверен, что есть алгоритм, чтобы изменить их, но пока мы придерживаемся SVG, мне нужно сделать это как можно более безопасным, используя как можно больше прыжков, если кто-то захочет украсть данные.

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

1 Ответ

0 голосов
/ 29 мая 2018

Существует ли другой формат изображения, похожий на SVG, который можно использовать для сохранения этого масштабируемого изображения без потери разрешения и без возможности непосредственного редактирования конечным клиентом?

SVG - векторный формат, иЧтобы поддерживать максимальную масштабируемость, вам нужно придерживаться векторов, будь то любой формат.Однако в этом случае всегда можно удалить векторы, которые принадлежат вашему водяному знаку.Конечно, существуют векторные форматы, которые хранятся в двоичном формате, что затрудняет синтаксический анализ и редактирование конечным пользователем, но они также не доступны для редактирования в PHP и гораздо менее совместимы.Так что вы, вероятно, не хотите этого делать.

Есть ли способ запутать необработанный контент SVG, чтобы пользователь не мог пойти и манипулировать им?

Во-первых, он никогда не будетбыть «безопасным» в том смысле, что, как сказано выше, всегда будет возможно удалить водяной знак из векторного изображения.(Кстати, единственное отличие от растровых форматов, таких как JPG, заключается в том, что контент под водяным знаком в растровом изображении фактически отсутствует, а в SVG он все еще присутствует.)

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

Одна вещь, которая приходит на ум, заключается в том, что SVG - это в основном просто XML, он состоит из таких тегов, как <rect>, <line>, <circle> и т. Д. Порядок этих тегов не имеет большого значения (в основном, за исключением, конечно).Таким образом, вы можете переплетать теги, которые рисуют ваш водяной знак, практически случайным образом среди существующих тегов.Я имею в виду действительно случайно, поэтому разные загрузки будут давать разные результаты.Если вы сделаете это хорошо (например, вы обнаружите, что теги строк «скрывают» теги строк водяных знаков и т. Д.), автоматически будет трудно удалить водяной знак, потому что это все релевантные данные, которыеваше реальное изображение.Конечно, водяной знак все еще может быть визуально в углу, и это уже слабость, все, что нарисовано в углу, может быть удалено автоматически.И это будет легко удалить вручную с любым приличным редактором, я полагаю.Так что это зависит от того, какова цель.

Но я все еще думаю, что такого рода вещи могут сделать это достаточно сложным во многих сценариях (и будет совершенно неадекватным в других).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...