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 :: AJAX + PHP. Безопасность

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: И прочие методы ограничения доступа в закрытую часть
In1ernal Error
Отправлено: 30 Июня, 2011 - 22:42:51
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




На сайте имеется закрытая для общего доступа часть. По сути это некая панель управления, разделы которой подгружаются через AJAX.

И самое интересное здесь - как ограничить чужим юзерам обращения к аяксовому скрипту. Даже не ограничить, а отфильтровать своего и чужих так сказать.

Юзаю такую схему:

Если юзер залогинен на сайте, то на статичной странице панели управления генерируется JS код вида:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $.ajax({
  3.      type: "POST",
  4.      url: "/скрипт.php",
  5.      data: "session=$session_hash&serv_hash=$serv_hash&serv_id=$serv_id",
  6.      success: function(msg){
  7.           $("#div_for_ajax_" + action).html(msg);
  8.      }
  9. });
  10.  


Где
session=$session_hash - рандомная строка для сессии в md5.
serv_hash=$serv_hash - md5 с солью и уникальным номером продукта(которым управляет панелька Улыбка ) - $serv_id. Если юзер не залогинен на сайте, то хэш не генерируется, а подставляется заведомо неверная рандомная строка.



Скрипт на серверной стороне проверяет соответствие отосланной через AJAX сессии и хранящейся у вебсервера сессии, и если они не совпадают, отфутболивает запрос.
Далее проверяется соответствие $serv_hash. Тот хэш, что был отослан через AJAX генерируется только залогиненным хозяевам продукта на статичной странице панели управления.
Получается с виду, что пролезть вроде бы и негде, но я все же сомневаюсь в AJAX'e.

Посоветуйте возможные пути решения такой задачи, или укажите на грубые ошибки в алгоритме, если они есть. Заранее спасибо!

P.S. не могу прямо спать спокойно, не доверяю вот AJAX'y и все. Как вариант думал проинклудить скрипт авторизации в аяксовом скрипте и проверить права юзера. Но фобия AJAX'a не позволяет

(Отредактировано автором: 30 Июня, 2011 - 22:54:39)

 
 Top
OrmaJever Модератор
Отправлено: 30 Июня, 2011 - 22:54:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




In1ernal Error пишет:
отфильтровать своего и чужих

Вначале нужно решить как их отличить? У своих есть какая то отдельная група, или кука или хоть что-то как их можно отличить?
In1ernal Error пишет:
не могу прямо спать спокойно, не доверяю вот AJAX'y и все

ajax это обычное обращение к серверу тоже самое что просто обновить страницу. Главное чтобы в php скрипте всё очень хорошо фильтровалось


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
In1ernal Error
Отправлено: 30 Июня, 2011 - 22:58:13
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Расскажу поподробнее:
Панель управления написана для управления серверами КС. Типо школохостинг такой.
В БД в каждой строке с сервером прописан ID хозяина так сказать. Вот по этому ID и фильтруются те, кто попадают на статическую страницу панели управления.

Но опять же повторюсь, почему-то боюсь заюзать то же самое в аяксе. Не верится в безопасность этого мероприятия.
 
 Top
vsll
Отправлено: 30 Июня, 2011 - 23:08:09
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




если не уверены, не делайте, максимум, где можно доверять ajax это - вызвать обновление php скрипта, котроый всё остальное делает
 
 Top
OrmaJever Модератор
Отправлено: 30 Июня, 2011 - 23:10:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




In1ernal Error пишет:
В БД в каждой строке с сервером прописан ID хозяина так сказать.

А у клиента что есть? если клиент распознается только по этому ид то это итак не безопасно, потому что его можно подделать и любой попадёт.
In1ernal Error пишет:
школохостинг
Ха-ха


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
In1ernal Error
Отправлено: 30 Июня, 2011 - 23:16:36
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




При авторизации в сессии пишется USER_ID, да рандомный хэш в БД для возможной авторизации по кукам.

Дежурный скрипт авторизации инклюдится везде, и проверяет, есть ли сессия, если нет, то куки и т.д. и т.п. Если есть сессия, то в глобальную переменную ($user_id например) ставится USER_ID, и при заходе в панель сравнивается с тем USER_ID, что записан в БД. Совпадает - дается хэш сервера для доступа в аякс. Нет - пошел на лес отсюда.

Как-то так

upd. Прямо сейчас добавил инклюд проверки авторизации в AJAX'овый скрипт, сравниваю как и при открытии обычной страницы. С виду нормально, но все равно боюсь подводных камней

(Отредактировано автором: 30 Июня, 2011 - 23:20:46)

 
 Top
Stierus Супермодератор
Отправлено: 01 Июля, 2011 - 01:26:58
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Я не очень понимаю проблему. Авторизация и аутентификация при ответе на ajax-запрос должна проходить абсолютно так же, как и при обычном запросе ... это очевидно, на мой взгляд Улыбка Если авторизация даст сбой - она даст сбой и там и там, если нет - то нет ... не очень понял, как можно не доверять ajax ? ajax - это обычный http запрос, если не доверяете http - переходите на https
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB