我正在开发一个可以使用QTcp *
建立服务器 - 客户端连接的应用程序客户端向服务器发送一个号码。
检查收到的字符串的长度和质量(实际上是一个数字吗?)
如果一切正常,那么服务器会回复文件路径(取决于发送的号码)。
客户端检查文件是否存在以及文件是否为有效图像。如果文件符合规则,则会在>>文件上执行命令。
此类连接存在哪些安全问题?
该程序专为Linux系统设计,外部命令 on 使用QProcess执行图像文件。如果发送的字符串包含类似的内容(不运行以下命令):
; rm -rf /
然后它会在未找到安全检查的文件上被阻止(因为它不是文件路径)。如果没有检查发送字符串的有效性,则执行以下命令:
command_to_run_on_image ; rm -rf /
哪会引起恐慌!但这不可能发生。
那么,有什么我应该考虑的吗?
答案 0 :(得分:0)
如果您打开一个控制台并输入command ; rm -rf /*
,可能会发生一些不好的事情。这是因为命令由shell处理。它解析文本输出,例如通过;
分隔符拆分命令并按空格拆分参数,然后使用系统API执行带解析参数的已解析命令。
但是,当您使用process->start("command", QStringList() << "; rm -rf /*");
时,没有这样的危险。 QProcess
不会执行shell。它将使用系统API直接执行command
。结果类似于在shell中运行command "; rm -rf /*"
。
因此,您可以确定只执行您的命令,并且参数将按原样传递给它。唯一的危险是攻击者可以使用他可以构造的任何文件路径来调用命令。后果取决于命令的作用。