В современных версиях Windows (10 и 11) реализованы две функции, которые могут представлять угрозу конфиденциальности:
1. История буфера обмена (активируется Win+V) - сохраняет все скопированные элементы
2. Облачный буфер обмена - синхронизирует содержимое между устройствами
Когда вы копируете конфиденциальные данные (пароли, персональную информацию), они могут попасть в историю или быть синхронизированы, что создает угрозу безопасности.
Решение для Delphi-разработчиков
Windows API предоставляет специальные форматы буфера обмена, которые позволяют исключить конфиденциальные данные из истории и облачной синхронизации:
ExcludeClipboardContentFromMonitorProcessing - исключает из мониторинга
CanIncludeInClipboardHistory - разрешает/запрещает историю
Вот полное решение в виде класса-помощника для TClipboard:
unit SecureClipboard;
interface
uses
Winapi.Windows, System.Classes, Vcl.Clipbrd, System.SysUtils;
type
TSecureClipboard = class helper for TClipboard
private
class var
FExcludeFromMonitoring: UINT;
FCanIncludeInHistory: UINT;
FCanUploadToCloud: UINT;
class procedure InitializeFormats;
public
class procedure SecureCopyText(const AText: string);
end;
implementation
{ TSecureClipboard }
class procedure TSecureClipboard.InitializeFormats;
begin
if FExcludeFromMonitoring = 0 then
FExcludeFromMonitoring := RegisterClipboardFormat('ExcludeClipboardContentFromMonitorProcessing');
if FCanIncludeInHistory = 0 then
FCanIncludeInHistory := RegisterClipboardFormat('CanIncludeInClipboardHistory');
if FCanUploadToCloud = 0 then
FCanUploadToCloud := RegisterClipboardFormat('CanUploadToCloudClipboard');
end;
class procedure TSecureClipboard.SecureCopyText(const AText: string);
const
Enable = 1;
Disable = 0;
begin
InitializeFormats;
Open;
try
// Очищаем буфер обмена перед добавлением новых данных
Clear;
// Устанавливаем флаги безопасности
SetAsHandle(FExcludeFromMonitoring, THandle(Enable));
SetAsHandle(FCanIncludeInHistory, THandle(Disable));
SetAsHandle(FCanUploadToCloud, THandle(Disable));
// Добавляем основной текст
AsText := AText;
finally
Close;
end;
end;
end.
Если вам нужно полностью отключить историю буфера обмена для определенных операций:
procedure DisableClipboardHistory;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('Software\Microsoft\Clipboard', True) then
begin
Reg.WriteInteger('EnableClipboardHistory', 0);
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
Не забудьте включить обратно после завершения операций!
2. Использование временного буфера обмена
Можно создать собственный буфер обмена в памяти приложения:
type
TSecureBuffer = class
private
FText: string;
public
procedure CopyToClipboard;
property Text: string read FText write FText;
end;
procedure TSecureBuffer.CopyToClipboard;
begin
if Clipboard.SupportsText then
begin
Clipboard.Open;
try
Clipboard.AsText := FText;
finally
Clipboard.Close;
end;
// Очищаем сразу после копирования
FText := '';
end;
end;
Рекомендации по безопасности
Минимизируйте время нахождения данных в буфере - очищайте буфер сразу после использования
Используйте специализированные менеджеры паролей - они часто имеют безопасные механизмы копирования
Обучайте пользователей - объясните риски использования обычного копирования для конфиденциальных данных
Заключение
Представленное решение на Delphi позволяет эффективно защитить конфиденциальные данные от попадания в историю буфера обмена и облачную синхронизацию Windows. Класс-помощник TSecureClipboard можно легко интегрировать в существующие приложения для обеспечения безопасной работы с буфером обмена.
Для максимальной безопасности рекомендуется комбинировать технические решения с обучением пользователей и применением специализированных инструментов защиты данных.
Решение на Delphi для исключения конфиденциальных данных из истории буфера обмена Windows и облачной синхронизации с использованием специальных API-форматов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.