ディレクトリ名とサブパスが"./files"
あり"/example.txt"
ます。"./files/example.txt"
ディレクトリはファイルシステムに任意に配置できますが、ディレクトリ+サブパス ( ) が実際に指定されたディレクトリ内にあることを確認する必要があります。したがって、この例は有効ですが、ディレクトリの子でも孫でもないため、サブパス"/../example.txt"
は無効になります。ディレクトリの外側につながるソフトリンクは許可されます。
C でこのテストを実行するにはどうすればよいですか?
- 私の最初の推測は、 を使用
realpath(directory_subpath)
して結果の開始を と比較することでしたrealpath(directory)
が、 の問題について読んだ後、それPATH_MAX
について少し確信が持てず、これもソフトリンクで問題を引き起こす可能性があります。 - 私の 2 番目のアイデアは、サブパスがで始まるかどうかを確認するだけで
/../
、そうであれば無効になります。サブパスの他の場所に存在する場合/../
、その前のディレクトリ名が削除されます (左から右へ、パスが無効であることが判明するか、パス名の最後に到達するまでこれを繰り返します)。
subpath
悪意を持って与えられている可能性があるので、これについては本当に、本当に確信したい. 私の 2 番目のアプローチは安全ですか? 別のより良い方法はありますか?