【发布时间】:2013-08-14 13:23:11
【问题描述】:
我正在开发一个可以使用 QTcp* 建立服务器-客户端连接的应用程序
客户端向服务器发送一个数字。
检查接收到的字符串的长度和质量(它真的是一个数字吗?)
如果一切正常,则服务器回复文件路径(取决于发送的编号)。
客户端检查文件是否存在以及它是否是有效的图像。如果文件符合规则,它会对文件执行命令。
这种类型的连接存在哪些安全问题?
该程序是为 Linux 系统设计的,外部命令 on 使用 QProcess 执行图像文件。如果发送的字符串包含类似(不要运行以下命令):
; rm -rf /
那么它将在未找到文件的安全检查中被阻止(因为它不是文件路径)。如果没有对发送的字符串的有效性进行任何检查,则将执行以下命令:
command_to_run_on_image ; rm -rf /
这会引起恐慌!但这不可能发生。
那么,有什么需要考虑的吗?
【问题讨论】:
-
不知何故,我认为您的解释不完整。客户发送一个号码,很好。服务器在用这个号码做什么?服务器向您发送文件的路径?在您的客户计算机上?突然执行了一些命令?什么命令?它从何而来?根据您的解释,服务器只向您发送图像的路径。
-
我编辑了这个问题。客户端发送一个数字,服务器回复一个依赖于这个数字的文件路径(图像位于客户端,但服务器知道它的路径),客户端使用该路径对图像执行命令.在图像上执行的命令不是由服务器发送的。客户端已经知道在接收到的路径上执行什么命令。
-
我没有看到任何风险。在一个足够不安全的环境中,我可以嗅探你的号码和路径。也许我可以欺骗一个客户端请求到服务器,所以你得到一个你从未请求过的“响应”。但我无法更改命令。当客户端收到一条不存在的路径时会发生什么?它不期望哪个?或者一个,它指向/etc/passwd?
-
就个人而言,我可能会稍微混淆发送到服务器和从服务器接收的数据。没什么特别的,只是让嗅探变得更加困难。这是正常使用。在高度安全的环境中,我会请教专家。 ;-)
-
如果路径不存在,那么客户端什么也不做。至于/etc/passwd,它会找到文件,但它会是一个无效的图像。但是,无论结果如何,都不会将任何内容作为响应发送回服务器。
标签: qt qtcpsocket qtcpserver