【问题标题】:Calling a Perl program from PHP and printing the output从 PHP 调用 Perl 程序并打印输出
【发布时间】:2017-05-09 09:10:31
【问题描述】:

对于一个学校项目,我想尝试扫描网站以查找漏洞,并在页面上显示响应。

为此,我正在尝试使用 Uniscan。

我尝试了很多方法来获得任何响应,但都没有成功。

这就是我现在拥有的:

   <?php
echo '<pre>';

// Outputs all the result of shellcommand "ls", and returns
// the last output line into $last_line. Stores the return value
// of the shell command in $retval.
$last_line = system('perl uniscan.pl -u https://domain.nl/ -qweds;ls', $ret$

// Printing additional info
echo '</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
?>

这是响应,你唯一看到的是'ls'命令的响应。

我希望有人可以帮助我。

【问题讨论】:

  • 那你为什么要跑ls呢?
  • 只是看看我是否得到任何回应
  • 那么你期待什么呢?
  • system 为您提供最后执行的命令的输出,即ls
  • 我想得到命令 perl uniscan.pl -u domain.nl -qweds 的响应;

标签: php perl system


【解决方案1】:

我认为您从http://php.net/manual/en/function.system.php 复制的代码很糟糕。

此外,您的代码还有语法错误。您将$ret 传递给系统,但尝试打印$retval。右括号也不见了。

试试这个:

$last_line = system('/usr/bin/perl uniscan.pl -u https://domain.nl/ -qweds', $retval);

请注意,我提供了 perl 解释器的绝对路径。

【讨论】:

  • 好建议,但我建议不要为 perl 推荐绝对路径,除非您知道它可以在 OP 的操作系统中工作。 Perl 并不总是位于/usr/bin
  • 仍然不工作:/这是他回应我得到:输出的最后一行:返回值:13
【解决方案2】:

问题在于 www-data 用户没有运行该脚本的权限。

所以当我在 sudoers 文件中这样给他时:

www-data ALL = NOPASSWD: /var/www/html/Uniscan/uniscan.pl

一切都很完美!

【讨论】:

  • 好。考虑接受您的回答,这样问题就不会出现在unanswered 列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2011-03-12
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多