【发布时间】:2026-01-26 02:40:02
【问题描述】:
我创建了这个 CGI perl 脚本,它调用一个 shell 脚本 (lookup.sh) 来查询 Oracle 数据库,它使用传递给 shell 脚本的第一个参数作为用户名来交叉引用组成员身份。
shell 脚本返回由新行分隔的所有组。我将这个 Perl 脚本作为 CGI 操作传递给一个非常简单的 html 表单,该表单将 USER 参数传递给 perl 脚本,然后 perl 脚本运行 shell 脚本并将原始 html 表单中的用户名作为第一个 arg 传递,然后应该存储在名为@outp 的数组中返回值。
我的测试显示一切正常,但是当我从浏览器运行它时,@outp 数组每次都显示为空白。所有其他测试的数组都包含正确的数据,我唯一能做的假设是 HTML 是在数组填充反引号命令的数据之前生成的。有人可以插话吗?
HTML:
<FORM action="/cgi-bin/test.cgi" method="POST">
USER: <input type="text" name="USER"> <br>
<input type="submit" value="Submit">
</FORM>
壳牌:
#!/bin/bash
sqlplus -s DB_USER/DB_PASS@//DB_HOST:1521/JIRA_RW <<< "SELECT GROUP_NAME from jira_db.membershipbase where USER_NAME='$1';"
Perl:
#!/usr/bin/perl
use CGI qw(:standard);
$data = param('USER') || '<i>(No input)</i>';
@outp = `/bin/lookup.sh $data`;
print <<END;
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>Jira User Query</title>
<h1>Group Membership for $data @outp</h1>
<p>print @outp</p>
END
是的,我知道这是一项彻头彻尾的黑客工作。
【问题讨论】:
-
尝试通过调试定位问题,即。
@outp = '/bin/lookup.sh hardcoded_user';并检查网络服务器日志。