php - 使用 escapeshellarg() 保护用户输入
问题描述
我需要将一些用户输入与一些 shell_exec 和 exec 命令一起使用。我知道这可能是一个很大的安全风险,所以我想确保我做对了。
我的原始命令如下所示:
shell_exec('php getText.php "' . $_GET['title'] . '"');
exec('php importImages.php --comment="' . $_GET['comment'] . '"');
使用 escapeshellarg 包装用户输入是否可以保护此漏洞?使用会不会有什么问题?或者还有什么我应该关心的?
shell_exec('php getText.php "' . escapeshellarg($_GET['title']) . '"');
exec('php importImages.php --comment="' . escapeshellarg($_GET['comment']) . '"');
解决方案
escapeshellarg()
将为您引用和逃避您的价值观。
var_dump(escapeshellarg('foo'));
// output: string(5) "'foo'"
所以你的代码应该是这样的:
shell_exec('php getText.php ' . escapeshellarg($_GET['title']));
exec('php importImages.php --comment=' . escapeshellarg($_GET['comment']));
推荐阅读
- r - 如何根据变量用特定的调色板填充条形图?
- python - 大家好,我怎样才能在kivy应用程序中隐藏全屏图标
- python - 如何使用 pyodbc 在另一台电脑上连接到 Microsft SQL Sever 2005?
- c - 使用 MPI_Scatter 向所有其他进程发送一个数组索引的进程的错误输出
- ios - 如果 JSON 响应包含超过 x 个元素,则无法解码它
- html - 在带有居中文本的 div 旁边添加一个带有数字的圆圈
- arrays - 如果在使用 realloc 收缩后我仍然可以从另一个指针读取内容,那么 realloc 对释放的内存有什么作用?
- python - 查找 SVM 模型的 AUC 分数
- oracle - 如何在不升级数据库版本本身的情况下升级 Oracle Enterprise Manager Database Console?
- node.js - 有什么东西可以用来唯一标识连接到带有 Socket.IO 的套接字的设备吗?