Shikata Ga Nai

Private? There is no such things.

シリアライズとデシリアライズとは?

Hello there, ('ω')ノ

🔄 シリアライズ(Serialization)とは?

シリアライズとは、プログラムの中で扱っている複雑なデータ(オブジェクトや構造体)を一連のバイト列(または文字列)に変換するプロセスです。

💡 こんなときに使う!

  • データをネットワーク越しに送る
  • ファイルに保存して後で再利用したい
  • データベースに記録したい
  • 他のプログラムやサーバーとAPI通信したい

✅ 特徴

  • オブジェクトの中身(属性やその値)も一緒に保存される
  • クラスによっては一部のフィールドを「transient(直列化しない)」として除外可能
  • JavaやC#などではバイナリ形式、PythonやJavaScriptでは**文字列形式(JSONなど)**になることが多い

🔁 デシリアライズ(Deserialization)とは?

デシリアライズとは、シリアライズされたバイト列を使って、元のオブジェクトを完全に再現する処理です。

📦 イメージ

[オブジェクト] → (シリアライズ) → [バイト列] → (デシリアライズ) → [同じオブジェクト]

再構築されたオブジェクトは、元と同じ属性と状態を持ち、プログラム上で普通に使うことができます。


💬 補足

  • プログラミング言語によって呼び名が異なることがあります:

    • Python → 「ピックル(pickling)」
    • Ruby → 「マーシャリング(marshalling)」
  • セキュリティ観点では、不正に改ざんされたデータをデシリアライズすると危険です。これについては次に詳しく解説します。


🛡まとめ

用語 説明
シリアライズ オブジェクトをバイト列に変換して保存や通信に使えるようにする
デシリアライズ バイト列を元のオブジェクトに戻す処理
利用目的 ネットワーク送信、保存、API連携など
注意点 全ての属性が保存される、悪意ある改ざんに弱い可能性がある

この知識は、Webアプリケーションのセキュリティ診断でも非常に重要になります。特に次に紹介する「インセキュア・デシリアライゼーション」は、重大な脆弱性に繋がるケースが多く、ペネトレーションテストで頻繁に検出されます。

Best regards, (^^ゞ