Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Js+Php=Ajax но есть нюанс...
<?PHP defined('_IN_THIS_FILE') or die('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL / was not found on this server.</p><hr></body></html>');?>
, но регистрацию сделал на AJAX т.е. существует некий файл registration.php куда отправляются асинхронные запросы. только вот вбив ссылку руками http://mysite[dot]ru/registration.php получаем доступ к самодостаточному файлу...
Собственно по теме хотелось бы лишить всяких страждующих такой возможности.Пробовал $_SERVER["HTTP_REFERER"] т.е. если пришли с нашего сайта то пускаем иначе посылаем лесом , но существование глупых прокси портит(и возможность подделки данного заголовка) всю картину.
Так мож ктонить решал такую проблему, очень хочется такое сделать
----- Не слушайте... После 19.00 вместо меня пишет ПЫВО
Champion
Отправлено: 17 Июля, 2010 - 09:27:45
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
1 - Зачем это нужно?
2 - Если всё-таки правда нужно.
Стопроцентной защиты ты не придумаешь. Любое взаимодействие браузера с серверными скриптами имитируется всегда тем же CURLом. Можно только усложнить этот процесс. Варианты:
- Сессия. При заходе на сайт в сессию пишется ключик, а при заходе в скрипт регистрации он проверяется.
- Усложнение первого варианта: яваскриптовая функция, которая одному тебе известным способом вычисляет какой-то ключ в зависимости от внешних факторов, а скрипт регистрации проверяет это значение.
- Разные глупости как в ASP типа __VIEWSTATE, __EVENTVALIDATION и разбросанных по всей форме различных спрятанных инпутов, которые участвуют в формировании POST - запроса.
movEAX
Отправлено: 17 Июля, 2010 - 09:31:13
Частый посетитель
Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009
Помог: 16 раз(а)
Ну, это и стой же эпопеи "Как защитить контент от скачивания". Можно разместить JS, что-то вроде этого
Но нужно будет как-то игнорировать эти строчки в обработчике.
----- армия.. самое убогое место
dsb80
Отправлено: 17 Июля, 2010 - 12:47:28
Гость
Покинул форум
Сообщений всего: 71
Дата рег-ции: Янв. 2009 Откуда: СПб
Помог: 0 раз(а)
Champion пишет:
- Сессия. При заходе на сайт в сессию пишется ключик, а при заходе в скрипт регистрации он проверяется.
- Усложнение первого варианта: яваскриптовая функция, которая одному тебе известным способом вычисляет какой-то ключ в зависимости от внешних факторов, а скрипт регистрации проверяет это значение.
- Разные глупости как в ASP типа __VIEWSTATE, __EVENTVALIDATION и разбросанных по всей форме различных спрятанных инпутов, которые участвуют в формировании POST - запроса.
Вголову пришла мысль - в форме делаем пустой див куда при обращении к регистрации(в тот момент когда всплывает окно) пишем некий ключик действующий нарпимер 10 мин и является одноразовым, который пишем в базу, а приобращении к скрипту проверяем ключик на время и то использовался ли он уже; также можно одному ip выдавать не более 10 ключей в течении 15 минут. В общем что-то такое.
----- Не слушайте... После 19.00 вместо меня пишет ПЫВО
Champion
Отправлено: 17 Июля, 2010 - 13:01:55
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
В любом случае, чтоб это обойти, потребуется 5 минут. Самое сложное - какая-то сложная обработка данных яваскриптом или капча. Ключики в дивах и скрытых полях разбираются за 5 минут. Капча распознается, а логика яваскрипта может быть скопирована. Лучше подумай, так ли нужна тебе эта защита?
dsb80
Отправлено: 17 Июля, 2010 - 13:06:16
Гость
Покинул форум
Сообщений всего: 71
Дата рег-ции: Янв. 2009 Откуда: СПб
Помог: 0 раз(а)
Нужна... я уже 4-й день с этим парюсь)
----- Не слушайте... После 19.00 вместо меня пишет ПЫВО
Ch_chov
Отправлено: 17 Июля, 2010 - 20:53:08
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009
Помог: 16 раз(а)
Ch_chov пишет:
$_SERVER['HTTP_X_REQUESTED_WITH']
Интересно) Но заголовок ведь подделать можно.
----- армия.. самое убогое место
DeepVarvar
Отправлено: 17 Июля, 2010 - 23:44:58
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Допустим:
Есть такая штука:
var url = "worker.php";
request.open("GET",url,true); // ну или POST, не суть в этом
request.setRequestHeader("X-Requested-With","вот суда пишем некий ключик (время жизни 5 минут) о котором будет знать скрипт");
request.onreadystatechange = myAjaxJobFunction;
request.send(null);
Тогда как подделать заголовок???
А смысл??? Значение то его меняется... (Добавление)
Причем какая разница ЧТО в значении заголовка давать? Отработает только если валидным в данный момент будет... Или я не прав? (Добавление)
Щас вот проверил свою теорию - ПАШЕТ НА УРА (Добавление)
А вот работа с ключиком:
С помощью PHP мы вывели страницу с начальным значением ключика, предварительно вписав его в базу/файл. Затем (например) при посылке асинхронки мы отправляем еще и step=<номер шага>. Скрипт получает ключик, номер шага (соль) и сверяется с записью в базе/файле:
if(true) { на тебе результат }
else { Hack Attempt!!!! }
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
movEAX пишет:
Но заголовок ведь подделать можно
Конечно можно.
DeepVarvar пишет:
С помощью PHP мы вывели страницу с начальным значением ключика, предварительно вписав его в базу/файл.
Лучше в сессию.
Это стандартный метод для защиты форм от подделки. Форму "прошивают" специальным токеном (с помощью <input type="hidden"/>), который храниться на сервере и проверяется при получении данных формы.
DeepVarvar
Отправлено: 18 Июля, 2010 - 10:43:39
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Так-с..... Просветите меня: разве с асинхронным запросом обновляется сессия???
Если - да, то при ситуации когда форма не сабмитится, на buttone-е висит жава-обработчик, а все заголовки и GET/POST-данные отправляет сам асинхронник - то проблем не будет..
Вот только я не заметил чтобы новая сессия прилетала в браузер...
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
DeepVarvar пишет:
Так-с..... Просветите меня: разве с асинхронным запросом обновляется сессия???
Обновляется. Тебе установили сессионную куку (или не куку, не важно, каким механизмом она реализована) с идентификатором сессии. Потом в любых вызываемых скриптах - не важно ассинхронно или как - можно изменять эту же сессию.
Сессия одна и таже, а данные в ней меняются.
Прошитые формы и заголовки - это всё лишняя возня. Кому нет дела, как добраться жо вашей формы регистрации, те вам и не мешают. Кто захочет, без труда всё подделает.
dsb80
Отправлено: 18 Июля, 2010 - 13:38:03
Гость
Покинул форум
Сообщений всего: 71
Дата рег-ции: Янв. 2009 Откуда: СПб
Помог: 0 раз(а)
Вобщем понятно - "в лоб" решения нет. Дело в том, что пользователи сайта идентифицируются по сессиям хрранящихся в 2-х куках зашифрованых разными способами причем одна изних с солью, а в базе лежит третье значение (подделать врядли). Так вот может просто на сервере отслеживать действия пользователей, если пользователь напрример делает 10 раз одно и тоже в течении какогото времени(логика не суть) посылать его лесом? Думаю может так тогда?
----- Не слушайте... После 19.00 вместо меня пишет ПЫВО
DeepVarvar
Отправлено: 18 Июля, 2010 - 13:41:30
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.