【问题标题】:System() call from a cgi script来自 cgi 脚本的 System() 调用
【发布时间】:2012-12-09 06:27:53
【问题描述】:

对于我的任务,我有一个 cgi 脚本(C 程序)和一个我想使用 system() 从脚本中调用的程序。在 cgi-bin/ 和 chmodded 到 755。我知道我在我的 cgi 程序中进行的系统调用是有效的(路径正确,命令正确......)但调用总是失败。我在执行 cgi-script 期间检查了工作目录,它是正确的。如果我在 bash 中运行相同的调用,它可以工作,但在我的菜单程序中它不起作用。

这很奇怪,因为当我在我的计算机上运行服务器时系统调用正在工作(使用 python -m CGIHTTPServer),但是当我将网站放在我大学的服务器上时,除了系统()调用。所以看起来它与权限有关。

这是有问题的电话,如果有帮助的话:

    sprintf(systemCall, "passweb -add %s", username);
    exitStatus = system(systemCall); //always 1

【问题讨论】:

  • 查看systemCall 的定义会有所帮助,但我觉得您可能需要改为使用systemCall = sprintf(systemCall, "passweb -add %s", username);
  • 作为旁注:这可能是一个明显的安全风险。 IE。如果我写了$(rm -r .) 之类的用户名,这将删除当前目录中的所有内容(或者我插入一个更糟糕的脚本)。这可能是您大学的计算机不允许这样做的原因。
  • @BradMace char systemCall[150] = {0};
  • @YetAnotherGeek 这确实有道理,但它是分配规范的一部分..

标签: html web cgi


【解决方案1】:

显然,我必须在可执行路径前添加一个“./”。

像这样:sprintf(systemCall, "./passweb -add %s", username);

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2012-07-24
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多