[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Jquery AJAX как защитить от взлома
savelikan
Привет всем.... Вот начинаю расбирать JQUERY.
Вопрос такой... ЕСли страница подгружается в блок DIV1.... А если пользователь, или даже взломщик посмотрит в код, он сможет достать адрес скрипта, и подгрузить страницу без основного шаблона сайта.....
Например скрипт подгружает в блок DIV1 страницу /data/content.php?do=new
А пользователь в бравзер пропишет /data/content.php?do=new и все.....
Как можно ето предотвратить?



Спустя 15 минут, 2 секунды (8.04.2012 - 09:33) johniek_comp написал(а):
чета я не понял, ну попробуй закрой доступ к файлу на прямую, а лучше покажи код

Спустя 2 минуты, 53 секунды (8.04.2012 - 09:36) savelikan написал(а):
Цитата (johniek_comp @ 8.04.2012 - 08:33)
чета я не понял, ну попробуй закрой доступ к файлу на прямую, а лучше покажи код

а вот как запретить доступ напрямую, а AJAX скрипту позволить обращатся к нему?

Спустя 4 минуты, 38 секунд (8.04.2012 - 09:41) johniek_comp написал(а):
Цитата
а вот как запретить доступ напрямую, а AJAX скрипту позволить обращатся к нему?

да легко, например в index.php создаешь константу
define(JOHN, '');

а в ajax.php пишешь
defined('JOHN') or die("Нет доступа");

если его вызвать на прямую получишь "Нет доступа", или вообще header на 404-ю, как захочешь. а если его подключить то содержание загрузится.

Спустя 2 минуты, 1 секунда (8.04.2012 - 09:43) savelikan написал(а):
но два PHP файла работають независимо...
<script type="text/javascript">   
$(document).ready(function(){

$("#par1").ajaxSend(function(){
$("#img1").css("display","block");
});
$("#par1").ajaxComplete(function(){
$("#img1").css("display","none");
});
$("#par1").ajaxError(function(){
alert("Выполнение AJAX запроса завершено с ошибкой.");
});
$("#par1").ajaxSuccess(function(){
alert("AJAX запрос успешно выполнен!");
});
$("#but1").click(function(){
$("#par1").load("add.php","x=10&y=100");
});
$("#but2").click(function(){
$("#par1").load("abb.php","x=10&y=100");
});

});
</
script>

Спустя 3 минуты, 49 секунд (8.04.2012 - 09:46) johniek_comp написал(а):
Цитата
но два PHP файла работають независимо...

значить не правильная архитектура приложения, обычно ajax скрипты закрывают таким способом каким я описал выше, скинь по-больше кода глядишь придумаем чего

Спустя 8 минут, 47 секунд (8.04.2012 - 09:55) savelikan написал(а):
ДА простой пример.... Просто я думаю, стоит так делать или нет.... или другой способ есть....
Я хочу сделать подгрузку страниц как Вконтакте


<html>                                                                  
<head>
<style
type="text/css">
#img1
{
display:none;
position:absolute;
top:120px;
left:330px;
}
</style>
<script
type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script
type="text/javascript">
$(document).ready(function(){

$("#par1").ajaxSend(function(){
$("#img1").css("display","block");
});
$("#par1").ajaxComplete(function(){
$("#img1").css("display","none");
});
$("#par1").ajaxError(function(){
alert("Выполнение AJAX запроса завершено с ошибкой.");
});
$("#par1").ajaxSuccess(function(){
alert("AJAX запрос успешно выполнен!");
});
$("#but1").click(function(){
$("#par1").load("add.php","x=10&y=100");
});
$("#but2").click(function(){
$("#par1").load("abb.php","x=10&y=100");
});

});
</script>
</head>
<body>
<p
id="par1">Конткнт страницы.</p>
<input
id="but1" type="button" value="Получить контент" />
<img
id="img1" src="ajax-loader.gif" />
</body>
</html>


ADD.php
<?php
echo 'текст для подгрузки';
?>

Спустя 3 минуты, 20 секунд (8.04.2012 - 09:59) johniek_comp написал(а):
<?php
define(JOHN, '');
?>
<html>
<
head>
<
style type="text/css">
#img1
{
display:none;
position:absolute;
top:120px;
left:330px;
}
</style>
<
script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<
script type="text/javascript">
$(document).ready(function(){

$("#par1").ajaxSend(function(){
$("#img1").css("display","block");
});
$("#par1").ajaxComplete(function(){
$("#img1").css("display","none");
});
$("#par1").ajaxError(function(){
alert("Выполнение AJAX запроса завершено с ошибкой.");
});
$("#par1").ajaxSuccess(function(){
alert("AJAX запрос успешно выполнен!");
});
$("#but1").click(function(){
$("#par1").load("add.php","x=10&y=100");
});
$("#but2").click(function(){
$("#par1").load("abb.php","x=10&y=100");
});

});
</
script>
</
head>
<
body>
<
p id="par1">Конткнт страницы.</p>
<
input id="but1" type="button" value="Получить контент" />
<
img id="img1" src="ajax-loader.gif" />
</
body>
</
html>

ADD.php
<?php
defined('JOHN') or die("Нет доступа");
echo 'текст для подгрузки';
?>

Спустя 5 минут, 59 секунд (8.04.2012 - 10:05) savelikan написал(а):
Может я плохо знаю PHP, но define только для одной страницы и не передается....
и результат подгрузки - "Нет доступа".....

Спустя 6 минут, 23 секунды (8.04.2012 - 10:11) johniek_comp написал(а):
savelikan
index.php
<?php
define(JOHN, '');
include '/ajax.php';
?>

ajax.php
<?php
defined('JOHN') or die("Нет доступа");
echo 'текст для подгрузки';
?>


если запустить index.php то выведет 'текст для подгрузки', а если запустить ajax.php выведет "Нет доступа")

Спустя 4 минуты, 17 секунд (8.04.2012 - 10:15) savelikan написал(а):
если запустить index.php то выведет

текст для подгрузки 
Конткнт страницы.


и если нажать "получить контент" то будет

текст для подгрузки 
Нет доступа

Спустя 15 минут, 30 секунд (8.04.2012 - 10:31) Панч написал(а):
потому что ajax запрос это обычный запрос клиента, и про константу он не знает.
Надо в ajax передать параметры, по которым потом делать проверку.


$("#but1").click(function(){
$("#par1").load("add.php","x=10&y=100&test=1");
});


<?php
if($_GET["test"] == 1)
echo 'текст для подгрузки';
?>


но опять же, пытливому юзеру не что не помешает передать те же параметры самостоятельно

Спустя 3 минуты, 7 секунд (8.04.2012 - 10:34) savelikan написал(а):
Цитата (Панч @ 8.04.2012 - 09:31)
но опять же, пытливому юзеру не что не помешает передать те же параметры самостоятельно

Я вот думаю может как то передавать какой-то хеш......
Или лучше его передавать через Post......
но как....

Спустя 39 минут, 42 секунды (8.04.2012 - 11:14) I++ написал(а):
Цитата (savelikan @ 8.04.2012 - 11:34)
Цитата (Панч @ 8.04.2012 - 09:31)
но опять же, пытливому юзеру не что не помешает передать те же параметры самостоятельно

Я вот думаю может как то передавать какой-то хеш......
Или лучше его передавать через Post......
но как....

Всё это хрень!

Кому надо все равно вскроют. Эта защита от хомяка, скорее реальную уязвимость так допустишь, пытаясь сделать защиту.

Спустя 27 минут, 46 секунд (8.04.2012 - 11:41) Invis1ble написал(а):
Цитата
Всё это хрень!

Кому надо все равно вскроют. Эта защита от хомяка, скорее реальную уязвимость так допустишь, пытаясь сделать защиту.

согласен
да и вообще, нафиг оно нужно? ну посмотрит юзер кусок html без стилей или даже (о боже!) JSON... и че с того?

Спустя 6 минут, 51 секунда (8.04.2012 - 11:48) bodja написал(а):
johniek_comp
не мутите воду,
аякс запрос - это то же самое что и обычный запрос.


Цитата
А если пользователь, или даже взломщик посмотрит в код, он сможет достать адрес скрипта, и подгрузить страницу без основного шаблона сайта.....

И что???
Если хочет фигней позаниматься,пускай занимается.

Спустя 1 день, 1 час, 58 минут, 16 секунд (9.04.2012 - 13:46) Zhandos написал(а):
Вообще то можно узнать заголовок запроса, является ли запрос ajax запросом
Например:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
{
echo 'Access denied';
exit;
}

Взял отсюда
В кохане за это отвечает request->is_ajax(), по сути тоже самое что и выше.
Думаю это то, что нужно.
bodja, я бы не был так беспечен. Страницы Ajax запроса не должны открываться через браузер, по крайней мере не должны открываться не получив нужных заголовков.

Никогда не доверяй пользователю и входным данным.

Спустя 16 минут (9.04.2012 - 14:02) Invis1ble написал(а):
Цитата
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')

эти заголовки подделываются на раз-два
кроме того, я спокойно могу посмотреть ответ сервера с помощью инструментов для отладки в браузерах без всяких ухищрений

Спустя 11 минут, 2 секунды (9.04.2012 - 14:13) Игорь_Vasinsky написал(а):
johniek_comp
Цитата
<?php
define(JOHN, '');
?>
<html>                                                                 
<head>     
<style type="text/css">
#img1
{
display:none;
position:absolute;
top:120px;
left:330px;
}
</style>                                                     
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script type="text/javascript"> 
$(document).ready(function(){

  $("#par1").ajaxSend(function(){
      $("#img1").css("display","block");
  });
  $("#par1").ajaxComplete(function(){
      $("#img1").css("display","none");
  });
  $("#par1").ajaxError(function(){
      alert("Выполнение AJAX запроса завершено с ошибкой.");
  });
  $("#par1").ajaxSuccess(function(){
      alert("AJAX запрос успешно выполнен!");
  });
  $("#but1").click(function(){
      $("#par1").load("add.php","x=10&y=100");
  });
  $("#but2").click(function(){
      $("#par1").load("abb.php","x=10&y=100");
  });

});           
</script>                                                     
</head>
<body>
<p id="par1">Конткнт страницы.</p>
<input id="but1" type="button" value="Получить контент" />
<img id="img1" src="ajax-loader.gif" />
</body>
</html> 

ADD.php
<?php
defined('JOHN') or die("Нет доступа");
echo 'текст для подгрузки';
?>


и в чём смысл? вот те дали код статичной страничке, теперь что? туда конфиг подключасть с констатами? для чего?

Спустя 16 минут, 5 секунд (9.04.2012 - 14:30) bodja написал(а):
Цитата
bodja, я бы не был так беспечен. Страницы Ajax запроса не должны открываться через браузер, по крайней мере не должны открываться не получив нужных заголовков.

Это кто такое сказал?
Цитата
$_SERVER['HTTP_X_REQUESTED_WITH']

НЮ-НЮ...

Спустя 2 минуты, 14 секунд (9.04.2012 - 14:32) ADiel написал(а):
Сайт должен быть построен так, что бы клиенту никогда не передавались данные, которые ему абсолютно не нужно знать. ajax или еще как то - не важно. Клиент должен просто видеть данные, которые ему нужны и не должен ничего обрабатывать.

Защитить ajax запрос НЕВОЗМОЖНО. Это простой http запрос. Просто передается заголовок HTTP_X_REQUESTED_WITH и все.


_____________
Одесса - мой город!)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.