Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы Способы защиты AJAX. Что посоветуете?

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


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

вопрос
До сих пор, создавая обращения 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
3

549 | 103

lutskboy - 8 марта 2014 15:01 - Юзер

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

vk_159926832
206 | 5

vk_159926832 - 8 марта 2014 15:23 - Юзер

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

vitnet
218

2172 | 930

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
206 | 5

vk_159926832 - 8 марта 2014 17:45 - Юзер

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

rashpil
33

232 | 182

rashpil - 8 марта 2014 15:57 - Эксперт

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

vk_159926832
206 | 5

vk_159926832 - 8 марта 2014 18:32 - Юзер

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

Mofsy
6

185 | 57

Mofsy - 8 марта 2014 18:16 - Эксперт

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

i_loves_ac_dc
7

235 | 41

i_loves_ac_dc - 8 марта 2014 18:24 - Гости

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

vk_159926832
206 | 5

vk_159926832 - 8 марта 2014 18:35 - Юзер

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

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

Mofsy
6

185 | 57

Mofsy - 8 марта 2014 18:55 - Эксперт

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

vk_159926832
206 | 5

vk_159926832 - 8 марта 2014 19:59 - Юзер

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

dj-avtosh
39

1479 | 390

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 запрос!';
  }

skype: elhan.isaev

vk_159926832
206 | 5

vk_159926832 - 10 марта 2014 08:14 - Юзер

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

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

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

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