Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 08.06.2015
Сообщений: 10

Безопасность связки PHP+AJAX

02.06.2016, 13:11. Показов 2445. Ответов 14

Студворк — интернет-сервис помощи студентам
Здравствуйте, коллеги,

Написал движок на PHP, теперь думаю как сделать так чтобы не повадно было ломать его всякой школоте. Вот в чем вопрос конкретно:

Есть модуль js, который отправляет GET-запросы в ajax.php (проставление лайков, быстрый поиск и т.д.). Цель - сделать этот запрос уникальным, чтобы нельзя было его выполнить дважды или выполнить отложенно. Или сделать его таким, чтобы от одного вида тошнило и хотелось забыть как страшный сон, не то, что лезть туда.

Не хочется изобретать велосипеды (наизобретался уже), подскажите, как это делается грамотно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.06.2016, 13:11
Ответы с готовыми решениями:

Безопасность php and ajax
ajax вызывает php script передет и получает параметры. В php проверка доступа делается через session. А как сделать чтобы так же...

Установка связки Apache MySQL и PHP под Windows 7
Вот столкнулся недавно с такой проблемой:ранее ставил данную связку под XP,всё конфигурировал и работал в NetBeans с пхп.Пробовал ставить...

Через ajax в url:'ajax.php', нужно передать одну переменную, и значение radio кнопки
Как значение radio передать я разобрался, а вот как еще переменную со страницы кинуть в url: ajax.php Всем спасибо

14
 Аватар для Доктор Зойдберг
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 458
02.06.2016, 13:47
А чем отправка из обычной формы отличается от отправки Ajax'ом?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
02.06.2016, 13:51
На стороне сервера проверяете доступ к соответствующим действиям и если его нет, то возвращаете ошибку.
0
1 / 1 / 0
Регистрация: 08.06.2015
Сообщений: 10
02.06.2016, 14:00  [ТС]
На формах висит captcha, поэтому неактуально. А вот запросы из js выдают всё с потрохами.

Добавлено через 6 минут
tarasalk, допустим, зарегистрированный пользователь может ставить лайки ($_SESSION['level'] = 'REG'). Чел регистрируется, видит что при лайке летит запрос ?do=like&hash=d5v76fv5g7sdfv (hash - id лайкаемого объекта). Проходится по странице, собирает все хэши и циклом лайкает всё из curl, предварительно подсунув куки для авторизации. А если на странице установить сессионную переменную, то это отлично ломается предварительным открытием страницы из curl.

Кроме того, он может выполнить ?do=like&hash=d5v76fv5g7sdfv в другом окне браузера, и всё сработает. Что не есть правильно.
0
 Аватар для Доктор Зойдберг
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 458
02.06.2016, 14:05
AVR55, Без регистрации и ограничения на 1 лайк одному посту одним пользователем, вы это не ограничите.

Все проверки на ip и прочее вам ведь ничем не поможет.
0
1 / 1 / 0
Регистрация: 08.06.2015
Сообщений: 10
02.06.2016, 14:29  [ТС]
Доктор Зойдберг, в том-то и дело...
А если так.
1) при загрузке страницы формируется md5(time()) и сохраняется как $_SESSION['page_key'].
2) на стороне js перед отправкой GET-запроса выполняем запрос к php-скрипту a.php, куда передаем hash=d5v76fv5g7sdfv. Тот выполняет ещё один md5(time()), сохраняет как $_SESSION['moment_key'], и этим ключом шифрует переданный хэш через mcrypt_encrypt. Результат отдает обратно.
3) с шифром идем в наш ajax.php. Там - во-первых, проверяется isset($_SESSION['page_key']). Во-вторых, проверяется isset($_SESSION['moment_key']) и разница между текущим временем и $_SESSION['moment_key']. Если больше 1 секунды - отказ. Ну и в-третьих, дешифруется строка и обрабатывается дальше.

Главная проблема этого метода - запросы к a.php приходится либо делать синхронными (что deprecated), либо следующий запрос к ajax.php вешать внутри на success. А это будет очень громоздко.

Вот и думаю... Должна быть какая-то ещё технология защиты. Иначе взлом вкнотактика был бы по силам студентам.
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.06.2016, 14:45
Кросдоменные запросы. Есть такая штука. Если отправляется ajax с другого домена, отличного от сайта, то он даже не дойдет до сервера, обрубится. Это защита такая, встроенная в javascript.
И я бы все ajax запросы посылал только методом POST а не GET.

Ну и защитится полностью невозможно. Попытайтесь доработать скрипт. Попытайтесь выследить "лайкеров". Если видете, что за последнюю минуту было отправлено слишком много лайков, то завершайте работу скрипта или отправляйте в ответку капчу
1
1 / 1 / 0
Регистрация: 08.06.2015
Сообщений: 10
02.06.2016, 14:53  [ТС]
Типа, чем городить этот колхоз, лучше сделать анализатор поведения в целевом скрипте. Ок, наверное, пойду по этому пути.

А насчет кроссдоменных запросов не совсем понял. В случае с ajax запрос летит от пользовательской машины или в пределах сервера?
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.06.2016, 15:30
На счет кросдоменных запросов: Ajax в любом случае летит с пользовательской машины, так как весь js выполняется на клиенте (в браузере). Перед отправкой запроса браузер проверяет доменное имя, с которого был получен данный скрипт, и доменное имя, на которое отправляется запрос. Если они отличаются, то браузер тупо не отправляет запрос.
Но тут думаю проблема безопасности даже не в связке PHP+AJAX, и даже не просто в AJAX, так как ничто не мешает пользователю открыть сотню вкладок в браузере и послать сотню GET запросов. Тут нужно ограничиваться на сервере. Во-первых, такие запросы должны быть только POST. Во-вторых нужно отслеживать и блокировать лайкеров. Например, даже на этом форуме есть защита от "Спасибкеров". Я не могу нажать "Спасибо" два раза подряд. Нужно подождать какое-то время.
1
1 / 1 / 0
Регистрация: 08.06.2015
Сообщений: 10
02.06.2016, 16:04  [ТС]
Почему именно POSTом?
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.06.2016, 16:37
Ну как минимум для того, чтобы нельзя было послать запрос с браузера просто введя url в строку адреса
0
1 / 1 / 0
Регистрация: 08.06.2015
Сообщений: 10
02.06.2016, 16:44  [ТС]
Ну это препятствие разве что для совсем чайников.
Для пользоватля curl что гет, что пост - одного порядка задачи. Нет?
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.06.2016, 16:58
Вот для curl как раз защита на стороне сервера. Слишком много лайков с одного адреса - блокировать или отправлять капчу.
Но и это может не спасти, если curl будет работать через кучу прокси серверов. Их, правда, еще нужно насобирать и вовремя обновлять. А это уже задача посложнее.
0
Software Engineer
 Аватар для Custos
332 / 335 / 55
Регистрация: 23.09.2014
Сообщений: 983
02.06.2016, 19:42
Цитата Сообщение от AVR55 Посмотреть сообщение
Написал движок на PHP
Цитата Сообщение от AVR55 Посмотреть сообщение
Не хочется изобретать велосипеды
Эм...
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
02.06.2016, 22:46
при клике на "лайк-ссылку" получаем в ответ новые значения ссылок и меняем их все на странице

как идея?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2016, 22:46
Помогаю со студенческими работами здесь

PHP и безопасность
Уважаемые знатоки, внимание вопрос. Перед запуском сайта в интернете, опасно ли оставлять комментарии у php кода, которые были написаны для...

Безопасность в php
Добрый вечер. Задумался о безопасности в php. К примеру есть такая функция для фильтрации данных: function cleardata($data){ ...

Безопасность сессии PHP
Добрый день, недавно начал изучать PHP. Сперва решил сделать простую логин страничку. Возник вопрос о сохранении факта логина, решил...

Безопасность PHP приложения.
Добрый вечер. Настал тот день и тот час, когда мою систему на PHP нужно выложить в сеть. Система возьмет на себя довольно...

PHP-безопасность для начинающего
Здравствуйте. Есть маленький комп, на нём я поставил маленький сайт, ну и маленький апач с пхп. В пхп я дуб дубом, и его не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru