我想将用Perl编写的服务公开给本地主机HTTP请求。我不想修改Apache配置。如何检查Perl CGI HTTP请求是否源自本地主机?如何检查perl cgi请求是否来自本地主机
即使通过虚拟主机进行此调用,我也希望此检查成功,例如, https://www.myserivce.com/hidden/service.pl由于该电话是从www.myserivce.com内部进行的。
我想将用Perl编写的服务公开给本地主机HTTP请求。我不想修改Apache配置。如何检查Perl CGI HTTP请求是否源自本地主机?如何检查perl cgi请求是否来自本地主机
即使通过虚拟主机进行此调用,我也希望此检查成功,例如, https://www.myserivce.com/hidden/service.pl由于该电话是从www.myserivce.com内部进行的。
我用下面的代码:
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;
我不认为这涵盖所有情况,但似乎与我的设置一起工作。如果有人知道一个通用的解决方案,那么请在这里提交。
REMOTE_ADDR,但这是一种愚蠢的做法,因为您将验证逻辑放在应用程序中。
而是bind a stand-alone Web server to local interface only,因此操作系统的IP /网络堆栈保证没有来自外部的请求可以到达服务器。
我认为,如果你在/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
您尚未解释尝试完成此操作时遇到的问题。特别是,我不明白现在是什么阻止你的Perl脚本执行此操作。 –
问题是,remote_addr()有时会返回“127.0.0.1”,有时还会返回其他一些地址。 – agsamek
我们来看看这些结果的一些例子以及获取它们的代码。 –