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