php - 在 system() 函数中使用 $_GET - 安全问题
问题描述
因此,假设我们有以下代码:
<?php
$str = addslashes($_GET['str']);
$cmd = 'sometool "'.$str.'"';
system($cmd);
?>
它安全吗?我可以以某种方式逃避双引号吗?linux中的操作系统。
纯理论考虑。我不在我的代码中使用它;)
解决方案
它不安全。您仍然可以传递一些恶意参数,即执行系统中的其他文件。
$var = '$(sh file.sh)';
$str = addslashes($var);
$cmd = 'sometool "'.$str.'"';
system($cmd);
您应该使用escapeshellarg
转义 shell 参数的方法。
$str = escapeshellarg($_GET['str']);
$cmd = 'sometool ' . $str;
system($cmd);
请注意,您必须按原样使用参数$str
,并且它将是单个参数。不能用引号'
或双引号括起来"
推荐阅读
- python - 如何用python复制字符串中的字符(就地)?
- windows - App-V 虚拟进程和本地文件系统?
- npm - 如何在内置 Webstorm 终端中使用 snyk 命令
- java - 将列表转换为地图
- logic - 用 OR 和 NOT 创建 AND 表达式
- angular - 使用 JEST 运行 Angular 组件测试给出了找不到模块
- themes - PhpStorm 更改单元测试工具栏颜色
- javascript - 表的 SAPUI5 数据绑定不起作用
- bash - 如何使用 sed 替换“word{word”或“word}word”
- angular - 特定组件的Angular 6单元测试错误