私は現在、C で UNIX ソケットを介して HTTP サーバーを作成しており、要求されたファイルをチェックして適切なアクセス許可があることを確認する GET 要求の一部を実装しようとしています。
HTTP サーバーについて何も知る前に、Apache サーバーをセットアップしました。HTTP サーバーが要求されたファイルを見つけるために参照する単一のディレクトリがあることを理解しています。これは、サーバーが何らかの形でディレクトリ外へのアクセス許可を持っていないためなのか、実際にパスを検証してディレクトリ内にあることを確認するためなのかはわかりません。
これを自分で実装しようとしているので、これを適切に処理する方法がわかりません。パスが特定のディレクトリ内にあるかどうかを判断できる C の関数はありますか (たとえば、foo/bar/../../baz
内にありfoo/
ますか)?
Python ではos.path.relpath
、結果が で始まるかどうかを使用してチェック..
し、パスが指定されたディレクトリの外にないことを確認します。
たとえば、ディレクトリが/foo/bar/htdocs
で、指定されたパスが のindex.html/../../passwords.txt
場合、 が必要なので、ファイルがディレクトリの外にあることが../passwords.txt
先頭からわかります。..
/foo/bar/htdocs