Защита PHP скриптов, вызываемых при помощи AJAX

tf

крылья рулят
Автор оригинала: skynet80
Как защитить пхп скрипт от прямого доступа когда он вызывается из другого скрипта известно, например

defined('_VALID_MOS') or die('Direct Access to this location is not allowed.');

А как сделать так чтобы этот скрипт был еще доступен для объекта XMLHttpRequest, но в тоже время был защищен от прямого доступа.
а зачем?
смысл?

-~{}~ 09.11.06 21:21:

дымчик
define('AJAX','AJAX');
if ($_SESSION['enoughGrants']) {
if (isset($_POST['fName'])) {
include_once('абсолютный-путь'.HTMLSpecialChars($_POST['fName']).'.php');
}
}
раз ты предлагаеш человеку ЧПУ, хоть ознакомся хоть немного с темой, а не тот ужас что ты написал
 

MajestiC

Пых
Нда.... Ужос.

skynet80
Вот какая принципиальная разница откуда пользователь запустит скрипт : из XMLHttpRequest или напрямую из браузера?
Если данные приходят через XMLHttpRequest, я их что, не могу подменить?
Или не могу подменить POST запрос выдавая себя за XMLHttpRequest и обходя твои "проверки"?

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

Solid

Drosera anglica
Защита должна быть главным образом от спама, и не больше.
 

AmadMike

Новичок
Как защитить пхп скрипт от прямого доступа когда он вызывается из другого скрипта известно, например

defined('_VALID_MOS') or die('Direct Access to this location is not allowed.');

А как сделать так чтобы этот скрипт был еще доступен для объекта XMLHttpRequest, но в тоже время был защищен от прямого доступа.
Вчитайся в то что ты написал. Где выполняется пхп скрипт? и что такое объект XMLHttpRequest?

шифровать xml код, затем декодировать его обратно через javascript
Вот тут один шизик уже кое-что подобное делал: http://www.experiment.net.ru/read/?nstat=16
 

дымчик

Новичок
Автор оригинала: tf
дымчик

раз ты предлагаеш человеку ЧПУ, хоть ознакомся хоть немного с темой, а не тот ужас что ты написал
Причем тут ЧПУ? О ЧПУ вообще ни слова не было в моем предыдущем посте...
Человек спрашивал, как можно ограничить файлы back-end'а объекта XMLHTTPRequest от прямого доступа
Я предложил свой вариант (организация доступа к файлам back-end'а через один общий шлюзовой файл)... но хоть убейте не могу увидеть даже намёков на ЧПУ в своем посте ;)

Хотя может мы вкладываем в аббревиатуру ЧПУ разный смысл :D
ЧПУ обычно формируется с помощью MOD_REWRITE сервера Apache... в файле httpd.conf или же .htaccess
Вы хоть в одной строчке видели упоминание про один из этих файлов?

Если я в чем-то не прав, или у Вас другое видение данного вопроса... милости прошу... готов подискутировать ;)
 

Фанат

oncle terrible
Команда форума
"человек спрашивал" сто лет назад.
и давно забыл об этом.
и спрашивал он совсем про другое.

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

дымчик

Новичок
Автор оригинала: AmadMike
Вчитайся в то что ты написал. Где выполняется пхп скрипт? и что такое объект XMLHttpRequest?
Я думаю, что все присутствующие здесь прекрасно представляют, что и как происходит.

Так вот объект XMLHTTPRequest выполняет запрос к серверу, обращаясь к некоторым файлам (back-end)... и насколько я понял из вопроса, человек пытается защитить файлы к которым обращается объект XMLHTTPRequest. Я не думаю, что он пытается защитить сами JS-файлы - это ведь попросту глупо ;)

-~{}~ 11.11.06 12:17:

Автор оригинала: Фанат
"человек спрашивал" сто лет назад.
и давно забыл об этом.
и спрашивал он совсем про другое.

а сейчас сюда пришли тормоза, которые даже на дату вопроса посмотреть не могут
Товарищ Фанат, почему у Вас такая неадекватная манера общения? У Вас комплексы неполноценности?
Почему Вы пытаетесь выставить всех дураками, а себя возвысить до небес? Допустим, Вы гуру в PHP и т.п., но зачем с таким пренебрежением относится к остальным участникам форума? :mad:

Пускай теме 100 лет, но всё равно кому-то это интересно ;)

-~{}~ 11.11.06 12:20:

Автор оригинала: дымчик
Я думаю, что все присутствующие здесь прекрасно представляют, что и как происходит.

Так вот объект XMLHTTPRequest выполняет запрос к серверу, обращаясь к некоторым файлам (back-end)... и насколько я понял из вопроса, человек пытается защитить файлы к которым обращается объект XMLHTTPRequest. Я не думаю, что он пытается защитить сами JS-файлы - это ведь попросту глупо ;)

-~{}~ 11.11.06 12:17:

Как защитить пхп скрипт от прямого доступа когда он вызывается из другого скрипта известно, например
defined('_VALID_MOS') or die('Direct Access to this location is not allowed.');
А как сделать так чтобы этот скрипт был еще доступен для объекта XMLHttpRequest, но в тоже время был защищен от прямого доступа.
Товарищ Фанат, почему у Вас такая неадекватная манера общения? У Вас комплексы неполноценности?
Почему Вы пытаетесь выставить всех дураками, а себя возвысить до небес? Допустим, Вы гуру в PHP и т.п., но зачем с таким пренебрежением относится к остальным участникам форума? :mad:

Пускай теме 100 лет, но всё равно кому-то это интересно ;)
 

Фанат

oncle terrible
Команда форума
Почему Вы пытаетесь выставить всех дураками
это не я. это вы сами =)
один дурак задаёт бессмысленный вопрос, а второй дурак через год ему отвечает.

ты не мог бы объяснить, какой смысл в той прокладке, которую ты предлагаешь положить между файлами back-end и запросами с клиента?
Буквально она отвечает на вопрос, да. А смысл-то в ней какой?
 

дымчик

Новичок
Автор оригинала: Фанат
это не я. это вы сами =)
один дурак задаёт бессмысленный вопрос, а второй дурак через год ему отвечает.

ты не мог бы объяснить, какой смысл в той прокладке, которую ты предлагаешь положить между файлами back-end и запросами с клиента?
Буквально она отвечает на вопрос, да. А смысл-то в ней какой?
А смысл такой, что остальные back-end'овские скрипты не будут доступны напрямую.
 

Фанат

oncle terrible
Команда форума
ну и?
И что в этом такого? Они не будут доступны напрямую, но будут делать то же самое, будучи вызваны через прокладку.
и? в чём смысл того, что они не будут доступны напрямую?
 

дымчик

Новичок
Автор оригинала: Фанат
ну и?
И что в этом такого? Они не будут доступны напрямую, но будут делать то же самое, будучи вызваны через прокладку.
и? в чём смысл того, что они не будут доступны напрямую?
Смысл в том что в прокладке можно будет выполнить все необходимые проверки, как то - авторизован ли пользователь или нет и т.п.
 

Фанат

oncle terrible
Команда форума
Те же самые проверки можно выполнить и в самих скриптах бэк-енда.
почему к скриптам бэк-енда такое особое отношение?
почему скриптам фронтенда не нужна прокладка, а этим вдруг срочно понадобилась?
в чём между ними принципиальная разница?
 

дымчик

Новичок
Автор оригинала: Фанат
Те же самые проверки можно выполнить и в самих скриптах бэк-енда.
почему к скриптам бэк-енда такое особое отношение?
почему скриптам фронтенда не нужна прокладка, а этим вдруг срочно понадобилась?
в чём между ними принципиальная разница?
В общем-то разницы никакой - просто часто бывает удобно в прокладке back-end'а, равно как и front-end'а организовать загрузку базовых функций, конфигурации и т.п.

Как мне кажется всё дело в стиле программирования - кто-то делает всё через одну прокладку, кто-то нет.

Но согласитесь, что на вопрос о том, как защитить файлы back-end'а от прямого доступа я всё-таки ответил ;)
 

Фанат

oncle terrible
Команда форума
В общем-то разницы никакой
для автора вопроса разница принципиальная.
поскольку он не различает файлы, доступные только серверу и файлы, доступные клиенту.
Именно этой разницы он не понимает и именно поэтому вопрос изначально идиотский.
как защитить файлы back-end'а от прямого доступа я всё-таки ответил
ага.
только смысла в этой защите не больше, чем в защите файлов js, каковую ты назвал глупостью.
в общем, ты доказал, что сам дурак.
так что, на меня больше не пеняй.
 

дымчик

Новичок
Автор оригинала: Фанат
ага.
только смысла в этой защите не больше, чем в защите файлов js, каковую ты назвал глупостью.
в общем, ты доказал, что сам дурак.
так что, на меня больше не пеняй.
А я и не стремился доказать, что файлы доступные клиенту будут полностью защищены от доступа, я лишь ответил, каким образом можно ограничить прямой вызов каждого файла.

P.S. И зачем опять опускаться до уровня оскорблений?

Ладно, дискуссию можно видимо закрыть ;)
 

Фанат

oncle terrible
Команда форума
а где ты здесь видишь оскорбления?
я где-то сказал неправду? или кого-то унизил?
 

дымчик

Новичок
Автор оригинала: Фанат
а где ты здесь видишь оскорбления?
я где-то сказал неправду? или кого-то унизил?
Если Вы считаете, что я в чем-то не прав, можно было так и написать, вместо фразы "в общем, ты доказал, что сам дурак."

Ладно, вопрос в общем-то исчерпан, так что заканчиваем дискуссию
 

Яро

бард-скальд
Слушайте, само название темы, так и просится в "PHP & ЮМОР". И саму тему туда же. Ахренеть сколько свободного времени у людей.
 

denver

?>Скриптер
на правах брейншторминга :)
Реализовать защиту (понятно что от лоха) можно, например, ставя яваскриптом куку на 1 сек а затем уже вызывать XMLHTTPRequestом серверный скрипт который перво наперво проверяет наличие куки. Правда от продвинутых это вряд ли защитит, но обычный посетитель скорее и не догадается в чём дело ;)

-~{}~ 14.11.06 01:28:

Способ 2. наверное самый действенный: посылать заголовки через HTTPXMLRequest.setRequestHeader(), тут уже явно с помощью браузера не откроешь, получается что либо из-под яваскрипта HTTPXMLRequestом либо только уж курлом, что уже не так просто даже для продвинутых пэхапэшников :)
 
Сверху