Как защитить от подмены скрипт на сайте

Привет! Мы занимаемся внедрением платформы автоматизации маркетинга и CRM-маркетингом. Короче делаем так, чтобы клиенты хотели с вами общаться и покупать, снова и снова....

Один из наших заказчиков задал нам вопрос: "Как я могу быть уверен, что содержимое вашего JS-скрипта отслеживания, устанавливаемого к нам на сайт в какой-то момент не поменяется? Можете гарантировать нам, что он не начнёт отслеживать или передавать больше чем должен куда-то на сторону?"

Как защитить от подмены скрипт на сайте

Вопрос интересный, мы даже не сразу поняли, что он имеет ввиду и шаблонно ответили, что скрипт отслеживания MauticJS (mtc.js) у нас стандартный - его содержимое открыто и легко поддаётся анализу. Полная раскладка по нему в документации. Но это как-то не воодушевило клиента и он ещё раз уточнил, что его волнует именно гарантия неизменности файла отслеживания в будущем.

Ради спокойствия клиента мы всё же задумались - ведь и правда, гипотетически, в файл mtc.js (впрочем как и в скрипт Yandex.Metrika https://mc.yandex.ru/metrika/tag.js или любой другой сторонний скрипт у вас на сайте) уже после установки можно что-то дописать так, чтобы никто и не заменит. Значит нужно сделать так, чтобы выполнялся только исходный оригинальный скрипт.

Есть задача - есть решение. Простое и элегантное ;)

  • Генерируем хеш скрипта, например через https://beautifycode.net/sri-hash-generator
  • Редактируем код вставки на сайт так, чтобы скрипт выполнялся только при условии совпадения хеша с оригинальным скриптом.
<script> (function(w,d,t,u,n,a,m){ w['MauticTrackingObject']=n; w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)}; a=d.createElement(t); m=d.getElementsByTagName(t)[0]; a.async=1; a.src=u; a.integrity="sha384-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; a.crossOrigin="anonymous"; m.parentNode.insertBefore(a,m); })(window,document,'script','https://m.dev.testserver.online/mtc.js','mt'); mt('send', 'pageview'); </script>

Где xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx заменяем на вычисленный хеш.

В итоге в случае изменения содержимого уделённого файла - поменяется его хеш, хеши не совпадут и JS-скрипт даже не запустится!

Огромное спасибо клиенту за правильный вопрос - мы теперь во всех скриптах внедрили проверку и другим советуем ;)

Ещё про безопасную коммуникацию с клиентами в нашем TG-канале

22
Начать дискуссию