我有一个Web应用程序,允许使用文件上载上传Outlook Mails(* .msg)。 客户希望禁止使用Digitaly Signed或Encrypted的商店邮件。 因此,在上传邮件后,如果邮件已签名或加密,我应该会检查邮件。
如果有办法检查那个?就像文件流中的模式一样?
答案 0 :(得分:2)
检查英文单词不仅有效,而且是实际记录的方式。
请参阅权威:
2.1.3.1.3 Recognizing a Message Object that Represents a Clear-Signed Message
如果Message对象具有消息类(PidTagMessageClass属性) ([MS-OXCMSG]第2.2.1.3节))的值 “IPM.Note.SMIME.MultipartSigned”并且只包含一个附件 对象,它应该被视为一个明确签名的消息。额外 可以执行验证步骤以验证附件 对象标有适当的媒体类型(例如, PidTagAttachMimeTag属性([MS-OXPROPS]部分2.680)有一个值 “multipart / signed”)表示有效的multipart / signed MIME [RFC1847]中指定的实体。如果消息类值不是 “IPM.Note.SMIME.MultipartSigned”但它以后缀结尾 “.SMIME.MultipartSigned”,Message对象可以< 7>< 8>被视为一个 明确的信息。
如果Message对象的消息类值为 “IPM.Note.SMIME.MultipartSigned”没有指定结构 在第2.1.3.1节中,行为未定义。
2.1.3.2.3 Recognizing a Message Object that Represents an Opaque-Signed or Encrypted S/MIME
如果Message对象具有消息类(PidTagMessageClass属性) ([MS-OXCMSG]第2.2.1.3节))“IPM.Note.SMIME”的值并包含 恰好是一个Attachment对象,它应该被视为一个 不透明签名的消息或加密的消息。额外验证 可以执行步骤以验证是否标记了Attachment对象 使用适当的媒体类型(例如,PidTagAttachMimeTag 财产([MS-OXPROPS]第2.680条)是其中之一 “application / pkcs7-mime”或“application / x-pkcs7-mime”,或者是 “application / octet-stream”和文件名,由。指定 PidTagAttachFilename属性([MS-OXPROPS]部分2.671),并且有一个 文件扩展名“.p7m”)并表示有效的加密或 opaque-signed消息,如[RFC3852]中所述。如果是的价值 message class不是“IPM.Note.SMIME”,而是以后缀结尾 “.SMIME”,然后Message对象可以< 11>被视为一个 不透明签名的邮件或加密的邮件。
邮件类值“IPM.Note.SMIME”可能不明确。< 12>
如果Message对象的消息类值为“IPM.Note.SMIME” 没有章节中规定的适当结构或内容 2.1.3.2,然后行为未定义。
修改强>
更具体地说,是的,你应该在文件流中寻找“模式”。
具体来说,如果MSG是unicode,您将扫描“__substg1.0_001A001F”流,并检查上述模式。
MSG文件是包含流和存储的OLE结构化存储文件。要获得流,如果您在C#世界中,请使用像OpenMCDF这样的OLE存储库。 java,python等也有类似的东西。
答案 1 :(得分:1)
This blog post很好地描述了格式,同一作者的another post准确描述了您所追求的内容,即有关权限管理邮件的信息。
基本上只要消息符合the file format,这些帖子和规范就会为您提供检查签名和加密所需的全部内容。
检查英语单词是个坏主意。如果用户不用英语写,如果伪随机的加密数据流恰好在他们正在使用的某些编码中创建“或”或“和”之类的内容会怎么样?这不可靠。
修改强>
当我说检查英语单词是一个坏主意时,澄清我的意思,我的意思是说只是扫描文件并验证是否存在某组单词是个坏主意。由于有人拒绝投票给这个解决方案,我觉得他们可能因为这种模棱两可而误解了我说的话。
正如另一位用户在答案中指出的那样,将对象解析出来并实际处理数据中的条件是可以的。您可以从他们的帖子中看到它是文档化的方法并且工作正常,因为它基于标准。这类似于我在这里给出的两个帖子和格式规范的信息。
答案 2 :(得分:0)
要打开邮件并查看,我建议您使用Outlook Redemption。这是我使用的,它没有安装在服务器上的Outlook。 如果GetMessageFromMsgFile方法返回RDOEncryptedMessage,则表示您的邮件已加密或签名。