Как проверить, исходит ли Perl CGI запрос от localhost - PullRequest
4 голосов
/ 28 сентября 2011

Я хотел бы предоставить сервис, написанный на Perl, локальным HTTP-запросам.Я не хочу изменять конфигурацию Apache.Как проверить, исходит ли Perl CGI HTTP-запрос от localhost?

Я хочу, чтобы эта проверка прошла успешно, даже если этот вызов выполняется через виртуальный хост, например.https://www.myserivce.com/hidden/service.pl с учетом того, что звонок осуществляется изнутри www.myserivce.com.

Ответы [ 3 ]

10 голосов
/ 28 сентября 2011

REMOTE_ADDR , но это глупый способ сделать это, потому что вы помещаете логику аутентификации в приложение.

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

1 голос
/ 09 октября 2011

Я думаю, что если вы добавите в файл /etc/hosts запись с myservice.com и ip 127.0.0.1, тогда все запросы от localhost на ваш сайт будут иметь REMOTE_ADDR равным 127.0.0.1.

Боюсь, что это единственный способ сделать это, если только вы не делаете запросы к 127.0.0.1/hidden/service.pl вместо myservice.com/hidden/service.pl

0 голосов
/ 11 октября 2011

Я использовал следующий код:

my $server_addr = inet_ntoa(scalar gethostbyname(hostname() || 'localhost'));
my $call_addr = $query->remote_addr();
die unless $call_addr eq "127.0.0.1" || $call_addr eq $server_addr;

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

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