【发布时间】:2017-03-13 03:45:07
【问题描述】:
我是 cgi 和 Perl 的新手,但我正在尝试使用 perl 脚本显示网页的 ENV。我在 vhost1 目录中创建了一个 index.html 页面,该页面指向我的 cgi-bin 目录中的 .pl 页面。目录路径依次为/var/www/html/vhost1/index.html和/var/www/html/vhost1/cgi-bin/first.pl。 我的 index.html 代码如下
<html>
<head>
</head>
<body>
<h1>Hello World!</h1>
<a href = "cgi-bin/first.pl" target="_blank"> My First Perl Page</a>
</body>
</html>
我的 .pl 页面看起来像
#!usr/bin/perl
print "Content-type: text/html \n\n ";
print "Hello, Nate";
foreach $key (sort keys %ENV)
{
print "$key -> $ENV($key) <br>\n";
}
我正在使用 Centos7 来完成这个项目,我主页的 URL 路径是 http://131.183.223.173/vhost1/
我希望我的 ENV 结果显示在新标签中,而不是下载到我的计算机上。
【问题讨论】:
-
您需要告诉您的服务器将 .pl 文件(或 cgi-bin 目录中的所有文件)视为 CGI 脚本
-
另外,
#!usr/bin/perl应该是#!/usr/bin/perl -
最后,您应该始终使用
use strict; use warnings qw( all );。它会发现您的程序的主要和次要错误。 (不过,它不会发现您的 HTML 注入错误。) -
正如 ikegami 所指出的,#!usr/bin/perl 似乎是问题所在。
-
@SrihariKaranth:虽然
#!usr/bin/perl是这里的一个主要问题,但我很确定这不是导致这种行为的原因。 Web 服务器甚至没有尝试执行该程序。我从来没有见过这样配置的 Web 服务器,如果它不能成功执行 CGI 程序,它将返回源代码。这听起来像是一个重大的安全问题!