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

на главную

Жанры

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

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

Ученичество. Книга 2

Понарошку Евгений
2. Государственный маг
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ученичество. Книга 2

Император поневоле

Распопов Дмитрий Викторович
6. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Император поневоле

Лорд Системы 7

Токсик Саша
7. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 7

Целитель. Книга вторая

Первухин Андрей Евгеньевич
2. Целитель
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Целитель. Книга вторая

Темный Патриарх Светлого Рода 3

Лисицин Евгений
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 3

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Жребий некроманта. Надежда рода

Решетов Евгений Валерьевич
1. Жребий некроманта
Фантастика:
фэнтези
попаданцы
6.50
рейтинг книги
Жребий некроманта. Надежда рода

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Не грози Дубровскому! Том Х

Панарин Антон
10. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том Х

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Хочу тебя навсегда

Джокер Ольга
2. Люби меня
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Хочу тебя навсегда

СД. Том 15

Клеванский Кирилл Сергеевич
15. Сердце дракона
Фантастика:
героическая фантастика
боевая фантастика
6.14
рейтинг книги
СД. Том 15

Смерть может танцевать 3

Вальтер Макс
3. Безликий
Фантастика:
боевая фантастика
5.40
рейтинг книги
Смерть может танцевать 3