【入門編】【上級者】プレゼンテーションの保存実行時に、ドキュメント内の全シェイプのGUID(識別子)をスキャンして差分を検出し、改ざんや不正なオブジェクト挿入がないかを検証してから書き込むセキュリティアドイン – PowerPoint VBA解析バイブル

スポンサーリンク

【PowerPoint VBA極道】プレゼン資料の「改ざん」を許さない。保存時の自動セキュリティ検証モジュール構築術

こんにちは。現場で泥臭く、かつエレガントに業務を自動化しているエンジニアです。

皆さんは「PowerPointの保存」をただの作業だと思っていませんか? 防衛・金融・重要機密を扱うプロジェクトでは、「保存ボタンを押した瞬間が、最大のセキュリティリスク」になり得ます。意図しないオブジェクトの挿入や、スライドのすり替わり。これらを機械的に監視し、保存前に「指差し確認」させる仕組み。

今回は、VBAを使って、スライド内の全シェイプに「デジタル指紋(GUID)」を刻み込み、保存時に差分を検出するセキュリティモジュールの構築法を伝授します。

—

1. なぜ「保存」をハックする必要があるのか?

PowerPointは柔軟すぎるツールです。悪意ある第三者が、スライドの裏側に隠しシェイプを仕込んだり、重要な図表を別のものに差し替えたりすることは、慣れたユーザーなら一瞬でできてしまいます。

我々エンジニアがやるべきは、「現在の構成が、信頼された状態の構成と一致しているか」を機械に判定させることです。

今回のミッション

1. 初期登録: プレゼン内の全シェイプに固有のID(GUID)を割り当てる。
2. 監視: 保存時に全シェイプをスキャンし、以前のGUIDリストと照合する。
3. 拒絶: 未許可のシェイプや欠損があれば保存を中断し、アラートを出す。

—

2. 実装の心臓部:シェイプを識別する

PowerPointのオブジェクトには `Shape.Name` がありますが、これは重複可能で信頼できません。そこで、`Tags`(タグ)という機能を使います。これは、シェイプの裏側に非表示のメタデータを付与できる、まさに「身分証明書」です。

準備:GUIDを付与する初期化コード

‘ 実行することで、全スライドのシェイプに固有タグを付与
Sub InitializeSecurityTags()
Dim sld As Slide
Dim shp As Shape

For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
‘ まだタグを持っていない場合のみ生成
If shp.Tags(“SEC_GUID”) = “” Then
‘ スライド番号とシェイプ名を組み合わせた簡易的なユニークキー
‘ 実際にはAPIで生成したGUIDを使うことを推奨
shp.Tags.Add “SEC_GUID”, sld.SlideIndex & “_” & shp.Name & “_” & Now
End If
Next shp
Next sld
MsgBox “全オブジェクトにセキュリティタグを付与しました。”
End Sub

—

3. 保存時の「検問所」を作る

VBAには `BeforeSave` のようなイベントはありません。しかし、「リボンボタンからの保存をフックする」ことで、保存前に必ずチェックを走らせる仕組みを作ります。

セキュリティ検証ロジック

Function VerifyIntegrity() As Boolean
Dim sld As Slide
Dim shp As Shape
Dim expectedCount As Integer

‘ 本来あるべきオブジェクト数と比較するなどのロジック
‘ ここでは全シェイプにSEC_GUIDが存在するか確認
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
If shp.Tags(“SEC_GUID”) = “” Then
MsgBox “警告: 不正なオブジェクトが検出されました!: ” & shp.Name
VerifyIntegrity = False
Exit Function
End If
Next shp
Next sld

VerifyIntegrity = True
End Function

‘ ユーザーが呼び出すカスタム保存プロシージャ
Sub SecureSave()
If VerifyIntegrity() Then
ActivePresentation.Save
Else
MsgBox “セキュリティ検証に失敗したため、保存を中止しました。”
End If
End Sub

—

4. 現場のプロとして、陥りやすい罠を知る

初学者がここで躓くポイントを、少しだけ深掘りします。

  • グループ化の罠: シェイプを「グループ化」すると、階層構造が変わり、以前のGUIDが参照できなくなることがあります。`GroupItems` を再帰的にスキャンする設計にするのがプロの流儀です。
  • 名前の衝突: `Shape.Name` はユーザーが手動で変更できます。必ず `Tags` に依存してください。
  • パフォーマンス: 数百枚のスライドがある場合、全シェイプのスキャンは重くなります。必要な時だけチェックするように設計しましょう。

—

まとめ:技術は「守るため」に使う

今回紹介した手法は、単なるVBAのテクニックではありません。「ドキュメントの整合性を担保する」という設計思想です。

1. タグ(Tags)を使い、オブジェクトの真贋を見極める。
2. 検証ロジックを保存操作の前に必ず通す。
3. 例外処理を徹底し、不正があれば即座に止める。

この3つを守るだけで、あなたの作るプレゼン資料は、ただの「スライド」から「要塞」へと進化します。

「VBAが難しい」と感じる時は、コードではなく「何を監視したいか」を紙に書いてみてください。それができれば、コードは後から必ずついてきます。また現場でお会いしましょう!

タイトルとURLをコピーしました