Безопасность асинхронных запросов РНР

name_A_D

Нормальный Я)
Доброго времени суток.
Мне бы хотелось получить ответ на следующий вопрос:
Можно ли спрятать, или как то видоизменить ссылку, в js файлах, которые выполняют асинхронный запрос в таблицу mysql. Вот код:

PHP:
//объект xmlhttp уже создан

function функция(id) {
if(условие) {
document.getElementById('echoTitle').innerHTML = '<div align="center"><img src="ajax-loader.gif" width="48"
 height="48" alt="Подождите, идет загрузка." title="Подождите, идет загрузка." /></div>';
var sen = '.';
var linkpoisk = '../obr/ajaxall.php?q='+sen+'&type=all'; 
//вот эту ссылку надо видоизменить, или не дать 
//возможность просмотреть ее в js файлах	
//Это вообще как то возможно?

var xmlhttp = getXmlHttp();
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById('echoTitle').innerHTML=xmlhttp.responseText;
    }
  }  
xmlhttp.open('GET', linkpoisk, true);
xmlhttp.send(null); 
}
Заранее спасибо
 

Single

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

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

name_A_D

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

Ну тогда, меня интересуют альтернативные варианты исполнения? Буду только благодарен.
Или же вообще нет смысла прятать их в js если любой фаирбаг может все отследить?
Может Усложнить тип проверки в файлах обработчиках (ajaxall.php), тогда как? На что выполнять там проверку?
На введеные данные? - Проверка и так уже стоит, она и выводит обычным echo нужные ошибки.
Че то я запутался вообще.
 

name_A_D

Нормальный Я)
Ну как то же прячут прямые ссылки на файлы, а просматривать разрешают(например видео сервисы)?
Сокрытия прямых ссылок/фалов при помощи htaccess? Приблизительно по такой теории:
PHP:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://yousite.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.yousite.com/ [NC]
RewriteRule [^/]+.(js|JS)$ - [F]
RewriteRule [^/]+.(js|JS)$ http://www.yoursite.com/restricted.js [R,L]
Но почему то не работает.. Вообще ужасные ошибки вылазят..
 

fixxxer

К.О.
Партнер клуба
если ты не знаешь, как выдернуть напрямую видео с любого видеосервиса, тебе рано заниматься веб-разработкой, для начала надо изучить базовые технологии
 

name_A_D

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

fixxxer

К.О.
Партнер клуба
любопытные глаза откроют в developer tools вкладочку network и увидят там твой этот самый url.

проверка по рефереру не поможет - если не пускать с пустым реферером, ты отрежешь нормальных пользователей за фаерволами, режущими заголовок referer

способ с реферером используют только для защиты от хотлинкинга, по следующему алгоритму:
1) если referer не пуст
2) содержит корректный url
3) и имя хоста в этом url - не наше
тогда НЕ пускаем. в nginx для этого даже есть специальная директива конфига.

в случае с ajax запросом от полных нубов ты можешь защититься, проверяя X-Requested-With.
если не знаешь, как сделать это в .htaccess (я, скажем, апача сто лет не видел и вспоминать не желаю) - делай это в php коде

но, повторяю, это только от полных нубов. В ЛЮБОМ случае ты ДОЛЖЕН проверять ВСЕ запросы на корректность в своем коде. ajax запрос ничем не отличается от обычного http-запроса, и все, что применимо к обычным get/post-запросам, относится и сюда.
 

hell0w0rd

Продвинутый новичок
Да какая разница какая ссылка?
Это ровно такая же ссылка, как и любая на страничке... Ну на, спрячь ссылку http://google.com - что это даст-то?
Что найдут и откопают? Ну и пускай найдут и зайдут, и подменят заголовки и будет выглядеть как обычный ajax запрос и что с того-то? У тебя сервер и существует чтобы обрабатывать эти запросы, работать с базой и тому подобное.
Может тебя волнует что зайдя по адресу http://mysite.ru/post/delete/25 - сервер выполнит запрос на удаление 25 поста? Тогда это другой вопрос, надо идти смотреть что такое сессия + понять что такое csrf и вставлять в формы токен для защиты от нее.
 

name_A_D

Нормальный Я)
впринцепи ДА! Пользы хоть и не много, но зато, ка выше уже сказано, защитит от полных нубов.
Насколько я правильно понял, будет это примерно работать следующим образом:
Если файл ajaxall.php был запрошен при помощи js файла, то в ajaxall.php будет передан параметр
X-Requested-With: XMLHttpRequest, который проверяется в том же файле ajaxall.php.
Вопрос?
Все браезуры предают этот заголовок? - Насколько я вообще понял, это стандартная функция, но все же..
Извиняюсь за занудство...
 

craz

Нестандартное звание
Скрой ссылку за авторизацией, как можно вообще скрыться, к примеру, в квартире если дверь открыта настеж? Вопрос тупо на логику.
 

name_A_D

Нормальный Я)
Всем большое спасибо.
Решил просто добавить в файлах обработчика проверку на заголовок X-Requested-With: XMLHttpRequest,
Усилить проверку всех введеных данных в файлы обработчика.

И на сколько мне помниться: "Какой замок ты б не придумал, всегда найдется тот, кто сможет его открыть"
 

Single

пилот капсулы
Решил просто добавить в файлах обработчика проверку на заголовок X-Requested-With: XMLHttpRequest
если не сложно расскажи зачем это нужно?

Усилить проверку всех введеных данных в файлы обработчика
достаточно проверки на ожидаемый формат данных.
а "усилить" это как?
 

name_A_D

Нормальный Я)
если не сложно расскажи зачем это нужно?
К примеру неуч, вроде меня, захочет посмотреть что будет с файлом ajaxall.php, если менять GET запросы, А там я такой "БАЦ" и с проверкой на заголовки, которые не совпали - показываю ему 404 страницу)) И Неуч, в недоумении, обидевшись на меня уходит со страницы и тихо плачет в углу))))

достаточно проверки на ожидаемый формат данных.
а "усилить" это как?
Это и я пожалуй Опечатку сделал) Усилить - значит к всем моим проверкам на ожидаемые данные, добавить проверку на заголовки)
 

radioheaded

PHP нуб
К примеру неуч, вроде меня, захочет посмотреть что будет с файлом ajaxall.php, если менять GET запросы, А там я такой "БАЦ" и с проверкой на заголовки, которые не совпали - показываю ему 404 страницу)) И Неуч, в недоумении, обидевшись на меня уходит со страницы и тихо плачет в углу))))
Это не защита, а отмазка. Мол, мне не хочется нормально проверять все входные параметры, поэтому я тупо якобы сделаю защиту от прямых GET-запросов. Даже самый тупой неуч через минуту гугления найдет curl и параметр, позволяющий ему отсылать любые заголовки. Не надо обманывать других и себя. Напишите честно: я просто ленивый разработчик, ничего не хочу нормально делать.

Лучше приведите пример, при котором с вашим ajaxall.php случится что-то ужасное. Если вы такой найдете, значит вы знаете о потенциальных проблемах, решить которые мешает только лень или незнание. С первым мы не поможем, а вот со вторым вполне.
 

Single

пилот капсулы
что будет с файлом ajaxall.php, если менять GET запросы
наверное ничего не будет. нет?
не берем в расчет вероятность того что от определенных http запросов может быть удален файл ajaxall.php в ФС.

с проверкой на заголовки, которые не совпали - показываю ему 404 страницу
404? в случае "если менять GET запросы" то да
но что то мне подсказывает что речь идет о передаче не верных аргументов и в этом случае все же правильнее будет отдавать 400 заголовок

добавить проверку на заголовки
какие заголовки?
в чем заключается практическая ценность проверки заголовков?
 

name_A_D

Нормальный Я)
Ну какие параметры проверки входных данных я делаю:
PHP:
$q = trim($_GET['q']);
$q = htmlspecialchars ($q);
$q = addslashes($q);
$q2 = stlen($q);
if($q == '' || $q2 > 20 || $q2 < 2) {
Ошибка } else {
ok
}
Что может случиться?
Тут пожалуй вы правы, ничего сверх страшного. Но вот недостача знаний, как раз таки "Что именно может случиться" - меня и волнует!
 

name_A_D

Нормальный Я)
Single,
Практическая ценность... Ну судя по вышесказанным сообщениям наверное ни в чем.. Но все таки лишний раз не помешает.
Еще бы меня интересовало следующие:
Может ли пользователь какими-нибудь действиями получить список каталогов(папок) моего сайта, на которые нигде нету ссылок и поисковиками не индексируються?
 
Сверху