Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Способы защиты AJAX. Что посоветуете?

Способы защиты AJAX. Что посоветуете?


     08.03.2014    Общие вопросы, jQuery, Общие вопросы по PHP    4811

вопрос
До сих пор, создавая обращения AJAX я мучаюсь вопросом: как защитить AJAX от прямого обращения. Пробовал защитить его с помощью проверки юзера на "админа", работал на сайте, а от прямого обращения не защитил:
if($member_id['user_group'] != 1) die ("Hacking Attempt");


Пробовал передавать дополнительный параметр, к примеру mode:1, но это не сильно безопасно, так как можно посмотреть код JS.
$.post(dle_root + 'engine/ajax/myajax.php', { id: id, mode: 1 }, function(data).................

if(($mode!="1" or empty($mode)) OR (!is_numeric($id) OR empty($id))) die ("Hacking Attempt");


Даже к сожалению не помогло это, хотя я не надеялся что оно поможет:
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Kiss your ass :)" );
}


Подскажите пожалуйста, как и чем вы защищаете AJAX от прямого обращения :) Срочно нужен ваш совет

Ответил: Sander


100% защиты нету!
Проверка реферера на данный момент является самым действенным, однако любой скрипт может легко подделать реферера.
Можно замудриться с сессиями и хешами, однако это дело тоже относительно легко обходится.
Так что бери код и ставь во все ajax скрипты

function reset_url($url) {
    $value = str_replace ( "http://", "", $url );
    $value = str_replace ( "https://", "", $value );
    $value = str_replace ( "www.", "", $value );
    $value = explode ( "/", $value );
    $value = reset ( $value );
    return $value;
}
    $_SERVER['HTTP_REFERER'] = reset_url ( $_SERVER['HTTP_REFERER'] );
    $_SERVER['HTTP_HOST'] = reset_url ( $_SERVER['HTTP_HOST'] );

    if ($_SERVER['HTTP_HOST'] != $_SERVER['HTTP_REFERER']) {
        @header ( 'Location: ' . $config['http_home_url'] );
        die ( "Access denied!!!<br /><br />Please visit <a href=\"{$config['http_home_url']}\">{$config['http_home_url']}</a>" );
    }

13 комментариев

lutskboy
Эксперт

lutskboy - 8 марта 2014 15:01 -

к сожалению защититься никак

vk_159926832
Юзер

vk_159926832 - 8 марта 2014 15:23 -

Чтоли совсем-совсем нет средств защиты? Ладно подождём ответов других

vitnet
PHP-developer

vitnet - 8 марта 2014 15:28 -

js
$.post(dle_root + "engine/ajax/code.php", {skin: dle_skin, action:"load"}, function(data) {
php
$_REQUEST['skin'] = trim(totranslit($_REQUEST['skin'], false, false));

if( $_REQUEST['skin'] == "" OR !@is_dir( ROOT_DIR . '/templates/' . $_REQUEST['skin'] ) ) {
    die ("Hacking attempt!");
}

vk_159926832
Юзер

vk_159926832 - 8 марта 2014 17:45 -

Спасибо, неплохо!

rashpil
Эксперт

rashpil - 8 марта 2014 15:57 -

Как на счёт проверки рефера?

vk_159926832
Юзер

vk_159926832 - 8 марта 2014 18:32 -

Можно рассчитать как вариант $_SERVER['HTTP_REFERER'], но не стоит забывать, что не все браузеры устанавливают его, а некоторых даже можно изменять содержимое HTTP_REFERER. Одним словом, ему нельзя доверять.

Mofsy
Эксперт

Mofsy - 8 марта 2014 18:16 -

смысл защищать?

i_loves_ac_dc
Гости

i_loves_ac_dc - 8 марта 2014 18:24 -

Mofsy, смысл вообще код защищать, пусть шелы заливают.

vk_159926832
Юзер

vk_159926832 - 8 марта 2014 18:35 -

Как понять "смысл"?? :\ - чтоб не было дыр в сайте, чтоб никто не мог наговнять сайту через AJAX.

Также аналогично спрошу: "смысл защищать свой компьютер антивирусом?" XD

Mofsy
Эксперт

Mofsy - 8 марта 2014 18:55 -

у меня отсутствует антивирус, это не мешает жить без вирусов.
смысл защищать ajax таким образом? Сделайте нормальную фильтрацию данных и все. Не важно откуда пришел запрос.

vk_159926832
Юзер

vk_159926832 - 8 марта 2014 19:59 -

Ну значит вам крупно повезло, в нынешний век шанс заражения велик. Но дело не в этом. Я говорю про прямое обращение. На стороне клиента (сайта) проверки происходят.

dj-avtosh
PHP-developer

dj-avtosh - 9 марта 2014 14:16 -


if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    // Если к нам идёт Ajax запрос, то ловим его
    echo 'Это ajax запрос!';
  }

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

vk_159926832
Юзер

vk_159926832 - 10 марта 2014 08:14 -

Спасибо, метод супер.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 24.09.2012 Vladsuperklas  Общие вопросы
наверх