我目前正在用 C 语言编写一个基于 UNIX 套接字的 HTTP 服务器,并且我即将实现 GET 请求的一部分,该部分检查请求的文件以确保它具有适当的权限。
在我对 HTTP 服务器一无所知之前,我设置了一个 Apache 服务器,据我了解,HTTP 服务器通过一个目录来查找请求的文件。我不知道这是否是因为服务器以某种方式在目录之外没有权限,或者它是否实际上验证了路径以确保它在目录内。
现在我要自己实现这个,我不知道如何正确处理这个。C 中是否有一个函数可以让我确定路径是否在给定目录内(例如在foo/bar/../../baz
inside foo/
)?
在 python 中,我会使用os.path.relpath
并检查结果是否以 开头..
,以确保路径不在给定目录之外。
例如,如果目录是/foo/bar/htdocs
,并且给定的路径是index.html/../../passwords.txt
,我想要../passwords.txt
,所以我可以从开头看到..
文件在/foo/bar/htdocs
目录之外。