Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Задача: Загадать определенную картинку, записать в базу данных. Показать загаданную картинку на одном сайте. Разгадать загаданную картинку на другом сайте. Защита сценария от взлома и искусственной накрутки.

Во всем сценарии участвуют 3 сайтах, размещенных на разных серверах.

Сайт № 1: На нем находится база данных MySQL, а также PHP-скрипт взаимодействия с базой данных.

Сайт № 2: Этот сайт подключается к сайту № 1 через cURL, читает загаданную картинку с базы данных и выводит ее для показа.

Сайт № 3: На этом сайте через JavaScript рандомно показываются 5 картинок. Среди них есть и загаданная. Задача посетителя кликнуть по загаданной картинке, чтобы ее угадать.

Теперь подробнее о пошаговом сценарии:

01. В базе данных заранее уже определена загаданная картинка, которая имеет значения от 1 до 5. Например поле "image" со значением "2".

02. На сайте № 2 идет подключение к сайту № 1 посредством cURL на скрипт image.php. Тот возвращает значение загаданной картинки "2". У каждой картинки свой номер, который соответствует загаданной картинке. Например: 1.png, 2.png, 3.png, 4.png, 5.png.  Также сайт № 2 через Ajax каждые 5 секунд подключается к сайту № 1, чтобы прочитать значение загаданной картинки с базы данных. И меняет ее, если значение в таблице базы данных изменилось.

03. На сайте № 3 через JavaScript рандомно var x = Math.floor((Math.random() * 5) + 1); определяется случайным образом картинка и показывается через document.getElementById("changeimg").innerHTML = '

var myVar = setInterval(function(){ randtoys() }, 3000);

У картинки стоит событие onclick="onSubmit('+x+');" На функцию onSubmit() я также повесил Google Recaptcha, которая вместе с выбранной картинкой отправляет запрос через Ajax на PHP скрипт check.php, который находится на этом же сайте № 3. В этом скрипте проверяется Google Recaptcha, если все ок, идет запрос через cURL на сайт № 1 базы данных к PHP-скрипту image.php?check=1&num=X (где num=X - это выбранная картинка посетителем).

04. Далее на сайте № 1 присланное значение "num" сравнивается со значением с базой данных. Если совпадает = успешно, если не совпадает, возвращает ошибку.

Собственно это и весь сценарий. Проблема в том, что злоумышленники нашли дырку и как-то обходят внутреннюю защиту через прямые запросы на файлы скриптов, минуя сценарий проверки. То есть, они как-то узнали адрес скрипта, который подключается к сайту № 1 базы данных и минуют проверку Google Recaptcha на сайте № 3.

Узнал я это таким образом: Каждый раз, когда игрушка успешно угадывается, в скрипте на сайте базы данных в таблице MySQL меняется значение общего числа угаданных картинок. Также в этом скрипт фиксируется общее количество запросов к скрипту в отдельную таблицу. В общем число успешно угаданных не меняется, а количество фиксируемых запросов на успешные угадывания фиксируются. Если все выполнять по сценарию, без взлома и обхода защиты, общее число успешно угаданных картинок меняется.

Как защитить этот сценарий от попытки взлома или обхода защиты? Как заставить посетителя обязательно отправить запрос именно с браузера сайта № 3, именно с конкретно определенной страницы, именно кликая на картинку, чтобы обязательно при клике на загаданную картинку прошел проверку Google Recaptcha и запрос отправился с сайта № 3 на сайт № 1 базы данных с выбранным значением картинки?

На сайте № 3, когда посетитель открывает любую страницу, я записываю зашифрованный ключ в cookie. Также этот ключ в зашифрованном виде записываются в session. Перед отправкой параметров на сайт № 1, читается значение ключа с cookie, сравнивается со значением session. Конечно, это бесполезно, если cookie также успешно записывается без обязательного открытия сайта № 3 в браузере. Тогда я не знаю как еще сделать защиту, чтобы вынудить отправлять запросы только с открытого браузера, чтобы нельзя было напрямую отправить запрос на PHP-скрипт.

Есть практические идеи как и где защитить запросы? Или вообще решение такой задачи? Я любитель в PHP. Можно просто из-за отсутствия знаний не могу сообразить как защитить такой сценарий.

6 лет назад
secretuser
Андрей 
35 летРоссия
6 лет в сервисе
Был
6 лет назад
  • Похожие заказы
  • Первый сайт   1. Когда редактирую страницу, нажимаю на "визуально", не переходит, только в режиме "текст"  2. галлерея, тоже не открывается, (скрин во вложении)  3. Галлерея ( на скрине) , нужно сделать так же на всех страницах  ( скрин ...

    Закрыт
    6 лет назад
  • Необходимо сделать так, чтобы можно было видеть карту Google Map без надписей или насколько возможно без надписей. Как это будет реализовано, в виде плагина, или мини сайта или еще как не важно, важно чтобы можно ...

    Завершен
    6 лет назад
  • $7

    Есть таблица в БД (postgre) с данными типа: [code]edrc_btc;0.00001451;3247.09322669 edrc_doge;4.10000015;0.00000000 edrc_eth;0.00069994;0.00000000 edrc_rur;4.77777777;0.00000000 edrc_usd;0.12100002;0.00000000 edrc_waves;0.02064999;0.34039703 eet_btc;0.00089176;107.09796686 eet_doge;1200.61900059;3.34885975 eet_eth;0.00912545;21869.18798709 eet_rur;688.98388000;10.09238895 eet_usd;11.15000000;43.68163861 eet_waves;0.79766320;0.00000000[/code] Нужно вывести все в одну php-таблицу в виде: (смотрим картинку) Пояснение: eet, edrc - это имя в примере eet_rur, edrc_doge (ИМЯ_rur, ИМЯ_doge..) колонка Оборот - это сумма 3 столбика одного ИМЕНИ ...

    Закрыт
    6 лет назад
  • Здравствуйте. Необходимо сделать копию landing page с небольшими доработками и изменениями. Вот сайт https://mymeizu.ru/ Нужно сделать копию, там при нажатии конки купить/заказать, идет переадресация на другой ресурс. В нашем случае нужно что работало или как интернет магазин, ...

    Закрыт
    6 лет назад
  • Есть форум с русскоязычной веткой, раздел "разное" https://bitcointalk.org/index.php?board=18.0 Необходимо постить с моего аккаунта по 3-5 сообщений в день в течении пары месяцев. Указывайте желаемую цену за месяц.

    Закрыт
    6 лет назад