Фрилансеры предложат решение вашей задачи уже через несколько минут!
Публикация заказа не займет много времени.
4 месяца назад
Андрей Хлывнюк
29 лет, Россия
4 месяца в сервисе
Был онлайн 4 месяца назад
4 месяца назад

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

Во всем сценарии участвуют 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 = '<img src...
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. Можно просто из-за отсутствия знаний не могу сообразить как защитить такой сценарий.

Заявки фрилансеров

Хорен Баласанян
25 лет, Армения
1 год в сервисе
Был онлайн 2 часа назад
4 месяца назад
ТОП-50 — Веб-программирование
Павел Угодин
31 год, Россия
5 месяцев в сервисе
Был онлайн 3 месяца назад
4 месяца назад
Леонид Рыбаков
49 лет, Россия
5 лет в сервисе
Был онлайн 2 месяца назад
4 месяца назад
Владимир Бугорков
28 лет, Россия
1 год в сервисе
Был онлайн 8 дней назад
4 месяца назад

Похожие заказы

Надо написать на php + mySQL каталог сайтов и небольшая админка

Надо написать на php + mySQL каталог сайтов и небольшая админка для этого каталога (интегрировать в дизайн сайта и устанавливать на сервере будет другой чел). 1. каталог сайта с линками с возможностью добавлять и удалять разделы 1.1 Глубина 3 - Ос

Скрипт на php

Скрипт на php - размещение ссылок и банеров

Движок on-line игры

Задание. Разработать движок на PHP/MySQL on-line игры в ШАШКИ для двух пользователей. На входе скрипт получает переменные: PING - код игры UID - код игрока MOVE - ход, выраженный в виде c3-b4. На выходе должен формироваться двухмерный массив

Флеш игры

бюджет серьёзный (порядка 2Кб) заказчик западный нужен опытный разработчик с портфелем флеш игр, и со ссылками на работы, в которых есть интеграция флеш с ДБ (любой SQL). приват.

Требуеться флешер для создания азартных флеш игр

требуеться флешер с хорошим знанием action script и php для создания игр и переработки существующих серьезный человек другие знания и хорошее портфолио приветствуються

PHP-программист на постоянную работу (свободный график, работаете дома, в р

Требуется программист PHP + MySQL. Желательно дополнительно знание Flash, возможно Delphi (если не знаете, не страшно). Работа на дому. Требование: Мне необходимо, чтобы Вы жили в Санкт-Петербурге. Я буду постоянно присылать по интернету задания на

PHP - PDF Conversion

1. Go to http://www.creativityandmagic.com/aspcaseload/startpage.asp. Then click "View All Active" Patients. Then click the patient "Robert James". 2. The two bottom rows of information need to be fixed: a. The first section is th...

Flash игра

Небходимо разработать игру. ОПИСАНИЕ: Цель: Набрать наибольшее количество популярности и денег в ходе раскрутки поп-группы. Весь процесс игры идет под музыку одной из песен группы. Игровое поле: Небо с множеством облаков, каждое из которых пр

PHP (маштабирование картинки и наложение лого)

PHP (маштабирование картинки и наложение лого)

Скрипт проверки подписи WebMoney на PHP

Требуется рабочий скрипт на PHP, который проверяет подпись посылаемую интерфейсом WebMoney Click_And_Buy после оплаты. + Скрипт формирования ссылки для оплаты. Оплата после проверки работоспособности скрипта.