如何安全地将数据从C传输到Perl?

如何安全地将数据从C传输到Perl?,c,perl,variables,C,Perl,Variables,假设我有一个perl程序,例如: my $c = "MyDataToCProg"; open my $h, '-|', 'myCProg', "$c"; my @result = <$h>; close $h; print "Result: " . $result[0] . "\n"; my$c=“MyDataToCProg”; 打开我的$h、-|、'myCProg'、“$c”; 我的@result=; 接近$h; 打印“结果:”$结果[0]。“\n”; 现在,myCProg是一

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

my $c = "MyDataToCProg";
open my $h, '-|', 'myCProg', "$c";
my @result = <$h>;
close $h;
print "Result: " . $result[0] . "\n";
my$c=“MyDataToCProg”;
打开我的$h、-|、'myCProg'、“$c”;
我的@result=;
接近$h;
打印“结果:”$结果[0]。“\n”;
现在,myCProg是一个用gcc编译的程序。C程序的输出将是一个printf语句,该语句将在perl程序的$result[0]变量中结束

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

有人知道怎么做吗


很抱歉,我手头没有C程序,但是任何有printf语句(即使是一个简单的Hello World)并带有参数的程序(可能会打印“Hello[yourname]”在这个例子中可以使用。

您可以加密通信。您可以通过fd 3进行通信。您可以创建一个套接字并让C程序连接到该套接字。但是您所做的任何事情都可以由其他人完成

想到的唯一解决方案涉及文件权限:删除访问C程序的能力,并使Perl程序成为一个拥有C程序访问权的set-uid脚本

  • 创建一个用户来拥有此应用程序。我们将其称为
    myProg
  • chown myProg myCProg myPerlProg
  • chmod 700 myCProg
  • chmod 4755 myPerlProg

  • 你可以加密通信。你可以通过FD3进行通信。你可以创建一个套接字并让C程序连接到该套接字。但是你所做的任何事情都可以由其他人完成

    想到的唯一解决方案涉及文件权限:删除访问C程序的能力,并使Perl程序成为一个拥有C程序访问权的set-uid脚本

  • 创建一个用户来拥有此应用程序。我们将其称为
    myProg
  • chown myProg myCProg myPerlProg
  • chmod 700 myCProg
  • chmod 4755 myPerlProg

  • ?或者更改
    myCProg
    上的权限,这样只有有权限执行它的人才能执行。@thrig,您必须将Perl脚本设置为set-uid脚本才能使用。我完全看不到Perl脚本上的setuid与控制谁有权执行
    myCProg
    ,例如
    chmod go rwx my>有什么关系CProg
    将执行限制(从而查看输出)仅限于所有者。@thrig 1.创建用户以拥有
    myPerlProg
    myCProg
    .2.
    chmod 700 myCProg
    .3.生成
    myPerlProg
    setuid,以便其他用户可以执行
    myPerlProg
    ,并且可以执行
    myCProg
    (但它们不能直接执行
    myCProg
    )。或者更改
    myCProg
    上的权限,这样只有有权限执行它的人才能执行。@thrig,您必须将Perl脚本设置为一个set-uid脚本,这样才有用。我完全看不到Perl脚本上的setuid与控制谁有权执行
    myCProg
    有什么关系,例如
    chmod go rwx myCProg
    将执行限制(从而查看输出)仅限于所有者。@thrig 1.创建用户以拥有
    myPerlProg
    myCProg
    .2.
    chmod 700 myCProg
    .3.生成
    myPerlProg
    setuid,以便其他用户可以执行
    myPerlProg
    ,并且可以执行
    myCProg
    (但是他们不能直接执行
    myCProg
    )。除了想知道为什么有人提出用setuid来解决这个问题(也许海报可以澄清“任何人都可以运行”的确切含义)之外,我可以指出,五年前perl中已经取消了对suidperl的支持(
    perldoc perl5120delta
    )。因此,上述方法肯定不是有效的解决方案。@thrig,也许你应该阅读你自己的参考资料,因为你完全错了。从5.12中删除的是针对不支持setuid脚本的系统的setuid脚本模拟。setuid Perl脚本仍然适用于支持setuid脚本的系统。此外,你还想知道为什么setuid是propo作为这个问题的解决方案(也许海报可以澄清“任何人都可以运行”的确切含义?),我可以指出,suidperl支持在五年前就从perl中消除了(
    perldoc perl5120delta
    )。因此,上述方法肯定不是有效的解决方案。@thrig,也许您应该阅读自己的参考资料,因为您完全错了。从5.12中删除的是针对不支持setuid脚本的系统的setuid脚本模拟。setuid Perl脚本仍然适用于支持setuid脚本的系统。