Бесплатный менеджер паролей KeePass 2: инструкция по эффективному использованию. Часть 1

Как настроить KeePass для входа на сайты. Автоматическое определение адреса. Эквивалентные домены. Нестандартная авторизация, автонабор отдельных полей. Облачная синхронизация между устройствами. Резервное копирование базы

Речь пойдет об использовании KeePass, в основном, на Windows. При этом сама программа кросплатформенная, а также имеет ряд форков, из которых уделим внимание KeePass2Android. Чтобы база была общей на разных устройствах, обеспечим облачную синхронизацию.

Эта статья касается, в первую очередь, самого типичного применения менеджера паролей — авторизации на сайтах. Более узкие темы, как то авторизацию в разнообразных приложениях, совместное использование, дополнительную защиту и т.д., рассмотрим в отдельной статье.

Я решил не загружать читателей долгими и нудными рассуждениями, а сразу предложить готовую настройку. Пожалуй, так новички легче войдут в курс дела, а опытным хватит пояснений под спойлерами, чтобы взять на вооружение отдельные идеи. Тем более, что в сети и без того есть хорошие руководства.

Обычному пользователю™ достаточно прочитать пункт Основы, не раскрывая в нем спойлеры.

Достоинства и недостатки предлагаемой конфигурации

Предложенный вариант использования KeePass'а — лишь один из многих. Его качества:

  • портативность;
  • защищенный ввод мастер-пароля;
  • усложнение автонабора для защиты от килоггеров;
  • резервное копирование без плагинов;
  • облачная синхронизация без плагинов;
  • нестандартный автонабор, в т.ч.:
    • двухстраничная авторизация,
    • набор произвольного поля,
    • набор произвольной последовательности,
    • набор с задержкой и/или без усложнения (плагин TCATO_Placeholder);
  • интеграция в браузеры, не требующая их настройки (плагин WebAutoType);
  • глобальный автонабор в нестандартных случаях, например, для ввода одного пароля (плагин AutoTypeShow);
  • поддержка эквивалентных доменов (опционально — с использованием регулярных выражений);
  • меню выбора браузера (в т.ч. портативного или браузера в песочнице);
  • запуск из KeePass'а приложений с одновременным автонабором (монтирование томов VeraCrypt, соединение по AmmyyAdmin и др.);
  • способность KeePass'а работать с правами администратора (понижаются права открываемых им браузеров и других приложений);
  • работа с несколькими базами:
    • совместно используемые пароли,
    • автооткрытие нескольких баз;
  • использование KeePass'а как менеджера закладок;
  • быстрая блокировка PIN-кодом;
  • возможность открывать базу без ввода пароля;
  • возможность поддерживать совместимость с версией KeePass 1.x (на случай отсутствия .NET).

Недостатки:

  • медленный вызов глобального автонабора (при использовании плагина WebAutoType и/или поддержки эквивалентных доменов);
  • посимвольный автонабор вместо мгновенной вставки учетных данных;
  • нет подхвата данных, введенных в браузере;
  • необходимость создавать записи по шаблонам;
  • необходимость выполнять XML-замену при импорте данных из другой базы.

Если эти недостаки для вас критичны, вы можете отказаться от глобального автонабора и поддержки эквивалентных доменов и предпочесть интеграцию с браузерами посредством плагинов, наподобие KeeFox, ChromeIPass и т.д.

Основы

Подготовка программы

Распакуем в какую-нибудь пустую папку архив с portable-вариантом KeePass версии 2.x, туда же — архив с русским переводом и архив KeePass_Settings.zip (пароль KeePass). Добавим плагины Favicon Downloader, TCATO Placeholder, WebAutoType и AutoTypeShow — просто поместим файлы с расширением .plgx в подпапку Plugins. В отдельное от программы место распакуем архив just_a_photo.zip.

KeePass 2.x требует .NET Framework 2 или выше, а плагин WebAutoType — .NET Framework 4. В отсутствие .NET Framework 4 можно использовать плагин WebAutoType версии 3.x (работает медленно) или отказаться от этого плагина.

Если используются жесткие средства защиты, наподобие Comodo Internet Security, понадобится добавить файлы BackUp.js, GlobalAutoTypeHelper.js, RunActivate.js и OpenWith.hta в доверенные.

Содержимое каталога KeePass

Проверка подлиности

Чтобы убедиться, что программа не поддельная, проверим подписи, как рекомендует ее автор. У каждого exe- и dll-файла откроем окно свойств и перейдем на вкладку «Цифровые подписи». Удостоверимся, что имя подписавшего — Open Source Developer, Dominik Reichl. Затем нажмем Сведения и удостоверимся, что подпись действительна. Не иметь подписи могут только файлы плагинов в папке PluginCache.

Настройка ориентирована на максимально портативную и автономную работу. Хотя для KeePass'а и существует множество плагинов, постараемся использовать их минимально, обходясь по возможности штатными средствами.

Как это настроено

KeePass сам по себе обеспечивает портативность, в частности, запоминает именно относительный путь к базе данных. Поэтому базу удобно держать в папке программы и переносить вместе с ней. Однако по умолчанию KeePass помещает скомпилированные плагины в папку %LOCALAPPDATA%\KeePass, что несколько отступает от портативности. Чтобы они помещались в папку программы, отредактирован файл KeePass.config.xml: параметру Application/PluginCachePath задано значение {APPDIR}{ENV_DIRSEP}PluginCache, т.е. после строки <Application> вставлена строка <PluginCachePath>{APPDIR}{ENV_DIRSEP}PluginCache</PluginCachePath>.

Чтобы опробовать настройку смогли даже те пользователи, у которых уже запущен свой KeePass, в разделе Сервис → Параметры → Дополнительно отключена опция Ограничивать одним экземпляром.

Открытие базы и изменение мастер-пароля

Запустив KeePass, введем мастер-пароль myCoolMasterPassword и укажем ключевой файл just a photo.jpg.

Если запустить перед этим какой-нибудь килоггер-тест, то можно убедиться, что ввод мастер-пароля хорошо защищен.

Изменим мастер-пароль (меню Файл → Изменить основной пароль): зададим свой сложный пароль и, при желании, ключевой файл. Ключевым может быть любой личный файл, который доступен на всех синхронизируемых устройствах и ни в коем случае не может быть утерян или изменен. Данные учетной записи Windows не будем использовать для авторизации.

Если указать не только пароль, но и ключевой файл, то они будут запрашиваться при каждом запуске программы. Открыть базу смогут только те, у кого есть пароль и ключевой файл одновременно.

При каждом сохранении база шифруется заново, причем с новым случайным вектором инициализации, чтобы скрыть, в какую именно часть базы вносились изменения.

Смена мастер-пароля

Как это настроено

Чтобы обычные килоггеры не могли перехватить ввод мастер-пароля, в разделе Сервис → Параметры → Безопасность включена опция Вводить основной пароль в защищенном режиме. На вкладке Дополнительно включена опция Запоминать и автоматически открывать последнюю базу данных при запуске, как и по умолчанию; но в то же время отключены опции Запоминать источники ключа и Запоминать рабочие папки, поскольку расположение ключевого файла — это все-таки секретная информация.

Поиск нужной записи и авторизация

Опробуем разные способы ввода учетных данных. Воспользуемся «учебной» учетной записью, которая имеет название Учебный аккаунт, логин myLogin, пароль myPassword, адрес http://keepass.info/help/kb/testform.html, тег демо и заметки Тренировка

Заодно проверим, перехватываются ли данные тестами, следящими за нажатием клавиш и буфером обмена.

Начнем с чисто клавиатурного способа. Откроем KeePass сочетанием клавиш Ctrl+Alt+Shift+K и сразу же наберем фрагмент названия записи, или логина, или адреса, или тега, или даже заметок, нажмем Enter. Стрелками выберем нужную запись из найденных и нажмем Ctrl+U — ссылка откроется. Поставим курсор в поле ввода логина и нажмем Ctrl+Alt+Shift+F9 (или Fn+Ctrl+Alt+Shift+F9, в зависимости от конфигурации клавиатуры). Нажмем кнопку Submit — и страница покажет сообщение с введенными данными.

Аналогичное можно проделать одной мышью: в поле поиска раскроем недавние запросы, выберем нужный. В найденной записи сделаем двойной клик по полю URL. Когда ссылка откроется, кликнем по полю ввода (не обязательно очищать поле — KeePass сделает это сам). Вернемся к KeePass'у и нажмем на панели инструментов кнопку Выполнить автонабор.

Кликать по полю ввода желательно всегда, даже если там уже мигает курсор. В частности, этого требует автонабор для Google или ProtonMail.

Автонабор на тестовой странице KeePass

Если вам понадобится набрать отдельное значение, например, пароль — нажмите кнопку [F] на панели инструментов и выберите поле из списка.

Вместо автонабора можно перетащить логин и пароль в поля ввода прямо из списка записей KeePass. Еще один вариант — временно скопировать эти данные в буфер обмена, это делается двойным кликом; через 20 секунд буфер обмена автоматически очищается (но только если там будут учетные данные; «чужое» содержимое KeePass не удалит).

Посмотрим, удался ли перехват пароля килоггер-тестом. В случае автонабора мы увидим просто мешанину символов — это достигнуто двойным усложнением автонабора. Таким образом, простые килоггеры не смогут разобрать наши учетные данные, хотя теоретически это возможно при целенаправленной атаке на KeePass. Если не пользоваться автонабором, а перетаскивать логин и пароль в поля ввода, то обычным килоггерам вообще ничего не достанется. Но если копировать учетные данные в буфер обмена, пусть и с последующей его очисткой, — тестовая программа их перехватит.

Как это настроено

В разделе Сервис → Параметры → Политика включены опции Автонабор, Автонабор без контекста, Перетаскивание и Копирование, как и по умолчанию.

На вкладке Интеграция заданы глобальные горячие клавиши Ctrl+Alt+Shift+F9 для автонабора выбранной записи, а также добавлена клавиша Shift в комбинации, имеющиеся по умолчанию. Можно сделать комбинации и более простыми, но возрастет риск случайного нажатия и конфликта с другими программами.

Чтобы упростить поиск, на вкладке Интерфейс в разделе Быстрый поиск включены все три опции вида Помещать фокус на...

На вкладке Безопасность включена автоочистка буфера обмена через 20 секунд. Также включена опция Использовать формат буфера обмена 'Clipboard Viewer Ignore', чтобы некоторые легальные программы, следящие за буфером обмена, не запоминали учетные данные (замечание, что эта опция «не рекомендована» устарело: оно относится к старой версии, конфликтовавшей с Microsoft Office).

В самой базе изменена верхняя группа: на вкладке Автонабор задано использование последовательности {CLEARFIELD}{UserName}{TAB}{DELAY 100}{Password}, как самой универсальной. В учебной записи включена опция Двойное усложнение автонабора.

Кнопка [F] реализована с помощью триггеров (Сервис → Триггеры). Сначала создан триггер Добавить кнопки на панель инструментов:

  • событие: Приложение запущено и готово;
  • условия: отсутствуют;
  • действие: Добавить свою кнопку на панель инструментов:
    • идентификатор: btn_TypeField,
    • имя: [F],
    • описание: Набрать поле....

Затем добавлен триггер Набрать произвольное поле при нажатии на кнопку [F]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeField,
  • действие: Выполнить автонабор для выбранной записи с последовательностью {PICKFIELD}.

Глобальный автонабор

До сих пор мы своими руками отыскивали подходящую запись для авторизации на сайте. Однако KeePass способен найти ее сам, сообразно открытому сайту, и запустить автонабор: достаточно кликнуть в поле ввода, нажать клавиши Ctrl+Alt+Shift+A (или кнопку [G] на панели инструментов KeePass'а) и в появившемся окне подтвердить выбор учетной записи.

Запуск глобального автонабора KeePass мышью

Бывает, что на одном и том же сайте нужно заполнять разные формы. Например, при некоторых операциях запрашиваются дополнительные данные: пароль, ответ на секретный вопрос, какие-либо коды и т.п. В таких случаях нажмем клавиши Ctrl+Alt+Shift+S и в появившемся окне подтвердим выбор записи. В результате автонабора не произойдет: просто откроется KeePass с уже отмеченной записью, и мы сможем набрать нужное поле кнопкой [F], или перетащить его, или просто скопировать.

Поиск вместо глобального автонабора

Как это настроено

Глобальному автонабору назначены горячие клавиши Ctrl+Alt+Shift+A (Сервис → Параметры → Интеграция).

Добавлен плагин WebAutoType, считывающий адрес фрейма. В его опциях настроено создание записи по горячим клавишам Ctrl+Alt+Shift+W.

Чтобы можно было вместо автонабора выполнять лишь поиск нужной записи, добавлен плагин AutoTypeShow, в его настройке заданы горячие клавиши Ctrl+Alt+Shift+S.

Работу кнопки [G] обеспечивают триггеры и скрипт GlobalAutoTypeHelper.js. В уже имеющийся триггер Добавить кнопки на панель инструментов добавлено действие: Добавить кнопку... с идентификатором btn_GlobalAutoType, именем [G] и описанием Глобальный автонабор. Создан триггер Глобальный автонабор при нажатии на кнопку [G]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_GlobalAutoType,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\wscript.exe,
      • аргументы: "{APPDIR}\GlobalAutoTypeHelper.js",
      • опция Ждать выхода включена;
    • Выполнить глобальный автонабор,

Скрипт GlobalAutoTypeHelper.js симулирует нажатие клавиш Alt+Esc, чтобы убрать окно KeePass'а на задний план, перезапускается, чтобы триггер перешел к следующему шагу (глобальному автонабору), а затем активизирует окно выбора записи. Код скрипта:

var WshShell = WScript.CreateObject("WScript.Shell");
if (WScript.Arguments.Count() == 0) {
	WScript.Sleep(100);
	WshShell.SendKeys("%{ESC}");
	WshShell.Exec("%windir%\\System32\\wscript.exe \"" + WScript.ScriptFullName + "\" 0");
} else {
	for (var attempt = 1; attempt != 20; ++attempt) {
		WScript.Sleep(500);
		if (WshShell.AppActivate("Выбор записи для автонабора")) {
			break;
		}
	}
}

Во избежание фишинга в разделе Сервис → Параметры → Дополнительно → Автонабор отключены все четыре опции вида Считать запись подходящей....

Для перестраховки от случайного нажатия горячих клавиш включена опция Всегда показывать окно выбора записи для глобального автонабора.

Определение адреса браузерными расширениями (для K-Meleon, Pale Moon, песочниц и др.)

За считывание адреса страницы/фрейма отвечает плагин WebAutoType (см. системные требования). Однако он не работает с некоторыми видами браузеров, а также с браузерами, выполняющимися в песочнице (Sandboxie, Comodo). Кроме того, он предназначен только для Windows.

Решение — вместо использования плагина установить в браузер какое-либо из расширений, добавляющих к оконному заголовку адрес открытой страницы. Тогда KeePass будет подбирать записи на основании этого заголовка.

Браузер, в который установлено расширение, понадобится отметить в базе: в группе settings открыть запись WindowAssociation и вписать название браузера в поле Логин. Название должно быть тем самым, которое браузер добавляет в конец своего заголовка. Можно перечислить несколько браузеров, разделяя их знаком |:

Pale Moon|K-Meleon

Если какой-либо браузер запускается в песочнице Sandboxie, понадобится дополнительно указать его название с символами [#] на конце, например:

Pale Moon|K-Meleon|Pale Moon [#]|K-Meleon [#]|Google Chrome [#]

Можно совмещать оба способа: для основных популярных браузеров использовать плагин WebAutoType, а в браузеры, которые не поддерживаются плагином либо запускаются в песочнице, добавить расширение. Например, в приведенной строке нет варианта Google Chrome, потому что в реальной среде с этим браузером работает плагин WebAutoType.

Глобальный автонабор, использующий браузерные расширения, будет работать только для записей, созданных по шаблонам. Так настроено для защиты от фишинга.

Как эта функция реализована, рассмотрим позже, вместе с поддержкой эквивалентных доменов.

Создание записи

Откроем в браузере какой-нибудь форум и попробуем на нем зарегистрироваться. Запустим KeePass, и войдем в группу Общие. Кликнем по стрелке справа от кнопки добавления записи и выберем шаблон _Обычная_запись_. Дадим записи желаемое название, в поле URL-ссылка скопируем адресную строку браузера.

Перейдем на страницу регистрации и заполним требуемые поля, кроме пароля. Скопируем в соответствующее поле KeePass'а выбранный логин, а в поле Заметки укажем прочие данные, которые использовали для регистрации: имейл, имя и т.п. Теперь нажмем Ok, чтобы закрыть окно создания записи. Чтобы запись обрела значок сайта, выберем в ее контекстном меню пункт Download Favicons.

Перетащим пароль из KeePass'а в положенное место на странице регистрации (как вариант, можем поставить курсор в это место, нажать кнопку [F] и выбрать поле Пароль). Завершаем регистрацию.

Автоматический подхват данных из браузера

Можно было сделать проще и быстрее: ввести желаемый логин на странице регистрации, кликнуть по нему, нажать Ctrl+Alt+Shift+W — и откроется окно добавления записи с уже готовым заголовоком, логином и ссылкой. Останется лишь перетащить пароль в форму регистрации.

Однако «ручное» использование шаблонов предпочтительнее тем, что в них включено усложнение автонабора и поддержка эквивалентных доменов, а также могут быть учтены особенности того или иного сайта.

В то же время удобно воспользоваться клавишами Ctrl+Alt+Shift+W, чтобы узнать адрес фрейма, в котором находится форма авторизации. Дело в том, что при поиске записи KeePass опирается на адрес фрейма, куда вводятся данные, а не на адресную строку браузера, — поэтому именно адрес фрейма следует указывать в поле URL-ссылка (или в списке эквивалентных доменов). Например, авторизация на странице https://e.mail.ru в действительности происходит через фрейм https://account.mail.ru.

Вы можете изменить это сочетание клавиш в настройке плагина WebAutoType: Сервис → WebAutoType Options...

Если вы захотите сгенерировать другой пароль, откройте запись, нажмите кнопку рядом с полем Пароль и выберите вариант Автосоздаваемые пароли для новых записей. Если сайт не принимает слишком сложные пароли, выберите вариант Simple.

Создание пароля в KeePass

Теперь опробуем регистрацию на Яндексе. Чтобы не ошибиться в адресе, откроем сайт двойным кликом по полю URL в шаблоне Yandex из группы templates. Войдем в группу Почта и добавим запись по шаблону Yandex.

Перейдем на страницу регистрации, укажем имя, определимся с логином. Занесем в KeePass логин, укажем в коммментарии имя, фамилию и нажмем Ok. Перетащим пароль на страницу регистрации.

Однако Яндекс требует также придумать ответ на секретный вопрос. Этот ответ должен быть таким же секретом, как и пароль, поэтому мы и сгенерируем его подобно паролю.

Войдем в группу <service> и вызовем контекстное меню на записи <Генератор паролей>. Выберем Копировать строковое поле → Создать обычный пароль. Вставим свежесозданный «ответ на вопрос» на страницу регистрации, это нужно сделать за 20 секунд. Теперь сохраним наш «ответ» в KeePass: сделаем двойной клик по полю Пароль записи <Генератор паролей>, чтобы еще раз скопировать тот же «ответ», потом откроем свою запись Yandex, перейдем на вкладку Дополнительно и вставим «ответ» в поле Secret — на все про все снова 20 секунд. Готово.

Создание записи KeePass

Помимо поля Secret, вы можете добавлять на вкладку Дополнительно свои поля с произвольными названиями, чтобы хранить, например, телефонные номера, номера банковских карт, коды восстановления и т.п. Если содержимое дополнительного поля секретно, отметьте опцию Включить защиту в памяти — тогда это поле не будет расшифровываться без надобности, в частности, его не будет видно в панели просмотра. Впоследствии можно будет копировать содержимое этих полей через контекстное меню записи или набирать кнопкой [F].

Если вы уже пользуетесь каким-нибудь менеджером паролей, то можете перенести свою базу в KeePass, выполнив импорт и небольшую обработку данных.

Как это настроено

В окне Сервис → Генератор паролей заданы профили паролей. Основной профиль задан так: установлена длина 20, выбраны алфавитно-цифровые и некоторые другие символы, нажата кнопка Сохранить текущую настройку как новый профиль (дискета справа вверху) и указан вариант Автосоздаваемые пароли для новых записей. Другие профили заданы подобным образом: простой пароль состоит из 16 алфавитно-цифровых символов, сложный — из 30 символов широкого набора; они сохранены под именами Simple и Strong.

В базе создана группа templates, для нее отключен автонабор и поиск записей (Изменить группу → Поведение) и указано, что она является «группой шаблонов» (Файл → Параметры базы данных → Дополнительно). Также в ней создана подгруппа unused для хранения временно неиспользуемых шаблонов.

Шаблоны — это обычные записи, в которых заранее проставлены названия, ссылки, добавлены дополнительные поля, установлены значки, включено усложнение автонабора, заданы его последовательности и т.д. В поле Заметки дана инструкция по использованию шаблона, ее можно удалить.

Вместо пароля в шаблонах указана строка {{T-REPLACE-RX:#{GROUP_PATH}#(.*templates)?.*#$1#}NEWPASSWORD}

Эта строка устроена так, чтобы в записи, созданной на основе шаблона, автоматически генерировался пароль. Он сгенерируется не сразу после создания записи, а при первом обращении к полю Пароль: копировании, перетаскивании или автонаборе. Если же обратиться к этому полю в самом шаблоне — пароль сгенерирован не будет.

В шаблонах, где требуется генерировать короткие буквенно-цифровые пароли, в качестве пароля указана строка {{T-REPLACE-RX:#{GROUP_PATH}#(.*templates)?.*#$1#}NEWPASSWORD:/Simple/}

В базе создана запись <Генератор паролей>, в ней на вкладке Дополнительно добавлено поле Создать обычный пароль со значением {NEWPASSWORD} и включенной опцией Включить защиту в памяти. Каждый раз, когда это строковое поле раскрывается (копируется в буфер обмена или вводится автонабором), значение в поле Пароль заменяется новым. Новый пароль генерируется согласно профилю Автосоздаваемые пароли для новых записей. Можно указать другой профиль кодом {NEWPASSWORD:/имя_профиля/}.

Общая база на всех устройствах

Пришло время наладить синхронизацию. Откроем запись KeePassCloudStorage в группе <service> и зарегистрируемся на облачном хранилище mydrive.ch: придумаем логин, сгенерируем пароль. Учетные данные сохраним в этой записи, только оставим нетронутыми название, ссылку и первую строку заметок. Зайдем в хранилище и отправим туда файл нашей базы, что лежит в папке Base (Upload → using Standard → Save → Обзор... → Upload). Вот и все.

Облачная синхронизация базы KeePass

Теперь при каждом закрытии база будет синхронизироваться с облаком. Кнопкой ↑↓ можно синхронизировать базу, не закрывая KeePass.

Если пожелаете вместо синхронизации просто заменить файл в облачном хранилище, это можно сделать через браузер: удалить старый файл и отправить новый. Ссылка на страницу авторизации есть в заметках к записи KeePassCloudStorage.

Как изменить работу синхронизации

Возможно, вы предпочтете синхронизировать базу не при закрытии, а при открытии и при каждом сохранении. Тогда в окне Сервис → Триггеры → Автоматически синхронизировать → События удалите пункт Закрытие... и добавьте пункты Открыт файл базы данных и Сохранен файл базы данных. В этом случае можно убрать кнопку ↑↓ (удалив пункт из списка Триггеры → Добавить кнопки на панель инструментов → Действия), поскольку ее роль будет выполнять стандартная кнопка сохранения. Чтобы синхронизация не беспокоила вас при каждом изменении базы, замените в окне Триггеры → Автоматически сохранять изменения → События пункт Состояние интерфейса пользователя обновлено на Закрытие файла базы данных (до сохранения).

Если вы решите вообще отключить автосинхронизацию, откройте окно Сервис → Триггеры → Автоматически синхронизировать и отключите опцию Разрешен (другие параметры менять не нужно). Включение выполняется аналогично.

Как это настроено

В самой базе создана запись под названием KeePassCloudStorage с пустыми полями логина/пароля, ссылкой https://webdav.mydrive.ch/{T-CONV:/{DB_NAME}/Uri/} (KeePass впоследствии трансформирует эту ссылку в WebDAV-адрес файла, который расположен в корне облачного хранилища и имеет имя текущей базы данных) и заметками, начинающимися строкой https://www.mydrive.ch/login. Затем подготовлено несколько триггеров.

На случай, если открыто несколько баз, создан триггер Автоматически активировать базу:

  • события:
    • Открыт файл базы данных, фильтр оставлен пустым,
    • Сохранен файл базы данных, фильтр оставлен пустым,
    • Закрытие файла базы данных (до сохранения), фильтр оставлен пустым;
  • действие: Активировать базу, фильтр: Выполняющая триггер.

Ниже создан триггер Автоматически синхронизировать:

  • событие: Закрытие файла базы данных (после сохранения), фильтр оставлен пустым;
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • Строка:
      • строка: {REF:T@T:KeePassCloudStorage},
      • операция: Равно,
      • значение: KeePassCloudStorage;
    • Строка:
      • опция Отрицание включена,
      • строка: {REF:U@T:KeePassCloudStorage},
      • операция: Равно,
      • поле Значение пусто;
    • существует файл: {T-REPLACE-RX:/{REF:N@T:KeePassCloudStorage}/\n[\s\S]*//};
  • действия:
    • Изменить состояние триггера:
      • поле Имя триггера пусто,
      • новое состояние: Выключить,
    • Синхронизировать текущую базу данных:
      • файл/ссылка: {REF:A@T:KeePassCloudStorage},
      • логин: {REF:U@T:KeePassCloudStorage},
      • пароль: {REF:P@T:KeePassCloudStorage};
    • Изменить состояние триггера:
      • поле Имя триггера пусто,
      • новое состояние: Включить.,

На время своего выполнения триггер деактивируется: это защита от зацикливания на случай, если вы пожелаете перенастроить триггер на синхронизацию базу при каждом ее сохранении, а не при закрытии.

В результате синхронизация будет запускаться только для баз, расположенных непосредственно в папке Base, в которых есть запись KeePassCloudStorage с непустым логином, и только если сервер доступен (т.е. если работает ссылка в первой строке заметок). Учетные данные WebDAV возьмутся из самой этой записи.

Создан триггер Добавить кнопки на панель инструментов:

  • событие: Приложение запущено и готово;
  • действие: Добавить свою кнопку на панель инструментов:
    • идентификатор: btn_Sync,
    • имя: ↑↓,
    • описание: Синхронизировать.

Создан триггер Синхронизировать при нажатии на кнопку синхронизации:

  • событие: Нажата пользовательская кнопка с идентификатором btn_Sync;
  • действие Синхронизировать текущую базу данных:
    • файл/ссылка: {REF:A@T:KeePassCloudStorage},
    • логин: {REF:U@T:KeePassCloudStorage},
    • пароль: {REF:P@T:KeePassCloudStorage}.

Чтобы избежать сбоев при синхронизации, отключена опция Сервис → Параметры → Дополнительно → Использовать файловые транзакции. Когда эта опция включена, KeePass использует при сохранении базы промежуточный временный файл: такой метод сохранения призван предотвратить потерю данных, но иногда из-за него некорректно работает синхронизация. Вместо файловых транзакций, для защиты от потери данных предусмотрено автоматическое резервное копирование.

Вместо myDrive.ch можно использовать другие хранилища, предоставляющие доступ по WebDAV или FTP. Например, для pCloud.com в записи KeePassCloudStorage ссылкой будет https://webdav.pcloud.com/{T-CONV:/{DB_NAME}/Uri/}, а первой строкой заметок — https://my.pcloud.com. Достоинства pCloud.com, по сравнению с myDrive.ch: корректная работа с файловыми транзакциями и бесплатная история файлов. Недостатки: синхронизация работает медленнее; при повторе синхронизации раньше чем через несколько секунд происходит сбой; поддержка WebDAV официально не заявлена.

Обновление программы

Когда KeePass оповестит нас о выходе новой версии, закроем программу, скачаем заново архив с portable-вариантом версии 2.x, архив с переводом и просто заменим все соответствующие файлы в папке программы новыми. Наша настройка при этом сохранится.

Автор программы намеренно не сделал обновление автоматическим, чтобы исключить всевозможные риски подмены. Перед запуском рекомендуется проверить подлинность exe- и dll-файлов программы.

Используем KeePass2Android

Установим KeePass2Android стандартным образом. Затем перейдем в настройку системы и разрешим использование клавиатуры KeePass2Android. Настроим эту клавиатуру: в пункте Языки ввода отметим Английский и Русский, далее на ваш выбор.

Нажмем Открыть файл, выберем HTTPS (WebDAV) и укажем те же данные, что в записи KeePassCloudStorage (ссылку следует указать в явном виде, скопировав ее из KeePass'а клавишами Ctrl+Shift+U). Логин и пароль облачного хранилища можно сохранить, это не самая чувствительная информация. Откроем базу, указав мастер-пароль и ключевой файл, если используется.

Теперь оценим удобство этой программы. Откроем в браузере сайт, который есть в базе. Нажмем Поделиться, выберем KeePass2Android — и нужная запись активизируется. Поставим курсор в поле ввода и сменим клавиатуру на KeePass2Android... которая принимает вид, говорящий сам за себя. Таким образом, этой клавиатурой мы будем легко вводить логины, пароли и дополнительные строковые поля, не прибегая к их копированию в буфер обмена (что было бы довольно опасно).

Клавиатура KeePass2Android

Еще одно облегчение жизни пользователей — быстрая разблокировка: для доступа к базе достаточно ввести три последних символа пароля. Ошиблись — вводим целиком. Функция настраивается и, при желании, отключается.

Чтобы менять клавиатуру было удобнее, рекомендую в разделе Настройка → Приложение → Парольный доступ → Переключение клавиатуры включить опции Автопереключение клавиатуры, Переключить обратно и Сменить после завершения, а опцию Автопереключение только после поиска отключить.

Опытные пользователи могут с помощью ADB задействовать плагин KeyboardSwap — тогда клавиатура будет переключаться вообще сама.

Добавлять записи через KeePass2Android тоже можно, как вариант, через функцию Поделиться. При этом тоже можно пользоваться шаблонами, но предупрежу, что пароль создается не автоматически: нужно нажать кнопку (+) и задать его характеристики.

У некоторых пользователей возникает сбой, если внести изменения через KeePass2Android в базу, которая перед этим была синхронизирована с другим устройством. Можно избежать таких сбоев, если отключить опцию Настройка → Приложение → Обработка файлов → Проверить на наличие изменений и перед каждым изменением синхронизировать базу.

В случае проблем рекомендую закрыть базу и очистить кэш приложения.

Дополнительные возможности

Вернемся в Windows и продолжим разбираться с KeePass'ом.

Автонабор: обычный и нестандартный

Позаботимся, чтобы для наших записей корректно работал автонабор. Для верхней группы задана самая общая последовательность автонабора, которая работает в большинстве случаев: {CLEARFIELD}{UserName}{TAB}{DELAY 100}{Password}, т.е. очистка поля, набор логина, нажатие Tab, короткая задержка и набор пароля (многие добавляют в конце нажатие Enter, но я нахожу это лишним: окончательный шаг лучше выполнить самостоятельно). Эта последовательность наследуется подгруппами и самими записями, поэтому в большинстве случаев все будет Ок. А если авторизация совсем нестандартная?

Во-первых, можно отредактировать саму запись: открыть вкладку Автонабор и указать нужную последовательность. Например, для Google это будет что-то вроде {UserName}{ENTER}{DELAY 1500}{Password}: набрать логин, нажать Enter, выждать полторы секунды и набрать пароль.

Последовательность автонабора KeePass для Google

В последовательности автонабора можно ссылаться не только на логин с паролем, но и на дополнительные поля. Например, для авторизации на ProtonMail нужно вводить логин и два разных пароля — сохраним второй пароль в поле Secret и назначим последовательность {UserName}{TAB}{Password}{ENTER}{DELAY 3000}{S:Secret}: набор логина, нажатие Tab, набор пароля, нажатие Enter, 3-секундная задержка и набор поля Secret. Аналогично вы можете добавлять на вкладку Дополнительно поля с любыми именами на свой вкус и использовать их в автонаборе. Например, если добавить поле PhoneNumber, то в последовательность автонабора можно будет вставить код {S:PhoneNumber}, означающий содержимое этого поля.

Более того, можно назначить разные последовательности автонабора разным окнам или адресам. Например, иногда Google запрашивает только пароль: адрес в таких случаях содержит фрагмент /pwd. Мы можем назначить такой странице автонабор одного пароля: нажмем Добавить, переключимся в режим Match against the URL и укажем в поле Target URL код https://accounts.google.com/*/pwd*, а в поле Своя последовательность код {Password}{ENTER}.

Сопоставление последовательности автонабора адресу

Если понадобится идентифицировать окно по его заголовку, нужно выбрать режим Match against the title.

Также на вкладке Автонабор можно включить или отключить его двойное усложнение. Усложнение автонабора частично защищает от килоггеров, однако его невозможно использовать в некоторых окнах, например, в консольных. Можно настроить усложнение автонабора более тонко, например, включить его в целом для записи, но определенным окнам назначить последовательность без усложнения, наподобие {TCATO:false}{Password}{ENTER}. Код {TCATO:false} в последовательности принудительно отключает усложнение автонабора, а код {TCATO:true} включает — это обеспечивается плагином TCATO_Placeholder.

Во-вторых, можно раскладывать записи по группам в соответствии с автонабором. Так, учетные данные Google или Microsoft можно помещать в группу 2-страничные. В параметрах этой группы (Изменить группу → Автонабор) задана последовательность {UserName}{ENTER}{DELAY 1500}{Password} (вернее, чуть более сложная), и записи ее наследуют. Недостаток этого варианта — на уровне группы нельзя задать автонабор для разных окон.

Последовательность автонабора для группы

В-третьих, можно создавать записи по шаблонам: в них уже прописаны последовательности автонабора, в т.ч. и для определенных окон. Это рекомендуемый вариант.

Новые шаблоны будем создавать в группе templates, беря за основу шаблон _Обычная_запись_. Чтобы редко используемые шаблоны не занимали место в выпадающем списке, можно переместить их в подгруппу unused: когда они понадобятся, просто вернем их в группу templates.

Некоторые окна, делаясь активными, теряют фокус ввода. Например, эту проблему имеет окно Skype. В таких случаях помогает задержка перед автонабором. Чтобы выполнить автонабор с задержкой, нажмем кнопку [A] на панели инструментов, а затем поставим курсор в поле ввода.

Авторизация в Skype с помощью KeePass

С задержкой можно набрать и любое отдельное поле. Нажмем кнопку [C], выберем поле в появившемся окне и поставим курсор — автонабор выполнится в «режиме совместимости»: с задержкой, замедленно и без усложнения. (Пригодится, например, при вводе в окно виртуальной машины или удаленного рабочего стола.)

На другие нестандартные случаи остаются запасные варианты:

  • поставить курсор в поле ввода, вызвать на записи контекстное меню и выбрать подходящую последовательность в разделе Начать автонабор;
  • или кнопкой [F] набрать любое отдельное поле без задержки;
  • или перетащить логин и пароль из KeePass'а в требуемые поля;
  • или временно скопировать любое поле в буфер обмена (через контекстное меню записи).

Если понадобится изменить, например, задержку между вводом логина и пароля на Google, не придется редактировать все гугловские записи — достаточно внести изменения в запись <delays> (группа settings). Задержка для двухстраничной авторизации задается в миллисекундах паролем этой записи, задержка перед началом автонабора — логином, замедление автонабора — ссылкой. Все эти параметры можно регулировать.

Паузы автонабора KeePass

Как это настроено

В базе создана запись <delays> логином 4000, паролем 1500 и ссылкой 100. В различных последовательностях автонабора паузы и замедления заданы ссылками на эту запись. Так, в шаблоне Google и в группе 2-страничные указана последовательность автонабора {CLEARFIELD}{UserName}{ENTER}{DELAY {REF:P@T:<delays>}}{Password}, а в шаблоне _Консоль/игры_ последовательностью {DELAY={REF:A@T:<delays>}}{Password} задан замедленный автонабор.

По-особому сделан автонабор в шаблоне Mail.ru. Для авторизации на e.mail.ru необходимо указать логин вместе с определенным почтовым доменом: mail.ru, bk.ru и др. Если в поле логина вводить полный почтовый адрес, наподобие example@mail.ru, то из-за усложнения автонабора окажется непредсказуемым, как перейти к вводу пароля: один или два раза нажать Tab. Найдено решение: использовать усложнение автонабора не для всего адреса сразу, а по отдельности для имени пользователя и для домена. Эти части выделяются из логина с помощью регулярных выражений, а в случае, если домен не указан в логине, берется домен mail.ru. Чтобы разделить усложнение автонабора, между частями вставлена фиктивная пауза. Вся последовательность:

{CLEARFIELD}{T-REPLACE-RX:/{USERNAME}/([^@]*).*/$1/}{DELAY 0}@{DELAY 0}{T-REPLACE-RX:/{USERNAME}@mail.ru/[^@]*@([^@]*).*/$1/}{TAB}{DELAY 100}{Password}

На случай, если в каком-нибудь другом почтовом сервисе будет такая же особенность авторизации, подобным образом сделан и автонабор в шаблоне _Почта_:

{CLEARFIELD}{T-REPLACE-RX:/{USERNAME}/([^@]*).*/$1/}{DELAY 0}{T-REPLACE-RX:/{USERNAME}/[^@]*(@?).*/$1/}{DELAY 0}{T-REPLACE-RX:/{USERNAME}/[^@]*@?(.*)/$1/}{TAB}{DELAY 100}{Password}.

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

Чтобы активировать подменю Начать автонабор, в разделе Сервис → Параметры → Интерфейс включена опция Показывать дополнительные команды меню автонабора.

Чтобы создать кнопки на панели инструментов, в уже имеющийся триггер Добавить кнопки на панель инструментов добавлены действия:

  • Добавить кнопку... с идентификатором btn_TypeFieldCompatible, именем [C] и описанием Набрать поле... (режим совместимости);
  • Добавить кнопку... с идентификатором btn_DelayedAutoType, именем [A] и описанием Обычный автонабор с задержкой.

Создан триггер Обычный автонабор с задержкой при нажатии на кнопку [A]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_DelayedAutoType,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\ping.exe,
      • аргументы: -n 1 -w {T-REPLACE-RX:/{REF:U@T:<delays>}/^(.*\D.*|)$/4000/} 192.0.2.222,
      • опция Ждать выхода включена,
      • стиль окна: Скрытое;
    • Выполнить автонабор для выбранной записи, поле Последовательность пусто.

Таким образом, пауза реализована отправкой эхо-запроса на несуществующий адрес: в качестве времени ожидания ответа подставляется логин записи <delays>.

Создан триггер Набрать произвольное поле в режиме совместимости при нажатии на кнопку [C]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeFieldCompatible;
  • действие: Выполнить автонабор для выбранной записи с последовательностью {TCATO:false}{DELAY={REF:A@T:<delays>}}{T-REPLACE-RX:!{PICKFIELD}![^\s\S]+!{CMD:#ping -n 1 -w {T-REPLACE-RX:/{REF:U@T:<delays>}/^(.*\D.*|)$/4000/} 192.0.2.222#WS=H#}!}.

Выбор последовательности автонабора

Нередко данные одной записи требуется набирать в разных последовательностях. Выше отмечено, что для этого можно назначить разные последовательности разным окнам. Однако сопоставление окон и последовательностей — не всегда простая задача, иногда даже невыполнимая.

Выше предложено и другое решение — заполнять поля по отдельности: перетаскиванием, копированием или набором с помощью кнопок [F] и [C]. Этот вариант универсальный, но медленный.

Оказывается, возможен и «гибридный» способ: кнопкой [F] или [C] вызвать меню и выбрать целую последовательность автонабора. Разберемся, как это настроить.

Создадим в какой-нибудь записи дополнительное поле с произвольным названием, например, #UsualAutoType. Значением поля сделаем четыре строки:

{UserName}
{TAB}
{Password}
{ENTER}

Если теперь нажать кнопку [F] и выбрать это поле, то выполнится автонабор в последовательности {UserName}{TAB}{Password}{ENTER}. Кнопка [C] сделает то же самое, но с задержкой, медленнее и без усложнения. Аналогичным способом можно добавить другие поля с другими последовательностями.

Ручной выбор последовательности автонабора в KeePass

Важно располагать текстовые выражения на нечетных строках, а клавиатурные — на четных. Так, если последовательность начинается с клавиатурного выражения, первую строку нужно оставить пустой:


{CLEARFIELD} {UserName} {ENTER}{DELAY 2000} {Password} {ENTER}

Как видим, здесь два клавиатурных выражения идут подряд и расположились в одной строке: {ENTER}{DELAY 2000}. Текстовые выражения, идущие подряд, тоже должны располагаться в одной строке:

{UserName}@{S:Domain}
{TAB}
{Password}
Как это настроено

Чтобы кнопки [F] и [C] поддерживали набор произвольных последовательностей, а не только полей, в созданных ранее триггерах изменено лишь значение последовательности автонабора. Однако приведу необходимую настройку полностью.

Создан триггер Добавить кнопки на панель инструментов:

  • событие: Приложение запущено и готово;
  • условия: отсутствуют;
  • действия:
    • Добавить кнопку... с идентификатором btn_TypeField, именем [F] и описанием Набрать поле...;
    • Добавить кнопку... с идентификатором btn_TypeFieldCompatible, именем [C] и описанием Набрать поле... (режим совместимости).

Создан триггер Набрать произвольное поле при нажатии на кнопку [F]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeField,
  • действие: Выполнить автонабор для выбранной записи с последовательностью {T-CONV:/{T-REPLACE-RX:;{T-REPLACE-RX:'{PICKFIELD}'(?<=^(?:.*\n.*\n)*.*)([\+\%\^\~\(\)\[\]\{\}])'{$1}'};[\n\r];;}/Raw/}.

Создан триггер Набрать произвольное поле в режиме совместимости при нажатии на кнопку [C]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeFieldCompatible;
  • действие: Выполнить автонабор для выбранной записи с последовательностью {TCATO:false}{DELAY={REF:A@T:<delays>}}{T-CONV:/{T-REPLACE-RX:;{T-REPLACE-RX:'{T-REPLACE-RX:!{PICKFIELD}!([\s\S]*)!$1{CMD:%ping -n 1 -w {T-REPLACE-RX:_{REF:U@T:<delays>}_^(?:.*\D.*|)$_4000_} 192.0.2.222%O=0,WS=H%}!}'(?<=^(?:.*\n.*\n)*.*)([\+\%\^\~\(\)\[\]\{\}])'{$1}'};[\n\r];;}/Raw/}.

Для работы кнопки [C] установлен плагин TCATO Placeholder и в базу добавлена запись <delays> логином 4000, паролем 1500 и ссылкой 100.

Более сложные приемы

Если вы хотите, чтобы определенная запись всегда запрашивала вариант автонабора (а не только по кнопкам [F] и [C]), задайте на вкладке Автонабор последовательность {T-CONV:/{T-REPLACE-RX:;{T-REPLACE-RX:'{PICKFIELD}'(?<=^(?:.*\n.*\n)*.*)([\+\%\^\~\(\)\[\]\{\}])'{$1}'};[\n\r];;}/Raw/}.

Еще один прием — можно набирать данные одной записи последовательностью, заданной в другой записи. Для этого нужно не только записать последовательность в столбик, но и экранировать открывающие фигурные скобки: каждый символ { заменить на {{}. Например, последовательность {CLEARFIELD}{UserName}{TAB}{Password}{ENTER}{DELAY 3000}{S:Secret}{ENTER} превратится в такой код:


{{}CLEARFIELD} {{}UserName} {{}TAB} {{}Password} {{}ENTER}{{}DELAY 3000} {{}S:Secret} {{}ENTER}

Создадим запись с названием, например, #ProtonMail_AutoType (без символов /, ;, ' и ") и поместим этот код в поле Заметки. Теперь мы можем ссылаться на последовательность автонабора такой строкой: {T-CONV:/{T-REPLACE-RX:;{T-REPLACE-RX:'{T-REPLACE-RX:"{REF:N@T:#ProtonMail_AutoType}"\{\{\}"{"}'(?<=^(?:.*\n.*\n)*.*)([\+\%\^\~\(\)\[\]\{\}])'{$1}'};[\n\r];;}/Raw/} (на месте выделенного фрагмента должно быть ваше название записи).

Можно, например, создать шаблон ProtonMail и указать эту строку в качестве последовательности автонабора. В результате, чтобы изменить автонабор сразу во всех записях, созданных по этому шаблону, будет достаточно отредактировать лишь запись #ProtonMail_AutoType.

Замечу, что изменение основной последовательности автонабора можно реализовать более простым путем — унаследовав автонабор группы. Однако наш способ позволяет менять последовательности, назначенные окнам.

Кстати, окно тоже можно задать в записи #ProtonMail_AutoType: например, указать в поле URL-Ссылка адрес https://mail.protonmail.com/login. Можно указать и более сложное выражение, понадобится лишь заменить каждый символ { на {{}, например: https://{{}URL:HOST}/login

Чтобы теперь сопоставить последовательность адресу, нужно указать в качестве Target URL код {T-REPLACE-RX:"{REF:A@T:#ProtonMail_AutoType}"\{\{\}"{"}, а в качестве последовательности код {T-CONV:/{T-REPLACE-RX:;{T-REPLACE-RX:'{T-REPLACE-RX:"{REF:N@T:#ProtonMail_AutoType}"\{\{\}"{"}'(?<=^(?:.*\n.*\n)*.*)([\+\%\^\~\(\)\[\]\{\}])'{$1}'};[\n\r];;}/Raw/}

Дублирование записей

Еще один способ реализовать выбор последовательности автонабора — создать копию записи и изменить в ней автонабор.

Если вы хотите, чтобы изменение логина/пароля исходной записи автоматически отражалось на ее копии, включите в диалоге дублирования опцию Заменять логины и пароли ссылками. Если хотите, чтобы в копии отражалось также изменение URL, замените в ней URL кодом {REF:A@I:идентификатор} (идентификатор находится на вкладке Свойства исходной записи).

Если нужно, чтобы в копии отражалось изменение дополнительного поля, например, Secret, добавьте к Заметкам исходной записи строку $Secret={T-CONV:/{S:Secret}/Uri/}, а в копии замените значение поля Secret на {T-CONV:/{T-REPLACE-RX:!{REF:N@I:идентификатор}!(?:[\s\S]*\$Secret=(\S*))?[\s\S]*!$1!}/Uri-Dec/}. Аналогичное можно проделать и для нескольких полей. Разумеется, выделенные фрагменты кода нужно будет заменить своими.

Списки эквивалентных доменов

Зачастую один интернет-ресурс имеет несколько страниц авторизации с разными доменными именами. Сделаем так, чтобы KeePass учитывал это при глобальном автонаборе: занесем эти домены в список экивалентных.

Для этого в группе domains создадим новую запись или изменим существующую, перечислив в ее названии эквивалентные домены, разделенные знаком | без пробелов, без протокола и без префикса www. Название должно начинаться и оканчиваться тоже знаком |. Например: |yandex.ru|yandex.by|passport.yandex.ru|. Теперь глобальный автонабор будет работать, даже если в поле URL-ссылка указана страница passport.yandex.ru, а открыта www.yandex.by.

Списки эквивалентных доменов KeePass

Поддержка эквивалентных доменов работает только для записей, созданных по шаблонам. Чтобы она заработала для записей, созданных другим путем, придется выполнить для них такое же преобразование, как при импорте.

Как задать множество эквивалентных доменов регулярным выражением

Записи об эквивалентных доменах в группе domains могут содержать не только однозначные имена, но и регулярные выражения. Регулярное выражение, задающее дополнительное множество доменов, записывается в поле Логин соответствующей записи.

При этом в поле Название должны быть явно перечислены все доменные имена, которые встречаются в поле URL-ссылка у различных учетных записей. Например, если в базе есть учетные записи со ссылками https://passport.yandex.ru/ и https://www.yandex.by/?ncrnd=1851, то для записи об эквивалентных доменах Яндекса подойдет название |passport.yandex.ru|yandex.by| и логин ((mail|passport)\.)?yandex\.(ru|by|ua|com).

Внимание! Регулярное выражение должно быть таким, чтобы ему соответствовали только доменные имена, иначе возникнет угроза фишинга. Например, выражение .*\.livejournal\.com неприемлемо, потому что ему соответствует адрес http://bad-site.com#www.livejournal.com. Более безопасный вариант, охватывающий поддомены 3-го уровня, — выражение [\w\-]*\.livejournal\.com. А чтобы одновременно охватить и сам домен livejournal.com, и все его поддомены всех уровней, подойдет выражение ([\w\-\.]*\.)?livejournal\.com.

Как изменить работу с эквивалентными доменами

За поддержку эквивалентных доменов отвечает запись WindowAssociation в группе settings. Ее пароль определяет ассоциации с оконным заголовком браузера, а ссылка — с адресной строкой.

Можно сделать так, чтобы каждый домен подходил всем своим поддоменам, т.е. чтобы любая запись вида http://example.com подходила странице http://sub.example.com. Для этого отредактируйте запись WindowAssociation:

  • пароль: //(?i) \W*(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//
  • ссылка: //^(?i)(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?$//

Если глобальный автонабор работает слишком медленно, можно упростить поддержку эквивалентных доменов: не проверять их по списку, а лишь выяснять, находится ли сайт в поддомене того, что указан в поле URL-ссылка. Для этого отредактируйте запись WindowAssociation так:

  • пароль: //(?i) \W*(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//
  • ссылка: //^(?i)(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!})(?:[\:\/#]\S*)?$//

Если вы используете для глобального автонабора только плагин WebAutoType, можно сделать пустым пароль в записи WindowAssociation, а если только браузерные расширения — ссылку. Это уменьшит задержки.

Как это настроено

В группе settings создана запись WindowAssociation. В ее поля Пароль и URL-ссылка соответственно вписаны значения:

//(?i) \W*(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//

//^(?i)(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?$//

В различных шаблонах записей задано два целевых окна автонабора (Автонабор → Добавить) с последовательностью по умолчанию и заголовками {T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/} и ??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}.

Как получены эти значения

Предположим, в браузеры Pale Moon и K-Meleon установлены расширения, добавляющие адрес сайта в заголовок. Обычно такие расширения отделяют адрес от остальной части заголовка пробелами и размещают его в конце, перед названием браузера. Некоторые из расширений заключают адрес в скобки и т.п. В качестве адреса они могут брать как полный URL, так и голое имя хоста. В результате можно задать целевое окно автонабора следующим регулярным выражением:

//(?i) \W*(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{T-REPLACE-RX:/{REF:T@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{T-REPLACE-RX:/{REF:U@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/^\{.*//})(?:[\:\/#]\S*)?\W* (?:Pale Moon|K-Meleon)$//

Поясню построение этого выражения. Двойные слеши в начале и в конце сообщают KeePass'у, что строка является регулярным выражением. Код {T-REPLACE-RX:!{URL:HOST}!^www\.!!} отбрасывает от доменного имени префикс www, если он есть. Выражения {REF:T@T:|...|} и {REF:U@T:|...|} ищут запись, название которой содержало бы доменное имя, окруженное знаками |. Если запись найдется, то первое выражение превратится в название этой записи (т.е. в список доменов), а второе — в ее логин (т.е. в регулярное выражение, задающее множество доменов). Если запись не найдется, то выражения {REF:T@T:|...|} и {REF:U@T:|...|} останутся самими собой, и в этом случае выражение {T-REPLACE-RX:/.../^\{.*//} превратит результат поиска логина в пустую строку (в случае успешного поиска оно ничего не изменит). Выражение {T-REPLACE-RX:/.../([^\w\s\|])/\$1/} экранирует списке доменов все спецсимволы, кроме знака |. Получившиеся строки — явный список доменов и регулярное выражение — вместе заключаются в скобки, образуя группу. Код (?=\w) перед этой группой (вкупе с кодом после нее) предписывает выбирать из группы только строки, начинающиеся алфавитно-цифровым символом (таким образом исключаются пустые строки, а также обрывки кода, полученные при неудачном поиске: {REF:T@T: и }). Выражения (?:\w+\:\/\/)?(?:www\.)? и (?:[\:\/#]\S*)? позволяют опознавать адрес в заголовке независимо от того, содержит ли он протокол, префикс www, порт или путь. Фрагменты  \W* и \W*  означают, что адрес отделен от остальной части заголовка пробелами и, возможно, спецсимволами, наподобие скобок, дефисов и т.п. Коду (?:Pale Moon|K-Meleon)$ соответствует название браузера, расположенное в конце заголовка.

Данное выражение специально устроено так, чтобы рассматривался только последний из адресов, содержащихся в заголовке: тот, который подставлен расширением браузера, а не добавлен злоумышленниками в заголовок фишинговой страницы. Однако этот прием не дает серьезной защиты, поскольку фишинговый сайт может изменить свой заголовок скриптом. Можно обеспечить более серьезную защиту от фишинга, если вместо браузерных расширений использовать плагин WebAutoType с должной настройкой.

Для плагина WebAutoType целевое окно задается похожим выражением. Оно отличается знаком ^, указывающим на начало строки, а также отсутствием пробелов и разделителей \W* вокруг адреса и отсутствием названия браузера:

//^(?i)(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{T-REPLACE-RX:/{REF:T@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{T-REPLACE-RX:/{REF:U@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/^\{.*//})(?:[\:\/#]\S*)?$//

Чтобы не дублировать эти выражения в каждой записи, они размещены в полях Пароль и URL-ссылка специальной записи WindowAssociation, а в обычных записях целевые окна автонабора заданы ссылками на эти поля. Поскольку браузеры, заголовок которых содержит адрес, перечисляются в поле Логин этой записи, фрагмент Pale Moon|K-Meleon заменен выражением, которое ссылается на это поле и экранирует спецсимволы: {T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/}. Чтобы в полях записи WindowAssociation не произошло преждевременных преобразований, символ { в выражениях заменен последовательностью {{}. Соответственно, к ссылкам на эти поля применено преобразование, восстанавливающее символ {. Таким образом, в обычных записях заголовок браузера, содержащий адрес страницы, задается выражением {T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/}, а адресная строка, читаемая плагином WebAutoType, — выражением ??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}. Префикс ??:URL: в последнем выражении означает, что оно предназначено для этого плагина.

В параметрах группы domains отключен поиск и автонабор.

Повторю, что во избежание фишинга в разделе Сервис → Параметры → Дополнительно → Автонабор отключены все четыре опции вида Считать запись подходящей....

Операции с прикрепленными файлами

Любая запись в базе KeePass'а может содержать не только текстовую информацию, но и файлы (Дополнительно → Прикрепленные файлы). Разумеется, они хранятся зашифрованными, как и прочие данные. Прикрепленные файлы можно извлекать, сохраняя в отдельное место; можно извлекать во временный каталог с EFS-шифрованием, чтобы открывать и редактировать в сторонних программах. Более того, их можно просматривать в самом KeePass'е, не извлекая: встроенный просмотрщик KeePass'а умеет показывать изображения, html-страницы, текст в формате RTF, простой текст, причем в разных кодировках, а также двоичные файлы в HEX-виде.

К примеру, вы можете вложить в запись сканы документов, а затем просмотривать их через контекстное меню записи: Прикрепленные файлы → Имя_файла.

И это еще не все — KeePass имеет встроенный редактор форматированного текста! Можно редактировать RTF-файл, присоединенный извне, а можно создать его с нуля (Добавить → Прикрепить пустой файл). При создании указывается имя и расширение: в случае *.txt текст будет обычным, в случае *.rtf форматированным. Такой файл становится своеобразным полем, вмещающим большой объем текста, в т.ч. форматированного.

Как просмотр, так и редактирование файлов KeePass'ом выполняется в памяти, без извлечения их на диск.

Все ходы записаны

KeePass хранит не только текущее состояние ваших учетных данных, но и историю их изменений. В любой записи вы можете открыть вкладку История и просмотреть до 10 ее версий, а при необходимости и откатить запись к любой из них. (Кстати, записи <Генератор паролей> это тоже касается: если вы сгенерировали новый пароль, а нужно воспользоваться старым, то это легко сделать.)

Если какая-либо запись слишком объемна (имеет прикрепленные файлы), то история сохранит меньшее число ее версий: общим размером до 6 МБ.

Если вы удалите запись целиком — она всего лишь отправится в группу Корзина, откуда ее всегда можно перетащить обратно. Для безвозвратного уничтожения записи ее следует повторно удалить, когда она в Корзине.

Любые изменения базы сразу сохраняются на диске. (Опять же, это касается и записи <Генератор паролей>: каждое создание пароля немедленно фиксируется.) Если какая-либо запись открыта и редактируется, то изменения сохранятся после закрытия ее окна.

После каждого сохранения базы создается ее резервная копия. В папке Base\BackUp для каждой базы хранится 20 ее последних версий.

Как изменить параметры сохранения, резервного копирования и хранения истории

При желании вы можете отключить автосохранение базы: в окне Сервис → Триггеры → Автоматически сохранять изменения отключите опцию Разрешен (другие параметры менять не нужно). Включение выполняется аналогично.

Если вы хотите, чтобы база все же сохранялась автоматически, но только при закрытии, замените в триггере Автоматически сохранять изменения событие Состояние интерфейса пользователя обновлено на Закрытие файла базы данных (до сохранения). При этом автосохранение будет работать только для баз в папке Base.

Другой способ — вообще отключить этот триггер и включить опцию Автоматически сохранять изменения при закрытии/блокировке базы данных (Сервис → Параметры → Дополнительно), однако тогда изменения будут сохраняться в любых базах, что не всегда желательно.

Вы можете изменить количество версий каждой отдельной базы, хранящихся в папке BackUp: оно задается логином записи <settings> в группе settings. Логин 0 отключает резервное копирование данной базы.

Если вы пожелаете, чтобы резервное копирование происходило не после каждого сохранения базы, а только при ее открытии, измените соответствующий триггер на вкладке События: замените событие Сохранен файл базы данных на Открыт файл базы данных, фильтр оставьте пустым.

Параметры хранения истории и использования корзины задаются в настройке базы (Файл → Параметры базы данных).

Если вы захотите облегчить базу, удалив из нее всю историю, — временно установите нулевой размер истории, выполните синхронизацию на всех устройствах, восстановите параметры истории и повторите синхронизацию. Однако для удаления из базы неиспользуемых значков (через меню Сервис → База данных) придется непосредственно заменить файл в облачном хранилище и на всех устройствах, иначе синхронизация вернет эти значки. Во избежание случайной синхронизации с «забытым» устройством можно переименовать базу, или изменить ее расположение в облачном хранилище, или завести новую учетную запись на хранилище.

Как это настроено

В базе параметры хранения истории и использования корзины оставлены по умолчанию. Чтобы задать число хранимых версий базы, создана запись <settings> с логином 20.

Для сохранения базы при каждом ее изменении в разделе Сервис → Триггеры создан триггер Автоматически сохранять изменения:

  • событие: Состояние интерфейса пользователя обновлено,
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • В базе данных есть несохраненные изменения, база — Текущая;
  • действие: Сохранить текущую базу данных.

Для резервного копирования базы добавлен триггер Автоматически создавать резервную копию:

  • событие: Сохранен файл базы данных, фильтр оставлен пустым;
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • Строка:
      • опция Отрицание включена,
      • строка: {REF:U@T:<settings>},
      • операция: Равно,
      • значение: 0;
  • действие: Выполнить команду/ссылку:
    • файл/ссылка: %windir%\System32\wscript.exe,
    • аргументы: "{APPDIR}\BackUp.js" "{DB_NAME}" {T-REPLACE-RX:/{REF:U@T:<settings>}/^(.*\D.*|)$/20/},
    • опция Ждать выхода включена.

Этот триггер использует для резервного копирования скрипт BackUp.js:

(function() {
	if (WScript.Arguments.Count() != 2) {
		WScript.Echo("Использование: BaskUp.js <имя_файла> <количество_версий>");
		return;
	}
	var name = WScript.Arguments(0);
	var backUpCount = +WScript.Arguments(1);
	
	var appDir = WScript.ScriptFullName.substring(0,
			WScript.ScriptFullName.length - WScript.ScriptName.length - 1);
	var baseDir = appDir + "\\Base";
	var backUpDir = baseDir + "\\BackUp";
	
	var FSO = WScript.CreateObject("Scripting.FileSystemObject");
	try {
		var file = FSO.getFile(baseDir + "\\" + name);
		if (file.Size == 0) {
			return;
		}
	} catch (e) {
		return;
	}
	try {
		if (!FSO.FolderExists(backUpDir)) {
			FSO.CreateFolder(backUpDir);
		}
	} catch (e) {
		WScript.Echo("Невозможно создать каталог \"" + backUpDir + "\"");
		return;
	}
	var d = new Date();
	var toXX = function(x) {return x < 10 ? "0" + x : x;}
	var prefix = d.getUTCFullYear()
			+ "." + toXX(d.getUTCMonth() + 1)
			+ "." + toXX(d.getUTCDate())
			+ "-" + toXX(d.getUTCHours())
			+ "." + toXX(d.getUTCMinutes())
			+ "." + toXX(d.getUTCSeconds())
			+ "-UTC-";
	try {
		file.Copy(backUpDir + "\\" + prefix + name, true);
	} catch (e) {
		WScript.Echo("Невозможно создать резервную копию файла \"" + name + "\"");
		return;
	}
	try {
		var files = [];
		var en = new Enumerator(FSO.GetFolder(backUpDir).Files)
		for ( ; !en.atEnd(); en.moveNext()) {
			var fileName = en.item().Name;
			if (fileName.length == prefix.length + name.length
					&& fileName.slice(prefix.length) == name) {
				files.push(en.item());
			}
		}
		files.sort(function(f1, f2) {
			return f1.Name < f2.Name ? -1 : (f1.Name > f2.Name ? 1 : 0);
		});
		for (var i = 0; i < files.length - backUpCount; ++i) {
			files[i].Delete();
		}
	} catch (e) {
		WScript.Echo("Невозможно удалить старые версии файла \"" + name + "\"");
	}
})();
Вариант резервного копирования без внешнего скрипта

Можно обойтись без скрипта BackUp.js. Понадобится лишь изменить в триггере Автоматически создавать резервную копию действие Выполнить команду/ссылку:

  • файл/ссылка: %comspec%,
  • аргументы: /c "for %i in ("{DB_PATH}") do if "%~zi" GTR "0" (md "{DB_DIR}\BackUp"& copy "%~i" "{DB_DIR}\BackUp\{DT_UTC_YEAR}.{DT_UTC_MONTH}.{DT_UTC_DAY}-{DT_UTC_HOUR}.{DT_UTC_MINUTE}.{DT_UTC_SECOND}-UTC-%~nxi" /y& for /f "skip={T-REPLACE-RX:/{REF:U@T:<settings>}/^(.*\D.*|)$/20/} tokens=*" %X in ('dir "{DB_DIR}\BackUp\*-UTC-%~nxi" /b /o:-n') do del "{DB_DIR}\BackUp\%X" /q)",
  • опция Ждать выхода включена;
  • стиль окна: Скрытое.

Подобный способ предложен в официальном руководстве.

Однако вариант со скриптом BackUp.js более удобен при жесткой настройке Comodo Internet Security.

Данные триггеры работают только для баз, расположенных непосредственно в папке Base.

Когда открыто одновременно несколько баз и не используется автосохранение при каждом изменении, дополнительно нужен триггер Автоматически активировать базу, который приведен в настройке синхронизации. Этот триггер должен быть расположен выше других.

Дополнительная настройка защиты

Ваш мастер-пароль по-настоящему сложен? Уверены, что даже часть его никогда не попадет в хакерские словари? Прибегнем к небольшой подстраховке: в свойствах базы (Файл → Параметры базы данных → Безопасность) увеличим количество циклов шифрования. Там же его можно рассчитать, чтобы не перегнуть палку, сделав открытие и сохранение базы чересчур медленным. С учетом частого сохранения базы и ее использования на мобильных устройствах, я выставил миллион. Таким образом, KeePass способен усилить защиту небезупречных паролей. Но злоупотреблять этим не будем: сложность и секретность мастер-пароля — наше все.

Чтобы затруднить кражу данных из самой программы, в ней запрещены некоторые опасные операции. Для этого в окне Сервис → Параметры → Политика отключены опции: Экспорт — без ключа, Печать, Печать — без ключа, Копирование записей целиком и Изменение мастер-ключа — без ключа.

Во избежание кражи паролей из памяти KeePass'а, он настроен на завершение своей работы вместо блокировки базы (Сервис → Параметры → Безопасность → Всегда выходить вместо блокирования).

Также программа настроена на блокировку (вернее, на выход) после 5 минут общего бездействия, при переключении пользователя, при переходе в спящий режим и при изменении режима удаленного доступа (Сервис → Параметры → Безопасность). На вкладке Интерфейс установлено нулевое значение опции Запоминать недавно использованные файлы.

Импорт базы данных

Если вы уже пользуетесь каким-нибудь менеджером паролей, в т.ч. KeePass'ом, то скорее всего, накопили много сохраненных паролей. Их нетрудно перенести в нашу новую базу.

Экспортируем пароли из прежнего менеджера в файл, а затем откроем KeePass и импортируем этот файл в предложенную базу (Файл → Импорт). При этом важно правильно указать формат файла и каким менеджером паролей он был создан. Если KeePass спросит о способе импорта, выберем вариант Новые идентификаторы.

Однако для записей, которые либо импортированы из сторонней базы, либо созданы не по шаблонам, не будет работать усложнение автонабора и поддержка эквивалентных доменов.

Если таких записей немного, их можно отредактировать по отдельности. Чтобы задействовать двойное усложнение автонабора, нужно включить соответствующую опцию на вкладке Автонабор. Чтобы включить поддержку эквивалентных доменов, нужно на этой же вкладке нажать Добавить и вставить в поле Целевое окно строку {T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/}, затем повторно нажать Добавить, переключиться в режим Match against URL и вставить в поле Target URL строку {T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}.

Ручное редактирование записей, импортированных в KeePass

Если же требуется отредактировать много записей, удобнее воспользоваться XML-заменой:

  1. создадим в базе группу toImprove;
  2. переместим в эту группу все записи, для которых нужно активировать усложнение автонабора и глобальный автонабор (можно перетаскивать как записи, так и целые группы с подгрупами);
  3. чтобы включить усложнение автонабора, откроем окно Сервис → База данных → XML-замена и выполним замену с параметрами:
    • Узлы дерева: //Group[Name="toImprove"]//Entry/AutoType/DataTransferObfuscation
    • Действие: Заменить данные
    • Данные: Текст
    • Искать: 0
    • Заменить на: 1
  4. чтобы настроить записи для глобального автонабора, откроем это же окно и выполним замену с параметрами:
    • Узлы дерева: //Group[Name="toImprove"]//Entry/AutoType
    • Действие: Заменить данные
    • Данные: Внешний XML
    • Искать: </AutoType>\Z
    • Заменить на: <Association><Window>{T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/}</Window><KeystrokeSequence /></Association><Association><Window>??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}</Window><KeystrokeSequence /></Association></AutoType>
    • опция Регулярное выражение включена;
  5. расформируем группу toImprove: переместим записи Google и Microsoft в группу 2-страничные, записи Mail.ru в одноименную группу, другие почтовые записи в группу Почта и т.д.;
  6. удалим или переименуем группу toImprove.

Импорт данных в KeePass

Часть 2

Комментарии и отзывы

Добавляя комментарий, ознакомьтесь с Правилами сообщества