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
Форумы портала PHP.SU :: Версия для печати :: AJAX + PHP. Безопасность
Форумы портала PHP.SU » » HTTP и PHP » AJAX + PHP. Безопасность

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

1. In1ernal Error - 30 Июня, 2011 - 22:42:51 - перейти к сообщению
На сайте имеется закрытая для общего доступа часть. По сути это некая панель управления, разделы которой подгружаются через 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 не позволяет
2. OrmaJever - 30 Июня, 2011 - 22:54:37 - перейти к сообщению
In1ernal Error пишет:
отфильтровать своего и чужих

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

ajax это обычное обращение к серверу тоже самое что просто обновить страницу. Главное чтобы в php скрипте всё очень хорошо фильтровалось
3. In1ernal Error - 30 Июня, 2011 - 22:58:13 - перейти к сообщению
Расскажу поподробнее:
Панель управления написана для управления серверами КС. Типо школохостинг такой.
В БД в каждой строке с сервером прописан ID хозяина так сказать. Вот по этому ID и фильтруются те, кто попадают на статическую страницу панели управления.

Но опять же повторюсь, почему-то боюсь заюзать то же самое в аяксе. Не верится в безопасность этого мероприятия.
4. vsll - 30 Июня, 2011 - 23:08:09 - перейти к сообщению
если не уверены, не делайте, максимум, где можно доверять ajax это - вызвать обновление php скрипта, котроый всё остальное делает
5. OrmaJever - 30 Июня, 2011 - 23:10:30 - перейти к сообщению
In1ernal Error пишет:
В БД в каждой строке с сервером прописан ID хозяина так сказать.

А у клиента что есть? если клиент распознается только по этому ид то это итак не безопасно, потому что его можно подделать и любой попадёт.
In1ernal Error пишет:
школохостинг
Ха-ха
6. In1ernal Error - 30 Июня, 2011 - 23:16:36 - перейти к сообщению
При авторизации в сессии пишется USER_ID, да рандомный хэш в БД для возможной авторизации по кукам.

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

Как-то так

upd. Прямо сейчас добавил инклюд проверки авторизации в AJAX'овый скрипт, сравниваю как и при открытии обычной страницы. С виду нормально, но все равно боюсь подводных камней
7. Stierus - 01 Июля, 2011 - 01:26:58 - перейти к сообщению
Я не очень понимаю проблему. Авторизация и аутентификация при ответе на ajax-запрос должна проходить абсолютно так же, как и при обычном запросе ... это очевидно, на мой взгляд Улыбка Если авторизация даст сбой - она даст сбой и там и там, если нет - то нет ... не очень понял, как можно не доверять ajax ? ajax - это обычный http запрос, если не доверяете http - переходите на https

 

Powered by ExBB FM 1.0 RC1