(Во-первых, вау, я думаю, что 2 или 3 "быстрых абзаца" оказались немного длиннее, чем я думал! Вот и я ...)
Я пришел к выводу (возможно,вы не согласитесь со мной в этом), что способность "защищать" web.config на сервере (или с помощью aspnet_iisreg) имеет лишь ограниченное преимущество и, возможно, не очень хорошая вещь, поскольку она может датьложное чувство безопасности.Моя теория заключается в том, что если кто-то может получить доступ к файловой системе, чтобы в первую очередь прочитать этот файл web.config, то он также, вероятно, имеет доступ к созданию своего собственного простого файла ASPX, который может «снять защиту» и раскрыть его секреты.им.Но если посторонние люди trouncing вокруг в вашей файловой системы, а ... то у вас большие проблемы под рукой, так что вся моя забота сейчас спорный вопрос! 1
Я также понимаю, что не существует надежного способа надежного сокрытия паролей внутри DLL, так как в конечном итоге их можно разобрать и обнаружить, возможно, с помощью чего-то вроде ILDASM. 2 Дополнительную меру безопасности скрытности можно получить, запутав и зашифровав ваши двоичные файлы, например, используя Dotfuscator, но это не следует считать «безопасным». И снова,если у кого-то есть доступ на чтение (и, вероятно, тоже на запись) к вашим двоичным файлам и файловой системе, у вас снова возникают более серьезные проблемы.
Чтобы решить проблемы, о которых я упоминал, о нежелании паролей жить у разработчиканоутбуки или в SVN: решение этого с помощью отдельного файла .config, который не находится в SVN, - (сейчас!) очевидный выбор.Web.config может счастливо жить в управлении исходным кодом, в то время как секретные части этого не делают.Однако - и именно поэтому я продолжаю свой собственный вопрос с таким длинным ответом - есть еще несколько дополнительных шагов, которые я предпринял, чтобы попытаться сделать это, если не более безопасным, то, по крайней мере,немного больше неясных .
Строки подключения, которые мы хотим сохранить в секрете (кроме паролей разработки), никогда не будут жить как обычный текст в any файлы.Теперь они сначала шифруются секретным (симметричным) ключом, используя, конечно, новый нелепый Encryptinator (TM)!Утилита, созданная специально для этой цели - прежде чем они будут помещены в копию файла «db.config».Затем файл db.config загружается только на соответствующий сервер.Секретный ключ компилируется непосредственно в DLL DAL, который сам затем (в идеале!) Будет затем запутан и зашифрован чем-то вроде Dotfuscator.Мы надеемся, что это, по крайней мере, исключит любое случайное любопытство.
Я не собираюсь сильно беспокоиться о симметричном "DbKey", живущем в библиотеках DLL или SVN, или на ноутбуках разработчиков.Это пароли, которые я не буду использовать.Нам все еще нужно иметь файл «db.config» в проекте для разработки и отладки, но в нем есть все фальшивые пароли, кроме паролей разработки.Фактические серверы имеют реальные копии с собственными секретами.Файл db.config обычно возвращается (используя SVN) в безопасное состояние и никогда не хранится с реальными секретами в нашем хранилище subversion.
Учитывая все сказанное, я знаю, что это не идеальное решение (существует ли оно?), и тот, который все еще требует заметки после публикации с некоторыми напоминаниями о развертывании, но он кажется достаточным дополнительным уровнем хлопот, который может очень хорошо удержать всех, кроме самых умных и решительных атакующих.Мне пришлось смириться с «достаточно хорошей» безопасностью, которая не идеальна, но позволяет мне вернуться к работе после того, как я почувствовал себя хорошо после того, как дал ему «College Try!»
1. За мой комментарий15 июня здесь http://www.dotnetcurry.com/ShowArticle.aspx?ID=185 - дайте мне знать, если я за пределами базы!-и еще несколько хороших комментариев здесь Шифрование строк подключения, чтобы другие разработчики не могли расшифровать, но приложение все еще имеет доступ здесь Не имеет смысла шифровать web.config? а здесь Шифрование веб.config с помощью Защищенной конфигурации бессмысленно?
2. Хорошая дискуссия и пища для размышления на другую тему, но очень связанные с этим понятия здесь: Надежно хранить пароль в программном коде? - что действительно поразило, так это FAQ по Pidgin, связанные с выбраннымиОтвет: Если у кого-то есть ваша программа, он может узнать ее секреты.