Чтение онлайн

на главную - закладки

Жанры

19 смертных грехов, угрожающих безопасности программ

Виега Джон

Шрифт:

К вашим услугам также утилита aspnet_setreg, позволяющая сохранить и защитить конфигурационные данные.

Отметим, что в .NET Framework 2.0 класс Conf igurationSettings заменен на ConfigurationManager.

Чтение из файловой системы с помощью ASP (VBScript)

Это несколько сложнее, поскольку в ASP нет конфигурационных файлов. Однако можно поместить имя файла в переменную, хранящуюся в файле global.asa (по умолчанию ASP и I IS не возвращают клиенту содержимое этого файла), например так:

...

Sub Application OnStart

Application("connectFile") = "c:\webapps\config\sqlconn.txt"

End Sub

А

затем прочитать этот файл, когда приложению понадобится строка соединения:

...

Dim fso, file, pwd

Set fso = CreateObject("Scripting.FileSystemObject")

Set file = fso.OpenTextFile(Application("connectFile"))

connection = file.ReadLine

file.Close

Чтение из реестра с помощью ASP.NET (VB.NET)

Этот код читает не из файла, а из реестра:

...

With My.Computer.Registry

Dim connection As String =

.GetValue("KKEY_LOCAL_MACHINE\Software\" + _

"MyCompany\WebApp", "connectString", 0)

End With

Замечание по поводу Java и Java KeyStore

В JDK версии 1.2 и старше имеется класс KeyStore для управления ключами (javasecurity.KeyStore), который позволяет хранить сертификаты Х.509, закрытые ключи и – с помощью производных классов – ключи симметричных шифров. Однако KeyStore не предоставляет средств для защиты хранилища ключей. Поэтому если вы хотите получить ключ из программы, то должны прочитать ключ, используемый для шифрования хранилища из какого–то недоступного извне источника, например из файла вне домена приложения или Web–пространства, с помощью этого ключа расшифровать хранилище, получить оттуда закрытый ключ и воспользоваться им.

Поместить ключи в хранилище KeyStore позволяет приложение keytool, поставляемое в составе JDK, а для извлечения оттуда ключа надо написать примерно такой код:

...

// Получить пароль для открытия хранилища ключей

private static char [] getPasswordFromFile

{

try

{

BufferedReader pwdFile = new BufferedReader

(new FileReader("c:\\webapps\\config\\pwd.txt"));

String pwdString = pwdFile.readLine;

pwdFile.close;

char [] pwd = new char[pwdString.length];

pwdString.getChars(0, pwdString.length, pwd, 0);

return pwd;

}

catch (Exception e) { return null; }

}

private static String getKeyStoreName

{

return "<местоположение имени файла ключей>";

}

public static void main(String args[])

{

try {

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType);

// получить пароль пользователя и входной файловый поток

FileInputStream fis = new FileInputStream(getKeyStoreName);

char[] password = getPasswordFromFile;

ks.load(fis, password);

fis.close;

Key key = ks.getKey("mykey", password);

// Использовать ключ для криптографических операций

ks.close;

} catch (Exception e) { String s = e.getMessage; }

}

Это, конечно, не идеальное решение, но, по крайней мере, ключами можно управлять с помощью утилиты keytool и, что самое важное, ключ не хранится в самом

тексте программы. В этом коде есть типичная ошибка, отмеченная в грехе 6, -перехват всех исключений.

Дополнительные защитные меры

Вот небольшой перечень дополнительных защитных мер, которые можно включить в приложение:

□ используйте шифрование при хранении секретной информации и цифровую подпись для обнаружения попыток манипулирования, если нельзя защитить ее с помощью задания строгих ограничений доступа (ACL);

□ используйте ACL или разрешения для ограничения числа лиц, которые имеют доступ (для чтения или записи) к секретным данным, хранящимся на диске;

□ по завершении работы с секретными данными безопасно стирайте память. В таких языках, как Java или управляемый код в .NET, это, вообще говоря, невозможно, но в .NET 2.0 проблема частично решается с помощью класса SecureString.

Другие ресурсы

□ Writing Secure Code, Second Edition by Michael Howard and David C. LeBlanc (Microsoft Press, 2002), Chapter 6, «Determining Appropriate Access Control»

□ Writing Secure Code, Second Edition by Michael Howard and David C. LeBlanc (Microsoft Press, 2002), Chapter 8, «Cryptographic Foibles»

□ Writing Secure Code, Second Edition by Michael Howard and David C. LeBlanc (Microsoft Press, 2002), Chapter 9, «Protecting Secret Data»

□ Windows Access Control:library/en–us/secauthz/security/access_control.asp

□ Windows Data Protection:library/en–us/dnsecure/html/windataprotection–dpapi.asp

□ «How To: Use DPAPI (Machine Store) from : by J.D. Meier, Alex Mackman, Michael Dunner, and Srinath Vasireddy:Hbrary/en–us/dnnetsec/html/SecNetHT08.asp

□ Threat Mitigation Techniques:secbp/security/threat_mitigation_techniques.asp

□ Implementation of SecureZeroMemory:en–us/dncode/html/securel0102002.asp

□ «Making String More Secure»:2004/05/27/143254.aspx

□ «Secure Programming for Linux and Unix HOWTO – Creating Secure Soft–ware» by David Wheeler: www.dwheeler.com/secure–programs

□ Java Security, Second Edition by Scott Oaks (O\'Reilly, 2001), Chapter 5, «Key Management, pp. 79–91

□ Jad Java Decompiler: http://kpdus.tripod.com/jad.html

□ Class KeyStore (Java 2 Platform 5.0):api/java/security/KeyStore.html

□ «Enabling Secure Storage with Keychain Services»:com/d оси me ntation/S ecu rity/Conceptual/keychainServ Concepts/ keychainServConcepts.pdf

□ Java KeyStore Explorer: http://www.lazgosoftware.com/kse/

□ «Enabling Secure Storage With Keychain Services»:apple, com / documentation/Security/Reference/keychainservices/index.html

□ introduction to Enabling Secure Storage With Keychain Services»: developer.apple.com/documentation/Security/Conceptual/keychainServ Concepts/03tasks/chapter_3_section_2.html

□ Knowledge Base Article 329290: «How to use ASP.NET utility to encrypt credentials and session state connection strings»:default.aspx? scid=kb;en–us;329290

□ «Safeguard Database Connection Strings and Other Sensitive Settings in Your Code» by Alek Davis:ProtectYourData/default.aspx

Поделиться:
Популярные книги

Жена проклятого некроманта

Рахманова Диана
Фантастика:
фэнтези
6.60
рейтинг книги
Жена проклятого некроманта

Сын Тишайшего

Яманов Александр
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Сын Тишайшего

Демон

Парсиев Дмитрий
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Демон

30 сребреников

Распопов Дмитрий Викторович
1. 30 сребреников
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
30 сребреников

Небо в огне. Штурмовик из будущего

Политов Дмитрий Валерьевич
Военно-историческая фантастика
Фантастика:
боевая фантастика
7.42
рейтинг книги
Небо в огне. Штурмовик из будущего

Осознание. Пятый пояс

Игнатов Михаил Павлович
14. Путь
Фантастика:
героическая фантастика
5.00
рейтинг книги
Осознание. Пятый пояс

Камень

Минин Станислав
1. Камень
Фантастика:
боевая фантастика
6.80
рейтинг книги
Камень

Блокада. Знаменитый роман-эпопея в одном томе

Чаковский Александр Борисович
Проза:
военная проза
7.00
рейтинг книги
Блокада. Знаменитый роман-эпопея в одном томе

Цикл "Отмороженный". Компиляция. Книги 1-14

Гарцевич Евгений Александрович
Отмороженный
Фантастика:
боевая фантастика
рпг
постапокалипсис
5.00
рейтинг книги
Цикл Отмороженный. Компиляция. Книги 1-14

Книга 4. Игра Кота

Прокофьев Роман Юрьевич
4. ОДИН ИЗ СЕМИ
Фантастика:
фэнтези
боевая фантастика
рпг
6.68
рейтинг книги
Книга 4. Игра Кота

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Новый Рал 2

Северный Лис
2. Рал!
Фантастика:
фэнтези
7.62
рейтинг книги
Новый Рал 2

Низший 2

Михайлов Дем Алексеевич
2. Низший!
Фантастика:
боевая фантастика
7.07
рейтинг книги
Низший 2

Под маской, или Страшилка в академии магии

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.78
рейтинг книги
Под маской, или Страшилка в академии магии