【ぷろとたいぷおせん】
プロトタイプ汚染 とは?
最終更新:
💡 継承元を書き換え、その値を読む処理に影響を広げる
JavaScriptで、攻撃者の入力などを通じて継承元のプロパティを不正に変更し、それを参照する処理の動作を変える攻撃。危険な動的書き込みやマージ処理などが原因になり得る。
📌 このページのポイント
継承元が汚染されるって、どんな攻撃なの?
書き換わると何が起きるの?
JSONを送るだけで攻撃できるの?
どうすれば防げるの?
受け付けるキーや型を検証して、意図しない書き込みを避けるよ。読み取りではObject.hasOwnで自身のプロパティか確認する。用途に応じてMapやObject.create(null)も使えるけれど、自分が使う処理全体を確認する必要があるんだ
__proto__を無効にすれば十分?
まとめ:ざっくりこれだけ覚えればOK!
「プロトタイプ汚染」って出てきたら「継承元の不正な値を、処理が読み込んでしまう攻撃」と思えばだいたいOK!
📖 おまけ:英語の意味
「Prototype Pollution」 = プロトタイプ汚染
💬 Prototypeは継承元、Pollutionは汚染という意味だよ。継承元のプロパティへの不正な変更と、それを使う処理への影響を表す名前なんだ