В C, используя вызовы POSIX, как я могу определить, находится ли путь внутри целевого каталога?
Например, веб-сервер имеет свой корневой каталог в / srv
, это getcwd ()
для демона.
При разборе запроса для /index.html
он возвращает содержимое /srv/index.html
.
Как мне отфильтровать запросы для путей за пределами /srv
?
/../etc/passwd
,
/ действительный /../../ etc / passwd
,
и т.д.
Разделение пути на /
и отклонение любого массива, содержащего ..
нарушит действительный доступ / srv / valid /../ index.html
.
Есть ли канонический способ сделать это с помощью системных вызовов? Или мне нужно вручную пройти путь и подсчитать глубину каталога?