Network programming 编写轻量级网络文件传输协议时应注意的安全问题

Network programming 编写轻量级网络文件传输协议时应注意的安全问题,network-programming,network-protocols,Network Programming,Network Protocols,我有一个桌面应用程序,可以与iPhone应用程序“同步”。同步实际上是一个简单的文件拷贝——iPhone应用程序是一个查看器,因此我不必处理实际以双向方式同步数据的复杂性 我已经编写了自己的协议,因为我需要它是轻量级的,并且我发送的文件可能比设备上可用的RAM大-因此,文件直接从网络传输到磁盘 这些文件由一个“数据”文件(SQLite数据库)和零个或多个资源(图片、PDF等)组成。一旦连接被接受,客户端和服务器将以块的形式进行通信,这些块从以下结构开始: struct ChunkHeader {

我有一个桌面应用程序,可以与iPhone应用程序“同步”。同步实际上是一个简单的文件拷贝——iPhone应用程序是一个查看器,因此我不必处理实际以双向方式同步数据的复杂性

我已经编写了自己的协议,因为我需要它是轻量级的,并且我发送的文件可能比设备上可用的RAM大-因此,文件直接从网络传输到磁盘

这些文件由一个“数据”文件(SQLite数据库)和零个或多个资源(图片、PDF等)组成。一旦连接被接受,客户端和服务器将以块的形式进行通信,这些块从以下结构开始:

struct ChunkHeader {
    UInt32 headerLength;
    UInt32 totalChunkLength;
    UInt32 chunkType;
    UInt32 chunkNameLength;
    UInt32 chunkDataLength;
} __attribute__ ((packed));
结构之后是一个UTF-8文件名字符串,后跟该文件的数据。header结构包含文件名字符串的长度(
chunkNameLength
)和二进制数据长度(
chunkDataLength
chunkType
包含区块的“类型”,以便客户端知道如何处理数据,并且可以是以下类型之一:

typedef enum {
    kChunkTypePreSyncInfoDictionary = 0,
    kChunkTypeDataFile = 1,
    kChunkTypeResource = 2,
    kChunkTypeEndOfData = 3,
    kChunkTypeSyncCancelled = 4
} ChunkType;
到目前为止,我还没有考虑到安全问题。同步将通过本地WiFi网络进行,该网络可能会加密,也可能不会加密。被复制的数据本质上不包含像文字处理文档那样的敏感信息——如果用户想输入敏感的详细信息,没有什么可以阻止他们,但不会要求用户输入敏感的详细信息

那么,我应该采取什么步骤来确保数据足够安全?我在Objective-C中工作,但我不是在寻找特定语言的答案,只是寻找概念。我担心的事情:

  • 我应该采取措施防止数据欺骗吗
  • 我应该采取措施对数据进行实际加密吗
  • 我是否应该采取措施确保另一个应用程序不会冒充我的应用程序,并用其他应用程序替换客户端或服务器
  • 我是否应该采取措施检查收到的数据中是否有导致损坏的内容
“我是否应该采取措施检查接收到的数据是否存在导致损坏的内容?”

总是。无条件地。毫无例外

关于你的其他问题:

  • 我应该采取措施防止数据欺骗吗

  • 我应该采取措施对数据进行实际加密吗?(窥探)

  • 我是否应该采取措施确保另一个应用程序不会冒充我的应用程序,并用其他应用程序替换客户端或服务器?(再次欺骗)

你说“被复制的数据不包含敏感信息”,所以窥探似乎不是你关心的威胁场景

所以,看起来您担心一些欺骗威胁场景(您曾两次提到)

这通常通过客户端和服务器之间的某种凭证交换来处理。密码用于用户身份验证。某种证书可能适用于客户机-服务器相互信任


这样做的目的是为客户机和服务器提供“足够”的信息,让它们知道另一方是值得信任的。有些人对已知的URL很满意。其他人想要一些“共享秘密”(比如密码)。有些人甚至需要更多,并在协议中包含许多细节。有些人在协议中包含算法细节(例如,HTTP摘要认证要求客户端对服务器提供的数据进行一点算法验证。)

您的实际威胁场景是什么?你想防范什么?安全性不是您在应用程序上扔下的一块模糊的“毯子”。安全性是对特定用例的特定响应。你的威胁用例是什么?窥探?欺骗?腐败?