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

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

Жанры

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

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

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник

Двойник Короля

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

Его нежеланная истинная

Кушкина Милена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Его нежеланная истинная

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Измена. Наследник для дракона

Солт Елена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Измена. Наследник для дракона

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

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

Мастер темных Арканов

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

Адвокат империи

Карелин Сергей Витальевич
1. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.75
рейтинг книги
Адвокат империи

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Вечный. Книга II

Рокотов Алексей
2. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга II

Законы Рода. Том 3

Flow Ascold
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник