13
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RubyでYAMLファイルを扱う際、YAML.load は非常に便利なメソッドです。
しかし、その便利さの裏には大きな落とし穴があります。

YAML.loadが行っていること

YAML.load は、YAMLをRubyオブジェクトへ変換します。

その際、単なるデータ構造だけでなく、

  • 任意のクラスのインスタンス生成
  • 初期化処理の実行

まで行われる可能性があります。

なぜ危険なのか

外部から渡されたYAMLを YAML.load すると、

  • 意図しないオブジェクトが生成される
  • 危険なメソッドが呼び出される

といった問題が発生します。

これは過去に、
リモートコード実行などの深刻な脆弱性につながったこともあります。

よくある誤解

設定ファイルだから安全、という思い込みは非常に危険です。

  • 設定ファイルが改ざんされる
  • 想定外の入力が混ざる

こうしたケースは現実に起こります。

安全な代替手段

現在は、基本的に YAML.safe_load を使うべきです。

safe_load では、

  • 許可したクラスのみ読み込み
  • 危険なオブジェクト生成を防止

といった制限がかかります。

実務での指針

  • 外部入力は必ず safe_load
  • 読み込むクラスを明示する
  • 本当にYAMLが必要か見直す

この意識だけで、リスクは大きく下げられます。

まとめ

  • YAML.load は強力だが危険
  • 外部入力には使ってはいけない
  • 安全な代替手段を選ぶ

便利な機能ほど、正しく理解して使う必要があります。

13
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?