Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
Дело обстоит так: на сайте если пользователь попытался обойти систему, он должен получить бан через JS код. Во всем этом деле я уже просто запутался, ибо не знаю как поступить.
Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
Viper пишет:
может. Никогда не доверяйте тому, что получаете с клиентской части. Всегда дублируйте проверку на стороне сервера.
PS! Ваш запрос можно банально подделать отправив левые данные минуя javascript.
Как же тогда поступить, чтобы данные нельзя было подделать? Т.к. эти данные обязательно должны поступить через скрипт, поскольку проверить например время на серверной части я не могу, поскольку во всех скриптах оно разное. Как тогда быть?
Viper
Отправлено: 17 Октября, 2015 - 17:57:25
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
IncOness пишет:
Т.к. эти данные обязательно должны поступить через скрипт
неважно как они поступаю, важно как вы их обрабатываете. У вас время бана и данные юзера храниться должны в БД. Если забаненый заходит, то вы проверяете эти данные и отправляете ответ. А сам запрос может быть послан как напрямую, так и через ajax.
Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
Viper пишет:
неважно как они поступаю, важно как вы их обрабатываете. У вас время бана и данные юзера храниться должны в БД. Если забаненый заходит, то вы проверяете эти данные и отправляете ответ. А сам запрос может быть послан как напрямую, так и через ajax.
Вы меня наверно не совсем поняли. Дело в том, что мне обязательно нужно, чтобы данные отправлялись на сервер через скрипт (клиентскую часть), который, как Вы сами сказали можно подделать. Мне необходимо передавать на сервер через скрипт 3 значения: логин пользователя, которого нужно забанить, время бана, которое указывается в скрипте и причина, которая также указывается скриптом. Я хочу найти решение, как поступить, чтобы пользователь не мог подделать данные и отправить этот скрипт на сервер. Сами посудите, я не могу проверить на серверной части, какой пользователь должен быть забанен, на какое время и по какой причине, поскольку на сайте таких скриптов несколько, и у каждого свое время и причина. А таким образом получится, что пользователь может подделать скрипт и таким образом отправить в бан невинного пользователя или отправить в бан себя, но например на 1 секунду. ПОнимаете о чем я?
Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
Viper пишет:
я вас понял. Вы не совсем поняли как это сделать ;)
Время бана нужно хранить в БД. Тогда вы сможете сделать проверку истекло ли время бана или нет.
Вернее это я неправильно пояснил Скрипт, который я кинул, отправляет данные через POST запрос в файл ban.php, который в свою очередь обрабатывает присланные POST'ы и заносит данные в БД.
Вопрос тот же: ну как мне обезопасить данный скрипт, если это вообще возможно? (Добавление)
Т.е. как видите, обработчик на сервере заносит присланные скриптом логин, время и причину, которые, как мы выяснили, можно подделать на клиенте. Например пользователь может подделать логин и забанить другого пользователя, а может забанить себя например всего-лишь на 1 секунду, мног овариантов. Как сделать подобный скрипт безопасным и работоспособным?
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
IncOness расскажу "на пальцах".
Когда юзер банится в БД в талицу юзеров заносится время на сколько забанен, время последнего логина и флаг is_banned(это поле в бд) устанавливается в 1. Неважно какое время у клиента, важно какое время на сервере. Далее вы проверяете
Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
Viper, не совсем понимаю для чего мне к примеру $last_login_time. Данные обработчиком заносятся в БД в таблицу banlist, а не в таблицу users. А при попытке входа сервер проверяет наличие такого логина в таблице banlist. Возможно Вы меня все-таки неправильно поняли, возможно я Вас, т.к. я Вам скинул 2 кода: один - JS (скрипт, отсылающие логин, время и причину на сервер), второй - PHP, который обрабатывает присланные данные. Вопрос был не в том, как мне забанить пользователя, т.к. эту систему я уже написал, а как обезопасить выполнение этого скрипта, т.е. защитить его от подделки логина или времени в частности. Т.е. мы с Вами говорили о том, что на клиенте можно подделать эти данные:
например подделать логин, указав имя другого пользователя, или время бана, а затем отправить этот скрипт на сервер, который по моим соображениям никак не может обработать "подлинность" данных, которые пришли с клиента.
обработчик не может проверить настоящие ли пришли данные. Т.е. злоумышленник может вместо себя например отправить в бан админа. Я это имел в виду. Вот и не знаю что с этим делать, как защитить скрипт от поддельных данных.
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
IncOness пишет:
например подделать логин, указав имя другого пользователя, или время бана, а затем отправить этот скрипт на сервер, который по моим соображениям никак не может обработать "подлинность" данных, которые пришли с клиента.
и? Опять тот же вопрос - зачем брать время с клиента?
$unban=$date+$time;// дата разбана ($date - текущее время, $time - время бана)
Т.е. имеется в виду срок бана, а не время бана. Понимаете?
andrewkard
Отправлено: 17 Октября, 2015 - 21:51:33
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
IncOness пишет:
Потому что этот скрипт используется на разных страницах с разным временем
разницы то нет, шлете на сервер - забанить на год, сервер пишет свое время + год,
проверка, если время сервера + год уже меньше текущего, разбанить
IncOness
Отправлено: 17 Октября, 2015 - 22:35:01
Гость
Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
Ребята, по-моему мы уходим в сторону. Я и сам прекрасно знаю как задать время, внести данные в базу и т.д. Вопрос в том, как защитить подобный код от возможной подмены переменных. Например чтобы нельзя было подменить свой логин и отправить в бан другого пользователя, чтобы нельзя было подделать срок бана и т.д.
Ну вот кто может подсказать, как можно защитить этот код от подмены? По коду выше видно, что в бан должно отправить пользователя с логином, который указан в сессии "login" и именно на 1 год. Как избежать того, чтобы какой-нибудь хакер, возможно отправил в бан не себя или не уменьшил например срок бана?
lastdays
Отправлено: 18 Октября, 2015 - 01:47:07
Частый гость
Покинул форум
Сообщений всего: 221
Дата рег-ции: Март 2013
Помог: 7 раз(а)
Проверить, логин передаваемый скрипту, т.е. сделать запрос в таблицу users или как там она у тебя.
Передать дополнительный параметр, аля
md5 ( $login . $time . $id) и смерить на сервере, да как угодно, так и делай.
DeepVarvar
Отправлено: 18 Октября, 2015 - 01:54:34
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
IncOness пишет:
Как же тогда поступить, чтобы данные нельзя было подделать?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.