Вопрос такой... ЕСли страница подгружается в блок 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 написал(а):
ДА простой пример.... Просто я думаю, стоит так делать или нет.... или другой способ есть....
Я хочу сделать подгрузку страниц как Вконтакте
ADD.php
Я хочу сделать подгрузку страниц как Вконтакте
<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
ajax.php
если запустить index.php то выведет 'текст для подгрузки', а если запустить ajax.php выведет "Нет доступа")
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 передать параметры, по которым потом делать проверку.
но опять же, пытливому юзеру не что не помешает передать те же параметры самостоятельно
Надо в 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) | ||
Я вот думаю может как то передавать какой-то хеш...... Или лучше его передавать через 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 запросом
Например:
Взял отсюда
В кохане за это отвечает request->is_ajax(), по сути тоже самое что и выше.
Думаю это то, что нужно.
bodja, я бы не был так беспечен. Страницы 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 и все.
Защитить ajax запрос НЕВОЗМОЖНО. Это простой http запрос. Просто передается заголовок HTTP_X_REQUESTED_WITH и все.
_____________
Одесса - мой город!)))