如何检查perl cgi请求是否来自localhost

时间:2011-09-28 10:45:56

标签: perl http cgi

我想将用Perl编写的服务公开给localhost HTTP请求。我不想修改Apache配置。如何检查Perl CGI HTTP请求是否来自localhost?

即使通过虚拟主机进行此调用,我也希望此检查成功。 https://www.myserivce.com/hidden/service.pl鉴于此呼叫是从www.myserivce.com内部发出的。

3 个答案:

答案 0 :(得分:10)

REMOTE_ADDR,但这是一种愚蠢的方法,因为你将认证逻辑放在应用程序中。

相反,bind a stand-alone Web server to local interface only,因此操作系统的IP /网络堆栈保证外部请求不会到达服务器。

答案 1 :(得分:1)

我认为如果您在/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提出请求

答案 2 :(得分: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;

我认为它不包括所有情况,但似乎与我的设置一起使用。如果有人知道通用解决方案,请在此处提交。