2011-09-28 4 views
4

Perlで書かれたサービスをlocalhost HTTPリクエストに公開したいと思います。私はApacheの設定を変更したくありません。 Perl CGI HTTPリクエストがlocalhostから発信されているかどうかを確認するには?perl cgiリクエストがlocalhostから発信されているかどうかをチェックする方法

この呼び出しが仮想ホストなどを介して行われたとしても、このチェックを成功させたいと思います。 https://www.myserivce.com/hidden/service.plは、www.myserivce.comの内部から呼び出しが行われたことを前提にしています。

+0

あなたがこれを達成しようとしたときに遭遇した問題は説明していません。特に、Perlスクリプトがこれをやめるのを止めている瞬間が何であるか分かりません。 –

+0

問題は、remote_addr()が "127.0.0.1"を返すことがあり、時には他のいくつかのアドレスを返すことがあることです。 – agsamek

+0

これらの結果の例とそれらを取得するコードを見てみましょう。 –

答えて

0

に要求を行っている場合を除き、これは、それを行うための唯一の方法であると怖い:私はそれを考えていない

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; 

をすべてのケースをカバーしていますが、私の設定で動作するようです。誰かが一般的な解決策を知っているなら、ここに提出してください。

10

REMOTE_ADDRなどですが、認証ロジックをアプリケーションに組み込むため、それはやりにくい方法です。

代わりに、bind a stand-alone Web server to local interface onlyオペレーティングシステムのIP /ネットワーキングスタックは、外部からの要求がサーバーに到達できないことを保証します。

+0

REMOTE_ADDRで何を確認すればよいですか?それは127.0.0.1を返しますが、インタフェースのIPを返します(私はWebサーバを起動するマシンを制御できません) – agsamek

+1

ローカルホストのIPアドレス(127.0.0.0/8と:: 1/128では、 Net :: CIDR :: Lite](http://p3rl.org/Net::CIDR::Lite)があなたを支援します)またはインターフェイスのアドレス。テストが失敗した場合は、要求を拒否します。 – daxim

+0

動作しません - 要求がlocalhostから送られたとしても、パブリック194.xx.xx.xxアドレスを取得します。 – agsamek

1

/etc/hostsファイルにmyservice.comとip 127.0.0.1というファイルを書き込むと、ローカルホストからサイトへのすべてのリクエストのアドレスはREMOTE_ADDRになり、127.0.0.1に設定されます。

私は次のコードを使用しているあなたは127.0.0.1/hidden/service.pl代わりのmyservice.com/hidden/service.pl

関連する問題