【问题标题】:Perl CGI Changes Not Being Reflected in BrowserPerl CGI 更改未反映在浏览器中
【发布时间】:2011-11-12 03:49:44
【问题描述】:

我是 Perl 脚本的新手,遇到了一些麻烦。我有一个将一些数据传输到 CGI 脚本的 HTML 表单。但是,它似乎正在使用最旧版本的 CGI 脚本而不是最新版本。可能是因为下面的 perl 脚本中有错误吗?我尝试使用调试器,但我不知道如何使用它来执行我的脚本,更不用说从命令行传递我需要的参数了。 感谢您的帮助!

#!/usr/bin/perl

use CGI;
use CGI::Carp qw(fatalsToBrowser);
$q = new CGI;

print $q->header;
    $q->start_html('Finger User');
    $q->h1('Finger User');
print "<pre>";

$user = $q->param("user");
print `/usr/bin/finger/ -s $user~`;

print "</pre>";
print $q->end_html;

【问题讨论】:

  • 在命令行中运行你的脚本,看看会发生什么。
  • 是的,我想,我不清楚这是我试图做的,但我不能这样做,因为我无法将用户参数传递给它。
  • @tpar44:是的,你可以,见perldoc.perl.org/CGI.html#DEBUGGING
  • 附言。由于您没有验证user 参数,因此您的脚本存在巨大 安全漏洞。 (想想如果我传入“用户名”nobody; rm -rf .; 会发生什么。)我建议只允许匹配/^[a-z][-a-z0-9]*$/i 的用户名。 (正则表达式复制自this question。)
  • 是的,这就是我得到剧本的那本书的意义所在。不过我想尝试一下,这样我就可以让它更安全,而不是相信他们的话。

标签: perl debugging cgi forms


【解决方案1】:

改变';'在这些行中的',':

print $q->header,
    $q->start_html('Finger User'),
    $q->h1('Finger User');

并在末尾丢失'/'

/usr/bin/finger

【讨论】:

  • 谢谢你的工作,你知道为什么它不能从浏览器工作吗?它可以从命令行工作,但不能从浏览器工作。即使进行了更改,它仍会恢复到旧版本。
  • 为什么更改没有显示在浏览器中?不知道,取决于您使用的服务器,但也可能是缓存问题...
猜你喜欢
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2016-09-20
  • 2017-07-22
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多