Я ищу способ предотвратить атаки обхода каталогов, особенно те, которые связаны с шаблоном ../ в путях к файлам, на уровне среды выполнения Java (JRE). Моя цель — обеспечить смягчение таких атак, не полагаясь на явную проверку пути и очистку моего кода Java.
Диспетчер безопасности Java. Хотя SecurityManager может помочь в управлении доступом к файлам, он не предотвращает и не очищает напрямую пути, включающие последовательности ../.
Разрешения и политики файлов. Установка разрешений файлов и политик безопасности может ограничить доступ, но по своей сути не очищает пути для предотвращения обхода каталогов.
Конфигурация JRE. Я знаю, что конфигурации JRE или системные свойства могут обеспечить определенный уровень безопасности, но я не нашел конкретных параметров, позволяющих предотвратить обработку шаблонов ../.
Есть ли в JRE какой-либо встроенный механизм для автоматического предотвращения или очистки путей к файлам, содержащих шаблоны ../?
Существуют ли конфигурации JRE, системные свойства или настройки, которые могут помочь в смягчении атак с обходом каталога на более низком уровне, не требуя проверок на уровне кода?
Если таких механизмов не существует, каковы наилучшие методы защиты путей к файлам на уровне JRE, помимо проверок кода приложения?
Я был бы признателен за любые рекомендации или ссылки на соответствующую документацию или инструменты, которые могут помочь достичь этой цели безопасности на уровне JRE.
Это непростая задача, поскольку сама JRE по своей сути не очищает и не отклоняет пути, содержащие такие шаблоны, как ../. Лучший подход сочетает в себе использование SecurityManager с настраиваемыми политиками, использование библиотек безопасности и применение лучших практик доступа к файловой системе. Кроме того, настройка среды и использование контейнеров могут обеспечить дополнительный уровень безопасности.
Попробуйте использовать пользовательские политики:
System.setSecurityManager(new SecurityManager());
PermissionCollection permissions = new Permissions();
PermissionCollection permissions = new Permissions();
permissions.add(new FilePermission("/your/allowed/directory/-", "read,write"));
permissions.add(new FilePermission("/your/allowed/file.txt", "read"));
Policy.setPolicy(new Policy() {
@Override
public PermissionCollection getPermissions(CodeSource codesource) {
return permissions;
}
});
Проверьте эти ссылки: Документ Java SecurityManager и Обход пути OWASP
Просто общее замечание: SecurityManager и Policy устарели для удаления начиная с Java 17.