トラバーサル【traversal】トラバース/traverse
概要

ツリー構造(木構造)やグラフ構造のトラバーサルとは、要素が階層的に連結された構造のすべてを、一定の規則に従って順番に訪れながら情報の取得や更新を行う操作のことである。各要素を1回ずつ訪れ、データの読み出しや書き込みを行う。
探索の順序としては、根から末端に向かって深く掘り下げながら進む「深さ優先探索」(DFS:Depth-First Search)と、同じ階層の要素をすべて処理してから次の階層へ進む「幅優先探索」(BFS:Breadth-First Search)がよく知られている。用途や構造の特性に応じていずれかが選択される。
Web技術との関連では、HTMLやXMLの文書構造を表すDOM(Document Object Model)のツリー構造を走査して目的の要素を取得・操作する「DOMトラバーサル」がある。Webブラウザのレンダリング処理や、JavaScriptライブラリによる動的なDOM操作において広く利用されている。
また、トラバーサルという語は制限の突破という意味でも用いられる。「ディレクトリトラバーサル」(パストラバーサル)は、Webサーバへのリクエストに「../」などの相対パス表記を含む文字列を送り込み、公開が想定されていないディレクトリやファイルへアクセスする手法である。入力値の検証が不十分なアプリケーションで発生しやすく、設定ファイルや認証情報の漏洩を招く危険がある。
一方、「NATトラバーサル」は攻撃手法ではなく、NATによってプライベートIPアドレスの内側に置かれた端末同士が、STUNやTURNなどのプロトコルを用いて直接通信を確立する技術である。通常、NAT経由でインターネットに接続する場合には外部からの着信を扱うことができないが、トラバーサルを行うことで外部から接続可能になる。VoIPやWebRTC、P2P通信など、様々なリアルタイム通信の基盤として利用されている。