[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита скрипта от исполнения
Daver
Привет.

При создании проекта (php/mysql) использую ajax (на JQuery). Скрипты для ajax лежат в папке /ajax/ и обращение к ним из кода страницы выглядит так:

$.ajax({
url: '/ajax/get_data.php',
type: "get",
data: {param:'hello'},
success: function(data)
{
//... something
},
});


хотелось бы запретить обращения через строку браузера к скрипту "get_data.php" вида: http://домен.ру/ajax/get_data.php?param=buy
и обращения из скриптов не являющихся скриптами данного сайта

но чтобы сам сайт мог обращаться к этим скриптам.
Какие в этом случае есть варианты реализации?

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

Спасибо.



Спустя 5 минут, 47 секунд (29.09.2011 - 23:19) Winston написал(а):
В index.php напиши
define('EXEC', true);

А в get_data.php напиши в самом начале
defined('EXEC') or die('Прямой доступ запрещен !');


Спустя 11 минут, 22 секунды (29.09.2011 - 23:30) Daver написал(а):
В index.php такое написано, но проверка в get_data.php не проходит, т.к. скрипт get_data.php вызван не из скрипта, а через js и поэтому get_data.php не знает о том, что было в index.php

В get_data.php даже приходится еще раз к mysql подключаться...

Подскажите, если что не так (может настройку где поменять)

Спустя 2 минуты, 31 секунда (29.09.2011 - 23:33) Игорь_Vasinsky написал(а):
запрети доступ к папке /ajax/

Спустя 1 час, 11 минут, 56 секунд (30.09.2011 - 00:45) m4a1fox написал(а):
Можно .htaccess положить в папку со строкой deny for all кажеться!

Спустя 4 минуты, 55 секунд (30.09.2011 - 00:50) caballero написал(а):
Очередная жертва моды на ajax - мои соболезнования


сомневаюсь что скрипт можно закрыть
раз к нему обращается браузер то можно таи же браузером вызвать его из адресной строки

а зачем вообще закрывать доступ? вы ж не закрываете доступ к остальным php файлам
файл для ответа аяксу ничем не отличается от других



Спустя 13 минут, 13 секунд (30.09.2011 - 01:03) m4a1fox написал(а):
caballero
Цитата
Очередная жертва моды на ajax - мои соболезнования

А обоснование?

Спустя 2 минуты, 39 секунд (30.09.2011 - 01:06) caballero написал(а):
Цитата
А обоснование?


Этот пост.

Спустя 2 минуты, 5 секунд (30.09.2011 - 01:08) m4a1fox написал(а):
Всмысле? Человек спросил как скрипты от внешнего запроса закрыть? по моему нормально это!

Спустя 10 минут, 53 секунды (30.09.2011 - 01:19) Игорь_Vasinsky написал(а):
если ты их грузишь аяксом, значит они у тя ни где ни светяться.
Значитдостаточно в htaccess запретить листинг папки ajax

Спустя 1 минута, 57 секунд (30.09.2011 - 01:21) Winston написал(а):
Цитата (Игорь_Vasinsky @ 30.09.2011 - 01:19)
если ты их грузишь аяксом, значит они у тя ни где ни светяться

Как это ?
А когда ты указываешь имя файла которому передать данные ? smile.gif

Спустя 3 минуты, 19 секунд (30.09.2011 - 01:24) redreem написал(а):
я делал так:
есть некий шлюз - php-файл, доступ к которому извне есть. а сам этот файл уже берет и отдает результаты из нужного скрипта, доступа к которому извне нет. шлюзу передается имя скрипта как параметр.

Спустя 2 минуты, 48 секунд (30.09.2011 - 01:27) m4a1fox написал(а):
Winston прав. Сам такое начал юзать! Запрос идет через Ajax к php файлу! А этот php никуда не прилипает, он как бы сам по себе! Его нельзя инклюдить нельзя ни как подключить! Но через Ajax запрос можно отправить! Вот! Нужно deny for all! Наверно!

Спустя 4 минуты, 49 секунд (30.09.2011 - 01:31) bodja написал(а):
Цитата
Его нельзя инклюдить нельзя ни как подключить!


Ну вообщето можно biggrin.gif

ТС хочет того чего нет,серверу и скрипту побоку,запрос это от браузера или от аякса.
Я так понял он хочет закрыть скрипт от браузера и открыть для аякса. biggrin.gif

Спустя 36 минут, 31 секунда (30.09.2011 - 02:08) caballero написал(а):
Запрос аяксом - точно такой же GET или POST запрос от браузера. Закрыть нельзя никак.
Нужно устранить саму проблему почему с какого то перепугу понадобилось закрывать вызов файла по аяксу в то время как с вызовами других файлов проблем нет.




Спустя 5 часов, 39 минут, 45 секунд (30.09.2011 - 07:48) linker написал(а):
Цитата (redreem @ 30.09.2011 - 01:24)
я делал так:
есть некий шлюз - php-файл, доступ к которому извне есть. а сам этот файл уже берет и отдает результаты из нужного скрипта, доступа к которому извне нет. шлюзу передается имя скрипта как параметр.

Ты счастливчик, что твой проект ещё не сломали.

Действительно, нафига закрывать доступ.

Спустя 2 часа, 44 минуты, 45 секунд (30.09.2011 - 10:32) caballero написал(а):
Цитата
я делал так:
есть некий шлюз - php-файл, доступ к которому извне есть. а сам этот файл уже берет и отдает результаты из нужного скрипта, доступа к которому извне нет. шлюзу передается имя скрипта как параметр.

а чем смысл - все равно делается внешний запрос и возвращаются данные
браузеру все равно какие там приседания на сервере

Спустя 5 минут, 53 секунды (30.09.2011 - 10:38) redreem написал(а):
caballero, смысл в том, что аяксом порой надо тянуть какую-то специфическую инфу, из какого-нибудь модуля для генерации которой нет смысла активировать весь "двиг". вот эта схемка мне и дает возможность обращаться к нужной инфе. так сказать "лайт" версия двига.

Спустя 8 минут, 32 секунды (30.09.2011 - 10:47) caballero написал(а):
Цитата
смысл в том, что аяксом порой надо тянуть какую-то специфическую инфу, из какого-нибудь модуля для генерации которой нет смысла активировать весь "двиг". вот эта схемка мне и дает возможность обращаться к нужной инфе. так сказать "лайт" версия двига.


Инфа либо требует защиты либо нет. Вызов через аякс или через index.php никакого отличия не имеет
Конечно если ты грузишь страницу а в ней 5 раз ходишь аяксом то тебе надо подымать весь двиг еще 5 раз.

Лишнее доказательство того что глупо использовать аякс для бизнес-логики.

Спустя 3 минуты, 45 секунд (30.09.2011 - 10:51) caballero написал(а):
На сом деле если речь идет об авторизации нужно сунуть в сессию еще одну переменную с идентификатором пользователя и проверять жто при вызове аяксом

Спустя 7 минут (30.09.2011 - 10:58) redreem написал(а):
есть табличка категорий: id,name,img,description - к примеру. неймы категорий вывалены клиенту. ткнув в нейм клиент должен получить img и description. т.е. нужно просто взять из базы 2 поля и отдать клиенту. сразу прогружать все это ему смысла нет - много весит. вот в таком случае я делаю по своей схеме маленький скриптик на 4 строчки и он отдает ажаксу. двиг не грузится, доступа к скрипту извне нет. все довольны.

Спустя 32 минуты, 8 секунд (30.09.2011 - 11:30) caballero написал(а):
так что тут защищать? картинку и дескрипшен? Ну если уж надо то сделай как я выше написал

Спустя 52 минуты, 5 секунд (30.09.2011 - 12:22) redreem написал(а):
тут защищать доступ к базе.



Спустя 34 секунды redreem написал(а):
мы видимо на разных языках разговариваем. забей.

Спустя 2 часа, 4 минуты, 33 секунды (30.09.2011 - 14:26) caballero написал(а):
так объясняй на понятном языке. при чем тут доступ к базе ты что пароль в параметрах к вызову аяксом передаешь?

Спустя 2 часа, 48 минут, 2 секунды (30.09.2011 - 17:14) Guest написал(а):
Можно сгенерировать код привязанный к параметрам юзера/его браузера и передавать его на странице в яваскрипте. Этот код будет уходить назад к серверу через ajax запрос и если он верный, то исполняй скрипт на ответ.
Можно передавать не только код, но и время генерации страницы, зашифровав его по алгоритму с обратимым шифрованием. А сервер будет на своей стороне проверять его на попадание в интервал (например 1 час разницы и не больше).

Спустя 7 минут, 42 секунды (30.09.2011 - 17:22) caballero написал(а):
И что помешает в течение часа дернуть страницу с тем же кодом посмотрев как это аякс делает

Здесь нет проблеммы с защитой. Проблемма одна - ТС запутался в трех состнах и не может объяснить чего хочет.


Спустя 3 дня, 3 часа, 43 минуты, 36 секунд (3.10.2011 - 21:06) Daver написал(а):
Проблема пока не решена. Альтернативного варианта не найдено.

Цитата (Игорь_Vasinsky @ 29.09.2011 - 20:33)
запрети доступ к папке /ajax/

каким образом? если через .htaccess, то см. ниже.

Цитата (m4a1fox @ 29.09.2011 - 21:45)
Можно .htaccess положить в папку со строкой deny for all кажеться!

в этом случае запрещается любой вызов вообще

Цитата (caballero @ 29.09.2011 - 23:08)
Запрос аяксом - точно такой же GET или POST запрос от браузера. Закрыть нельзя никак.
Нужно устранить саму проблему почему с какого то перепугу понадобилось закрывать вызов файла по аяксу в то время как с вызовами других файлов проблем нет.

наверное самый полезный пост) я уже начал задумываться, а нужно ли оно вообще...

Но вовремя вспомнил, зачем это нужно:
аякс работает в корпоративной системе, вход и просмотр данных в которой возможен только после авторизации. Аяксовый скрипт, например, выводит данные по сотруднику с номером id, поэтому если скрипт getData.php просто вызвать с параметром id через строку браузера или сторонним скриптом post-запросом, то можно получить эти данные не авторизованным, что, естественно неправильно!

Напрашивается вариант решения проблемы через проверку соответствующей session или cookie (в getData.php), но вроде бы их можно подделать (так ведь?)...

Спустя 5 дней, 1 час, 9 минут, 24 секунды (8.10.2011 - 22:15) andrey888 написал(а):
Тыгды конеш делай сессию а в файле с аджаксом делай проверку перед тем как передавать данные аджаксу , что нить вроде
if(isset($_SESSION['id']) && $_SESSION['id']=='blabla'){ here goes ajax... }else{ die('You are not authorized');}
Сессию подделать очень сложно , куки намного легче насколько я знаю . Если не прав поправте ...

Спустя 1 месяц, 3 дня, 18 часов, 27 минут, 36 секунд (12.11.2011 - 16:43) Гость_Dre написал(а):
Зачем писать весь этот бред? Если до вас не дошло? Показать всем какие вы идиоты? Это и так видно.
Человек спросил, как запретить из вне доступ к аякс файлу
можно создать конечно константу, и проверить в аякс обработчике существует ли она? Но тогда скрип не будет работать, не будет обрабатывать запросы.
Тоже столкнулся с такой ситуацией и пока не вижу выхода...
Быстрый ответ:

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