我想将用Perl编写的服务公开给localhost HTTP请求。我不想修改Apache配置。如何检查Perl CGI HTTP请求是否来自localhost?
即使通过虚拟主机进行此调用,我也希望此检查成功。 https://www.myserivce.com/hidden/service.pl鉴于此呼叫是从www.myserivce.com内部发出的。
答案 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;
我认为它不包括所有情况,但似乎与我的设置一起使用。如果有人知道通用解决方案,请在此处提交。