【问题标题】:Filter var for calling a shellscript with system on phpfilter_var 用于在 php 上调用带有系统的 shell 脚本
【发布时间】:2012-04-07 23:55:20
【问题描述】:

我需要过滤这些 var 以在 php 中调用系统并执行 shell 脚本。我需要使用什么 filter_var SANITIZE 宏来删除“;”或shell执行期间的问题?像不需要的字符..etc..etc

这是我的代码测试示例,现在我已经硬编码了用于测试的 var。谢谢!

$ragionesociale = $_GET["ragionesociale"]; /* Alphanumeric with spaces next trimmed*/
$api = $_GET["ragionesociale"]; /* Uri with space encoded*/
$sito = $_GET["sito"]; /* Uri with space encoded*/
$meta = $_GET["meta"]; /*Address, CF, a lot of things...*/
$tmp_dir = "tmp_app";


if(!filter_has_var(INPUT_GET, "ragionesociale") ||
   !filter_has_var(INPUT_GET, "sito") ||
   !filter_has_var(INPUT_GET, "meta") ||
   !filter_has_var(INPUT_GET, "api")
){  
 echo("Input type does not exist");
 exit();
}

 system("../configmyapp2.sh ".$ragionesociale." ".$api." ".$sito." ".$meta." ".$tmp_dir);

【问题讨论】:

    标签: php shell system filter-var


    【解决方案1】:

    您可能对escapeshellarg() 感兴趣。

    escapeshellarg() 在字符串周围添加单引号并引用/转义任何现有的单引号,从而允许您将字符串直接传递给 shell 函数并将其视为单个安全参数。此函数应用于将来自用户输入的单个参数转义到 shell 函数。 shell 函数包括 exec()、system() 和反引号运算符。

    【讨论】:

      【解决方案2】:

      http://php.net/manual/en/function.escapeshellarg.php

      通过这个传递你的命令行参数,你是安全的;)另外我建议你使用 exec() 而不是 system() 甚至是 shell_exec() 因为你将能够从你的脚本以及您可能想要使用的任何文本输出。

      【讨论】:

      • 如果我在我的 GET 变量上使用了 escapeshellarg 并且我放了一个 shell 命令,比如 ;echo ciao。外壳将执行回声!这还不够,我需要其他检查...有什么建议吗?
      • 然后看看它的表弟:php.net/manual/en/function.escapeshellcmd.php 通过这个传递你的整个命令行字符串 ;) 干杯
      【解决方案3】:

      如果这可以由其他用户触发,那么我不会采用这种方法。

      它非常危险,尤其是您的多个参数和清理规则。

      【讨论】:

        【解决方案4】:

        没有内置的净化过滤器可以做到这一点;但是,您可以使用 FILTER_CALLBACK 和 escapeshellarg 来伪造它,如下所示:

        $var = filter_var($input, FILTER_CALLBACK, array('options' => 'escapeshellarg'));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          • 2022-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-10
          相关资源
          最近更新 更多