0

我正在开发一个可以使用 QTcp* 建立服务器-客户端连接的应用程序

客户端向服务器发送一个数字。

检查接收到的字符串的长度和质量(它真的是一个数字吗?)

如果一切正常,则服务器回复文件路径(取决于发送的编号)。

客户端检查文件是否存在以及它是否是有效的图像。如果文件符合规则,则文件执行命令。

这种类型的连接存在哪些安全问题?

该程序是为 Linux 系统设计的,图像文件的外部命令使用 QProcess 执行的。如果发送的字符串包含类似的内容(不要运行以下命令):

; rm -rf /

那么它将在未找到文件的安全检查中被阻止(因为它不是文件路径)。如果没有对发送的字符串的有效性进行任何检查,则将执行以下命令:

command_to_run_on_image ; rm -rf /

这会引起恐慌!但这不可能发生。

那么,有什么我应该考虑的吗?

4

1 回答 1

0

如果您打开控制台并键入command ; rm -rf /*,则可能会发生一些不好的事情。这是因为命令是由 shell 处理的。它解析文本输出,例如通过;分隔符拆分命令并按空格拆分参数,然后使用系统 API 执行带有已解析参数的已解析命令。

但是,当您使用 时process->start("command", QStringList() << "; rm -rf /*");,就没有这样的危险。QProcess不会执行shell。它将command使用系统 API 直接执行。结果将类似于command "; rm -rf /*"在 shell 中运行。

因此,您可以确定只有您的命令将被执行,并且参数将按原样传递给它。唯一的危险是攻击者有可能使用他可以构建的任何文件路径调用命令。结果取决于命令的作用。

于 2013-08-14T21:13:07.160 回答