首页 > 解决方案 > 在 system() 函数中使用 $_GET - 安全问题

问题描述

因此,假设我们有以下代码:

<?php
$str = addslashes($_GET['str']);
$cmd = 'sometool "'.$str.'"';
system($cmd);
?>

它安全吗?我可以以某种方式逃避双引号吗?linux中的操作系统。

纯理论考虑。我不在我的代码中使用它;)

标签: phpsecurity

解决方案


它不安全。您仍然可以传递一些恶意参数,即执行系统中的其他文件。

$var = '$(sh file.sh)';
$str = addslashes($var);
$cmd = 'sometool "'.$str.'"';
system($cmd);

您应该使用escapeshellarg转义 shell 参数的方法。

$str = escapeshellarg($_GET['str']);
$cmd = 'sometool ' . $str;
system($cmd);

请注意,您必须按原样使用参数$str,并且它将是单个参数。不能用引号'或双引号括起来"


推荐阅读