【问题标题】:How do I securely get data transferred from C to Perl?如何安全地将数据从 C 传输到 Perl?
【发布时间】:2023-03-06 18:00:01
【问题描述】:

假设我有一个 perl 程序,例如:

my $c = "MyDataToCProg";
open my $h, '-|', 'myCProg', "$c";
my @result = <$h>;
close $h;
print "Result: " . $result[0] . "\n";

现在,myCProg 是一个用 gcc 编译的程序。 C 程序的输出将是一个 printf 语句,它最终会出现在 perl 程序的 $result[0] 变量中。

有没有比使用 printf 打印更好的方法从 C 程序中提取输出?例如,任何人都可以从命令行运行“myCProg”并查看输出。我希望仅在 perl 程序中看到输出,如果有人在命令行运行程序,则不可见。

有人知道怎么做吗?

抱歉,我手边没有 C 程序,但是任何有 printf 语句(甚至是简单的 Hello World)并接受参数(也许打印“Hello [yourname]”的东西都适用于这个例子。

【问题讨论】:

  • 或更改myCProg 的权限,以便只有有权执行它的人才能执行。
  • @thrig,您必须将 Perl 脚本设置为 set-uid 脚本才能使用。
  • 我完全看不出 perl 脚本上的 setuid 与控制谁有权执行 myCProg 有什么关系,例如chmod go-rwx myCProg 将执行(并因此查看输出)仅限于所有者。
  • @thrig 1. 创建拥有myPerlProgmyCProg 的用户。 2.chmod 700 myCProg。 3. 设置myPerlProg setuid,让其他用户可以执行myPerlProg,也可以执行myCProg(但不能直接执行myCProg)。

标签: c perl variables


【解决方案1】:

您可以加密通信。您可以通过 fd 3 进行通信。您可以创建一个套接字并让 C 程序连接到该套接字。但无论你做什么,其他人也可以做。

想到的唯一解决方案涉及文件权限:删除访问 C 程序的能力,并使 Perl 程序成为其所有者可以访问 C 程序的 set-uid 脚本。详细点,

  1. 创建一个拥有此应用程序的用户。我们就叫它myProg吧。
  2. chown myProg myCProg myPerlProg
  3. chmod 700 myCProg
  4. chmod 4755 myPerlProg

【讨论】:

  • 除了想知道为什么 setuid 被提议作为这个问题的解决方案之外(也许发帖人可以澄清“任何人也可以运行”的确切含义?),我可以指出 perl 中取消了对 suidperl 的支持五年前 (perldoc perl5120delta)。因此,以上当然不是一个有效的解决方案。
  • @thrig,也许你应该阅读你自己的参考资料,因为你完全错了。从 5.12 中删除的是对不支持它们的系统的 setuid 脚本的模拟。 Setuid Perl 脚本仍然可以在支持 setuid 脚本的系统上运行。
猜你喜欢
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2013-10-19
  • 2013-07-19
  • 1970-01-01
  • 2015-04-07
相关资源
最近更新 更多