2013-08-06 3 views
0

Я только начал хранить все мои учетные данные БД в файле WARS context.xml и загрузил их через JNDI. Таким образом, мое приложение может повторно использовать одни и те же учетные данные в нескольких областях, и я могу использовать JNDI для их извлечения (вместо того, чтобы посыпать учетные данные по всей моей кодовой базе).Как защитить конфиденциальную информацию внутри context.xml?

Но теперь я думаю: что, если злоумышленник попадает на машину, где установлен мой сервер Tomcat? Они могут перейти прямо к моему вложенному каталогу webapps/MyApp, найти &, открыть каталог context.xml, и вуаля - теперь они могут получить доступ к моей базе данных!

Итак, что является следующим шагом для введения безопасности здесь? Есть ли способ сохранить все мои учетные данные в каком-то хранилище ключей и ссылаться на их ярлыки изнутри context.xml? Я все же хотел бы использовать context.xml, чтобы мой JDBC-код мог получить доступ к учетным данным через JNDI. Если да, то как context.xml доступ к ним безопасным способом? Каков нормальный способ борьбы с безопасностью здесь? Заранее спасибо!

+2

У вас здесь есть проблема с курицей и яйцом. Если ваш webapp может получить доступ к БД, тогда любой злоумышленник, который попадает в поле с таким же или более высоким уровнем разрешения, также сможет получить доступ к БД. Даже если вы добавляете хранилище ключей, если ваш webapp может открыть хранилище ключей, то и злоумышленник. – Aurand

+0

Я думаю, что большая проблема здесь заключается в входе в «машину». Не так ли? Если человек может открыть дверь, только способ, которым вы можете безопасно, поставить его в «безопасный» (шифровать вместо простых данных). – kosa

+0

Хорошая точка @Aurand (+1) - так что типичное решение (я не могу быть единственным разработчиком Java, который боролся с этим)? –

ответ

0

Я бы рекомендовал создать систему шифрования, которая шифрует данные до того, как будет отправлена ​​в xml-файл, вместо того, чтобы искать имя пользователя или что-то еще, что вы шифруете имя перед поиском. Таким образом, даже если человеку удалось попасть в файл, он не сможет его прочитать, не имея алгоритма, используемого для шифрования, и точно знать, что именно они хотели найти. Теоретически теоретически они могут грубо заставить его, но они все равно должны знать алгоритм для этого. Простым способом обработки encrytion было бы узнать, как использовать надувные замковые библиотеки на http://www.bouncycastle.org/. У них очень простая в использовании система обучения.

+0

Спасибо @Ephyxia (+1) - Я думал об одном и том же, однако есть критический недостаток - для того, чтобы мое приложение прочитало зашифрованное имя пользователя/пароль/etc. из JNDI и расшифровать его, он должен будет иметь ключ (ы) для выполнения такого дешифрования. Если эти ключи будут поставляться с файлом WAR, вы можете даже не использовать систему шифрования, такую ​​как ... идеи? Еще раз спасибо! –

+0

hmm вы могли бы зашифровать весь файл с помощью более простого метода обратимого шифрования, такого как base 64, или быть подлым, и сделать что-то вроде обучения использованию файлов 7zip для zip-файла и просто изменить расширение на что-то случайное. Это должно усложнить задачу для любого, кто не знает, как его encyrpted, но может быть не слишком быстро, если у вас большой файл. – Ephyxia