【问题标题】:cleaning untrusted inputs that build os commands in PHP?清理在 PHP 中构建操作系统命令的不受信任的输入?
【发布时间】:2016-05-17 20:10:57
【问题描述】:

如何从 php 中的 url 中删除构建操作系统命令的不受信任的输入?

当我运行自动测试 zaproxy 时,我收到 P1 警报,即您的输入正在构建 os 命令。所以我想知道如何清理这些命令。

【问题讨论】:

  • 此处无需特殊操作。显然,无论如何,您都必须验证和清理从客户那里获得的每一个数据。并且您的实现应该从不允许客户端数据以某种方式在执行流中使用,例如作为require 语句或类似语句的参数。

标签: php url code-injection inject


【解决方案1】:

使用escapeshellarg()escapeshellcmd() 转义数据以用作shell 命令或参数。

// escapes a single argument
// sample input: "/foo/bar/"
$argument = escapeshellarg($userInput1); 
exec("ls $argument");

// escapes all special characters like [];{} for usage in command line
// sample input: "ls -l; rm -rf /"
$command = escapeshellcmd($userInput2);
exec($command);

您应该同时使用这两个命令,以防止用户在您的服务器上执行任意命令。

文档:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2014-07-31
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多