2016-02-06 2 views
0

У меня есть куча вспомогательных файлов и парсеров, некоторые из которых вызывается через AJAX. Я понимаю, что я не могу использовать .htaccess, чтобы заблокировать доступ к этим файлам, так как он сломает AJAX. Поэтому мой вопрос: действительно ли существует какой-либо вред или опасность для прямого доступа к этим файлам? Если да, как мне разрешить AJAX, но блокировать доступ пользователей к ним?Есть ли опасность для прямого доступа к файлам PHP?

ответ

1

Вы можете использовать значение PHP $_SERVER для проверки AJAX запросов, но если пользователь использовать spoofing его не работает и если у вас есть идеальные валидации в вашем PHP скриптах не беспокоиться о прямом доступе

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) 
    { 
     //Your response 
    } else { 

     //I hate users redirect 
    } 
+0

Это работает красиво - спасибо. Подтверждением вы имеете в виду санитаризацию ввода POST и т. Д.? – daninthemix

0

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

if (realpath(__FILE__) == realpath($_SERVER['SCRIPT_FILENAME'])) { 
    header('HTTP/1.0 403 Forbidden', TRUE, 403); 
    die(header('location:/403/error/Forbidden'));/* change to your error page url etc */ 
} 
+0

Хорошая идея, но запросы AJAX, похоже, попадают в этот оператор IF. – daninthemix

+0

ok - работает для меня, но тогда моя настройка, возможно, немного отличается. извините - попробуйте идею @kali dass - возможно, в сочетании с вышесказанным? – RamRaider

+0

Да, его решение работает и легко. Спасибо за ваш вклад! – daninthemix

1

Ajax является пользователи, обращающиеся их, только контролируемым образом.

Если к сценариям/файлам можно получить доступ из Ajax, вы не можете запретить кому-либо обращаться к ним напрямую. Вы можете поставить контрольно-пропускные пункты, например, искать определенные заголовки, но люди могут и найдут способ обойти это.

Там нет никакого вреда или опасности в предоставлении прямого доступа к ним до тех пор, как ваш код безопасным :)

Например, если вы собираетесь иметь Ajax сделать вызов, как POST /message/delete?id=1, вы бы лучше сделать убедитесь, что у вызывающего есть разрешение на удаление сообщения с идентификатором 1.

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