Как Rust PathBuf предотвращает атаки через каталоги? - PullRequest
0 голосов
/ 29 мая 2019

С «Случай окисления: язык программирования Rust» Серхио Бенитес говорит,

Вот статический файловый сервер, написанный на Rocket.Это ровно четыре строки, и он гарантированно не будет уязвим для атак со стороны каталога.

Эти четыре строки:

#[get("/<path..>")]
fn files(path: PathBuf) -> Option<NamedFile> {
    NamedFile::open(Path::new("static/").join(path)).ok()
}

В нижней части этогоСлайд говорит:

  • FromParam* реализация для PathBuf проверяет безопасность пути

Я понимаю, как тип может гарантировать безопасность путем проверки ввода (в том же смысле, что любойобъект может быть в конструкторе или как входные данные для функции могут быть обернуты с помощью проверяющей функции.

dangerousThing(validateSafety(input))

Многие языки предоставляют это. Я также понимаю, как можно упростить это, поместив его в конструктор длятип или класс,

class Path {
  constructor(path) { this._path = validateSafety(path) }
}

Но я в замешательстве из-за того, что (если что-то) Руст делает здесь по-другому. Есть ли что-нибудь еще к этому?

1 Ответ

2 голосов
/ 29 мая 2019

PathBuf не предоставляет таких гарантий.Это не может , потому что во всех доменах, где используется PathBuf, отсутствует понятие «атак через каталоги».

Автор имеет в виду, что реализация FromSegments для PathBuf выполняет проверку обхода атаки и никогда не вызывает обработчик в случае сбоя.

FromSegments допускает случаи сбоев, возвращая Result:

pub trait FromSegments<'a>: Sized {
    type Error: Debug;
    fn from_segments(segments: Segments<'a>) -> Result<Self, Self::Error>;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...