代码之家  ›  专栏  ›  技术社区  ›  Bart

php exec安全吗?

  •  10
  • Bart  · 技术社区  · 17 年前

    我试图让exec在Windows服务器上工作,并接收到错误消息“无法分叉”。在谷歌搜索了一点问题后,建议的解决方法似乎是授予iusr帐户对c:\windows\system32\cmd.exe的读取和执行权限。

    但那是一个主要的安全漏洞,对吧?安全吗?有没有其他方法可以执行[从PHP]服务器上的exe?

    2 回复  |  直到 17 年前
        1
  •  14
  •   MiffTheFox    17 年前

    它需要执行cmd.exe,因为当Windows PHP看到以下情况时:

    exec("foo -bar -baz");
    

    它称之为:

    cmd /c foo -bar -baz
    

    如果你让你的用户输入参数,这只是一个安全漏洞。也就是说,你不应该这样做:

    // DO NOT DO THIS!
    exec("foo -bar=" . $_GET['bar']);
    

    相反,您应该使用 escapeshellarg .

    // This is okay.  (Be sure foo.exe can handle unexpected input!)
    exec("foo -bar=" . escapeshellarg($_GET['bar']));
    
        2
  •  1
  •   Ken Keenan    17 年前

    您应该记住的一件事是,在Windows下创建进程会比在Unix类操作系统上产生更多的开销。如果您有大量用户,则重复调用 exec() 可能会使服务器陷入瘫痪。如果您预期服务器上的负载很重,那么您可能需要考虑让一个工作进程作为 Windows service

    推荐文章