Как закрыть доступ к скриптам php из адресной строки?

upd: Я хочу предостеречь всех желающих ответить на этот вопрос. Мне неожиданно "повезло" и мой вопрос модерируется FanatPhp, активным борцом за справедливость и праведность в php! Во избежание получения негативных комментариев в адрес своей личности от FanatPhp прошу не пытаться отвечать на этот вопрос. Более конкретно можно посмотреть в комментариях...
FanatPhp отдельное спасибо за модерирование ответов на мой вопрос. Возможно у Вас и есть какие-то знания по php, но это не заметно. Т.к. все Ваши замечания сводятся к комментированию личностей отвечающих людей, а не к конкретным указаниям что не так в их ответе. Было бы гораздо полезнее если бы Вы комментировали решения людей, а не их личности. Вместо "ты дурак и ответ твой тупой" , а "Ваше РЕШЕНИЕ не верно, по следующим причинам: ...." .
Впрочем, вопрос более не актуален. Удалять пост не буду, хочу оставить для примера ваши комментарии они очень характеризуют вашу личность.
======================================================================================

Доброго времени суток!

Форма на сайте отправляется по средством ajax скриптом php/rest.php Как запретить запуск скрипта из адресной строки sitename.com/php/rest.php, а разрешить запуск только из ajax.

Пробовал переделать конфиг nginx ставил запрет запуска, даже в приоритетности правил ставил первым ничего не помогает.

Вот мой конфиг:

server {
            listen X.X.X.X:80;
            server_name sitename.com;
            access_log /home/username/logs/nginx_access.log;
            error_log /home/username/logs/nginx_error.log;
            root /home/username/www;
            client_max_body_size 256M;

            location ~ /php/(.+)\.php$ {
                deny all;
            }
            location / {
                index index.html;
                if (!-e $request_filename) {
                    rewrite ^/(.*)$ /index.html?q=$1 last;
                }
            location ~ \.php$ {
                fastcgi_pass unix:/var/run/sitename.sock;
                fastcgi_index  form.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_read_timeout 120;
                include        fastcgi_params;
            }
            location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
            }
          }


Даже пробовал поставить первым:
location = /php/rest.php { 
    deny all;
 }
  • Вопрос задан
  • 4053 просмотра
Пригласить эксперта
Ответы на вопрос 5
FanatPHP
@FanatPHP
Чебуратор тега РНР
Как запретить запуск скрипта из адресной строки sitename.com/php/rest.php, а разрешить запуск только из ajax.

НИКАК
Читаем Как работает РНР, где он выполняется?, много думаем над осмысленностью такой постановки вопроса
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Добавить проверку по "токену", наличию заголовка HTTP_X_REQUESTED_WITH.
Ответ написан
Комментировать
@koigva
Хранить php-скрипты за пределами видимости веб-сервера.
Ответ написан
LestaD
@LestaD
Веб разработчик
После загрузки страницы, клиент получает определенный идентификатор. Назовем его token
При каждом запросе и обновлении страницы токен обновляется. К примеру так:
1. Пришел запрос, увеличить счетчик ajax-запросов
2. Сформировать $token = md5(sha1($user->name . SPECIFYSOLT . $user->ajax_count));
3. Отдать клиенту
Подделать запрос то, можно, но сложнее и только один (а можно использовать серию вида (запрос-ответ-запрос))
Также можно просто проверять наличие $_POST данных в файле /php/rest.php и всё.
Но если важные данные или нужна безопасность, то выше я написал один вариант.
Ответ написан
@akov
Или не счетчик, а microtime, чтобы не считать запросы:

$token = md5(sha1($user->uid .'SALT'. microtime(1)));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы