ファイルのアップロードで Outlook メール (*.msg) をアップロードできる Web アプリケーションがあります。顧客は、デジタル署名または暗号化されたストア メールを禁止したいと考えています。したがって、メールをアップロードした後、メールが署名されているか暗号化されているかを確認する必要があります。
それを確認する方法があれば?ファイルのストリームのパターンのように?
ファイルのアップロードで Outlook メール (*.msg) をアップロードできる Web アプリケーションがあります。顧客は、デジタル署名または暗号化されたストア メールを禁止したいと考えています。したがって、メールをアップロードした後、メールが署名されているか暗号化されているかを確認する必要があります。
それを確認する方法があれば?ファイルのストリームのパターンのように?
英単語のチェックは有効であるだけでなく、文書化された実際の方法でもあります。
機関を参照してください。
2.1.3.1.3 Clear-Signed メッセージを表すメッセージ オブジェクトの認識
Message オブジェクトが "IPM.Note.SMIME.MultipartSigned" のメッセージ クラス (PidTagMessageClass プロパティ ([MS-OXCMSG] セクション 2.2.1.3)) の値を持ち、正確に 1 つの Attachment オブジェクトを含む場合、クリア署名として扱われるべきです (SHOULD)。メッセージ。追加の検証手順を実行して、Attachment オブジェクトが適切なメディア タイプ (たとえば、PidTagAttachMimeTag プロパティ ([MS-OXPROPS] セクション 2.680) の値が "multipart/signed") でマークされており、有効なマルチパートを表していることを確認できます。 [RFC1847] で指定されている /signed MIME エンティティ。メッセージクラスの値が「IPM.Note.SMIME.MultipartSigned」ではなく、サフィックス「.SMIME.MultipartSigned」で終わる場合、Message オブジェクトはクリア署名されたメッセージとして扱われる場合があります<7><8>。
「IPM.Note.SMIME.MultipartSigned」のメッセージ クラス値を持つ Message オブジェクトが、セクション 2.1.3.1 で指定された構造を持たない場合、動作は未定義です。
2.1.3.2.3 不透明な署名付きまたは暗号化された S/MIME を表すメッセージ オブジェクトの認識
Message オブジェクトのメッセージ クラス (PidTagMessageClass プロパティ ([MS-OXCMSG] セクション 2.2.1.3)) の値が "IPM.Note.SMIME" であり、Attachment オブジェクトが 1 つだけ含まれている場合は、不透明な署名付きメッセージとして扱われるべきである (SHOULD)。暗号化されたメッセージ。追加の検証手順を実行して、Attachment オブジェクトが適切なメディアの種類 (たとえば、PidTagAttachMimeTag プロパティ ([MS-OXPROPS] セクション 2.680)) でマークされていることを確認できます。「application/pkcs7-mime」または「application/x- pkcs7-mime"、または PidTagAttachFilename プロパティ ([MS-OXPROPS] セクション 2.671) で指定された "application/octet-stream" およびファイル名であり、ファイル拡張子 ".p7m" を持ち、有効な暗号化されたまたは[RFC3852] で指定されているように、不透明な署名付きメッセージ。
メッセージ クラス値「IPM.Note.SMIME」はあいまいな場合があります。<12>
Message オブジェクトのメッセージ クラス値が「IPM.Note.SMIME」で、セクション 2.1.3.2 で指定されている適切な構造または内容がない場合、動作は未定義です。
編集:
より具体的には、はい、「ファイルのストリーム内のパターン」を探す必要があります。
具体的には、MSG が Unicode の場合、「__substg1.0_001A001F」ストリームをスキャンし、上記のパターンを確認します。
MSG ファイルは、ストリームとストレージを含む OLE 構造化ストレージ ファイルです。ストリームを取得するには、C# の世界にいる場合は、OpenMCDFなどの OLE ストレージ ライブラリを使用します。Java、Python などにも同様のものがあります。
このブログ投稿では、この形式についてかなり詳しく説明しています。また、同じ著者による別の投稿では、あなたが何を求めているかを正確に説明しています。これは、権利管理されたメール メッセージに関する情報です。
基本的に、メッセージがファイル形式に準拠している限り、これらの投稿と仕様は、署名と暗号化を確認するために必要なすべてを提供するはずです.
英単語をチェックするのは悪い考えです。ユーザーが英語で書いていない場合や、暗号化されたデータの疑似ランダム ストリームによって、ユーザーが使用しているエンコーディングで「or」や「and」などの単語が作成された場合はどうなるでしょうか。それは信頼できないだけです。
編集:
英単語をチェックするのはよくないというのは、単純にファイルをスキャンして、特定の単語のセットが存在するかどうかを確認するのはよくないということです。誰かがこの解決策に反対票を投じたので、このあいまいさのために私が言ったことを誤解したのではないかと思います.
別のユーザーが回答で示したように、オブジェクトを解析して実際にデータ内の条件を処理することは問題ありません。彼らの投稿から、それが文書化された方法であり、標準に基づいているため、正常に機能することがわかります。これは、私がここで 2 つの投稿とフォーマット仕様で提供した情報に似ています。
メッセージを開いて調べるには、Outlook Redemptionを使用することをお勧めします。これは私が使用しているもので、Outlook がサーバーにインストールされていなくても機能します。GetMessageFromMsgFile メソッドが RDOEncryptedMessage を返す場合、メールが暗号化または署名されていることを意味します。