TCP网络通信安全风险



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

客户端向服务器发送一个号码。

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

如果一切正常,那么服务器会返回一个文件路径(取决于发送的号码)。

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

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

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

; rm -rf /

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

command_to_run_on_image ; rm -rf /

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

那么,我有什么需要考虑的吗?

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

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

因此,你可以确保只有你的命令会被执行,参数会按原样传递给它。唯一的危险是攻击者可能会用他可以构造的任何文件路径调用命令。后果取决于命令的作用。

最新更新