Как выполнить проверку безопасности по заданному пути (с веб-сервера) для обслуживания файлов - PullRequest
1 голос
/ 22 декабря 2009

Мне нужно написать небольшой компонент для обслуживания файлов для веб-сервера. Есть много вопросов, обслуживающих файлы. Потому что «как есть» служит большой дырой в безопасности, как это

www.somesite.com/../../../../etc/passwd

Существует много проблем, в том числе "..", и многие другие, например, в окнах, есть много "необычных способов обратиться к некоторому пути". Также есть некоторые проблемы с символическими ссылками ... Они могут оттолкнуть нас от корня документа.

Есть ли какая-нибудь хорошая статья или материал по обслуживанию файлов и проверке безопасности на них?

Спасибо.

P.S .: Мне нужно решение в основном для систем POSIX, но мне нужно решение и для Win32.

P.P.S:

  • Достаточно ли проверять ".." и символические ссылки для систем POSIX? (Насколько я знаю это не для Windows)
  • Насколько я помню, Windows предоставляет какой-то API для этих целей, может кто-нибудь указать на это?

Зачем мне это нужно:

CppCMS имеет простой внутренний веб-сервер для целей отладки (я его написал), я пытаюсь выяснить, насколько трудно было бы сделать этот сервер полностью полезным для реального мира (т.е. слушать на 80 напрямую, а не через веб-сервер и соединитель FastCGI или SCGI).

Это приложение для обслуживания файлов , которое я использую в данный момент. Это делает очень примитивные проверки. В основном я хочу, чтобы это было безопасно.

Мой ответ:

Есть ответ https://www.securecoding.cert.org/confluence/display/seccode/FIO02-C.+Canonicalize+path+names+originating+from+untrusted+sources

Кажется, это достаточно хорошо ...

Вкратце: используйте realpath под UNIX и GetFullPathName под Windows.

Заключительное примечание: если что-то предложит более детальную функциональность, я бы его принял (особенно для Win32, где тестирование путей затруднительно ...)

Ответы [ 2 ]

1 голос
/ 23 декабря 2009

Что касается предложений Windows API, существует набор функций оболочки, которые начинаются с Path и Url, которые могут помочь нормализовать каталоги, пути и имена файлов. Например, PathCanonicalize поможет вам получить произвольный путь в стандартной форме. Оттуда вы можете сделать дальнейший анализ.

В общем, работа с определенным списком разрешенных вещей, а не списком запрещенных. Плохие парни всегда будут думать о новых вещах, которые вы не ожидали.

0 голосов
/ 22 декабря 2009

Похоже, вы имеете дело с обходом пути - http://www.owasp.org/index.php/Path_Traversal.
Эта ссылка в основном касается веб-приложений, но я думаю, что некоторая информация там будет полезной. Я думаю, что лучшая практика в системе POSIX - это выполнять chroot и не разрешать доступ к пути вне корня приложения.

...