如何确保没有人可以访问我的网络服务器中文档根目录之外的文件

How do I make sure nobody gets access to files out of my document root in my websever

我目前正在使用 C 编写网络服务器。 我想确保无法访问文档根目录之外的文件,我需要编写一个函数来检查请求文件/该文件的路径(例如 /index.html)并确保有无法离开我的文档根目录(例如 /../ 会使它离开文档根目录)。我正在考虑只检查 ../ 并删除它,但是有人可能会请求 ..//,如果我们从中删除 ../,这将再次是 ../。是否有一些我没有想到的聪明的方法来做到这一点?

使用realpath:

realpath - return the canonicalized absolute pathname

它将 return 绝对路径名,所有符号链接,所有 ./ 和所有 /../ 解析。在用 realpath 解析后存储你的 "document root"。之后,您可以简单地 memcmpstrcmp 解析到文档根目录的路径,并将解析后的路径名添加到要测试的路径..