Меры безопасности при написании сетевых программ на Delphi
Система управления MIDAS в Delphi предоставляет очень удобные средства для написания сетевых программ. Используя эти элементы управления, вы можете писать системные программы клиент/сервер в локальной сети, а также легко создавать приложения распределенной обработки в Интернете.
Важным вопросом, связанным с сетевыми программами, являются соображения безопасности. Некоторые конфиденциальные данные передаются онлайн и могут быть незаконно перехвачены, что приведет к ненужным потерям. В процессе программирования я принял несколько эффективных профилактических мер, о которых кратко расскажу здесь.
1. Принцип
В настоящее время существует множество методов шифрования данных, которые играют определенную роль в защите данных. Однако если используется фиксированный ключ или ключ передается вместе с данными, удовлетворительных результатов конфиденциальности достичь невозможно. На практике я разобрался с набором методов случайного ключа в режиме «запрос-ответ», что весьма удовлетворительно для сохранения конфиденциальности паролей и данных.
Когда клиентская программа запускается и пытается установить соединение с серверной программой, клиентская программа получает от сервера случайную строку, сгенерированную серверной программой. Система будет использовать эту строку в качестве ключа для передачи пароля и данных для входа пользователя. Поскольку ключ генерируется серверной программой случайным образом, он меняется каждый раз, когда клиент входит в систему, что значительно снижает вероятность перехвата пароля, ведущего к краже данных.
Сервер может добавить собственный интерфейс в модуль удаленных данных, который возвращает случайную строку. Удаленный модуль данных должен записать эту строку как ключ для последующей обработки. Случайные строки можно генерировать различными способами. Самый простой способ — использовать функцию Random() для генерации случайного числа, а затем использовать функцию Format() или IntToStr() для генерации строки из этого числа.
2. Меры входа пользователя
Чтобы предотвратить незаконную отладку программы и, следовательно, утечку пароля, информация для входа клиента должна обрабатываться на стороне сервера или может быть добавлен специальный уровень безопасности, отвечающий за вход в систему клиента. Информация для входа в систему клиента хранится в таблице информации о клиенте, включая имя пользователя, пароль, разрешения и другую информацию.
Когда клиентская программа входит в систему, она сначала вызывает интерфейс серверной программы, чтобы получить строку ключа, и использует этот ключ для шифрования имени пользователя и пароля, введенных пользователем, и отправляет информацию для входа на сервер. Алгоритм шифрования может представлять собой алгоритм DES или другой эффективный алгоритм. После получения информации для входа в систему сервер сначала расшифровывает информацию для входа с помощью ранее сгенерированного и записанного случайного ключа, а затем сравнивает расшифрованную информацию с информацией в сохраненной таблице информации о клиенте, чтобы определить, является ли информация о клиенте законной, и разрешения на данные клиента. понравилось и т. д.
Клиентская программа для этого процесса выглядит следующим образом:
strKey:=myRemoteSever.GetKey();
{Вызов интерфейса сервера для получения случайного ключа}
Имя пользователя:=Ecy(strUserName
стрКей);
{Зашифруйте имя пользователя, Ecy() — алгоритм шифрования}
PassWord:=Ecy(strPassword
стрКей);
{Зашифровать пароль для входа}
Если myRemoteServer.LogIn(имя_пользователя
Пароль), затем {Логин}
Начинать
{процесс}
Конец;
Процесс входа в систему LogIn() на стороне сервера выглядит следующим образом:
strUserName:=DeEncy(Имя пользователя
стрКей);
{Расшифровать имя пользователя, DeEncy() — алгоритм дешифрования}
strPassword:=DeEncy(Пароль
стрКей);
{Расшифровать пароль для входа}
{База данных запросов}
если (Пройдено), то
Результат:=истина
Еще
Результат: = ложь;
Следует отметить, что StrKey следует определять как глобальную переменную как в серверной, так и в клиентской программе.
Чтобы предотвратить открытие таблицы информации о клиенте вне программы и тем самым утечку пароля, к информации о клиенте можно применить определенные меры шифрования. Например, в таблицу PARADOX можно добавить пароль, и сначала его предоставит серверная программа. Пароль при доступе к таблице информации о клиенте.
3. Передача данных
В сетевых приложениях некоторые конфиденциальные данные должны шифроваться при передаче через Интернет. Механизм Delphi MIDAS обеспечивает способ шифрования данных. Он может шифровать некоторые поля перед передачей данных клиенту. Он также может расшифровывать соответствующие поля данных от клиента после получения запроса на обновление данных клиента перед отправкой его в базу данных. . Сделайте обновление. Для достижения этих целей вы можете добавить объект TPRovider или TdataSetProvider в модуль удаленных данных серверной программы и установить в свойстве DataSet этого объекта набор данных, подлежащих обработке. Добавьте следующий код в событие OnGetData Tprovider:
с DataSet сделать
начинать
пока не EOF делаю
начинать
Редактировать;
SensitiveData.AsString :=
Энси(SensitiveData.AsString
стрКей);
{Зашифровать конфиденциальные данные}
Почта;
Следующий;
конец;
конец;
Приведенный выше код может зашифровать конфиденциальные данные перед отправкой их клиентской программе.
Аналогично, добавление некоторого кода обработки в событие OnUpdateData Tprovider может расшифровать данные, отправленные клиентом.
Вышеизложенное представляет только общие принципы реализации мер безопасности для сетевых программ. На этой основе могут быть добавлены другие меры конфиденциальности для достижения лучшего эффекта конфиденциальности. Например, клиентская программа может использовать определенные вспомогательные аппаратные устройства для повышения безопасности. В приложении для смарт-карт клиентская программа не только требует от пользователя ввода имени пользователя и пароля при входе в систему, но и проверяет тип и конкретное содержимое IC-карты в считывателе IC. пароль утек, никто не будет входить под другим именем. Конечно, никакая мера безопасности не является абсолютно безопасной. Меры безопасности должны иметь строгую систему конфиденциальности и высокую степень осведомленности о конфиденциальности со стороны пользователей, чтобы действительно поддерживать конфиденциальность.