Безопасность скриптов для AJAX

Тема в разделе "Как сделать...", создана пользователем HatoL, 21 май 2012.

  1. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Есть сайтик, который делает AJAX-запросы к PHP-скрипту. Вообще AJAX в данном случае используется в качестве автокомплетера (ну как в гугле — вводите начало предложения, а вам уже варианты предлагаются).

    Так вот, сделал такую штуку первый раз и думаю насчет безопасности. Ясно, что сделать запрет на выполнение скрипта всем, кроме тех, кто делает его с сайта невозможно. Браузер делает запрос от лица посетителя, запрос должен обязательно произойти и вернуть результат. Получается защиту невозможно сделать, потому как все, что происходит на стороне клиента, можно подделать. Правильно?
     
  2. invader

    invader Серый кардинал в отставке :)

    Moderator
    • Супермодератор
    Регистр.:
    3 апр 2006
    Сообщения:
    2.586
    Симпатии:
    5.732
    Ответ в теме. А в PHP скрипте что происходит? Видимо проверка в том числе...
    Да и сделать запреты на запросы извне возможно
     
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.549
    Симпатии:
    1.433
    А от чего нужна защита?

    От слишком частых запросов - веди счетчик на сервере и бань.
    От csrf - введи периодически изменяющиеся токены

    От вызова скрипта по url (просто адрес в строку подставить)
    - проверяй метод передачи запроса (ставь POST) и заголовки:
    X-Ajax-Referer: http://---
    X-Requested-With: XMLHttpRequest
     
    HatoL нравится это.
  4. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    как бы правильно, но тем не менее, вы можете и должны проверять:
    1. реферер и урл откуда запросили
    2. тип запроса ($_SERVER['HTTP_X_REQUESTED_WITH'], не на всех серверах работает)
    3. соответствие сессий, т.е. в "вызавающем" файле делаем примерно так
    PHP:
    session_start();
    $_SESSION['safe'] = md5(time().'блаблабла_наша_соль_для_сессии_блаблабла');
    $my_session $_SESSION['safe']; 
    и передаем ее в "вызываемый" файл, в котором уже проверяем соответствие...

    кроме того, настоятельно рекомендую в след. раз пользоваться поиском - чем к примеру ваш вопрос отличается от того что задан здесь:
    /threads/229052/
     
    HatoL нравится это.
  5. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
    Добавляем Javascript-ом параметр (либо куку), который завязан на время + какой-либо секретный ключ с сервера итд - на сервере проверяем его наличие.
    Javascript прогоняем через обфускатор. Далеко не каждый первый парсер сможет полностью корректно сэмулировать Javascript.
     
    HatoL нравится это.