在数字时代,密码管理是保护个人信息安全的关键。KeePass是一个流行的开源密码管理器,它提供了一个安全的方式来存储和管理密码。然而,即使是最好的密码管理器也需要额外的安全措施来防止未经授权的访问。MinLock就是这样一个插件,它为KeePass 2.x版本提供了额外的锁定功能。
MinLock是一个简单易用的插件,它能够在KeePass最小化后立即重新锁定。这种机制特别有用,因为当KeePass被锁定并最小化后,如果使用全局自动输入功能,它可能会解锁KeePass并使其保持解锁状态。MinLock通过在KeePass窗口最小化后几乎立即重新锁定,从而解决了这个问题。
要使用MinLock,只需下载并解压PLGX插件到KeePass目录中。KeePass有一个简短的页面介绍2.x版本的插件开发,可以在那里找到更多信息。
KeePass本身具有基于计时器的自动锁定功能(例如,空闲时间),这些功能可以实现与MinLock类似的效果,但并不完全相同。MinLock通过在KeePass窗口最小化后立即重新锁定,提供了更紧密的安全性。
MinLock插件的完整类代码如下:
using System;
using System.Windows.Forms;
using KeePass.Plugins;
namespace MinLock
{
public sealed class MinLockExt : Plugin
{
IPluginHost m_Host;
Timer m_Timer;
public override bool Initialize(IPluginHost host)
{
m_Host = host;
m_Host.MainWindow.FileOpened += MainWindow_FileOpened;
return base.Initialize(host);
}
public override void Terminate()
{
KillTimer();
base.Terminate();
}
void KillTimer()
{
if (m_Timer != null)
{
m_Timer.Dispose();
m_Timer = null;
}
}
void MainWindow_FileOpened(object sender, KeePass.Forms.FileOpenedEventArgs e)
{
if (m_Timer == null && m_Host.MainWindow.WindowState == FormWindowState.Minimized)
{
m_Timer = new Timer();
m_Timer.Interval = 1;
m_Timer.Tick += Timer_Tick;
m_Timer.Start();
}
}
void Timer_Tick(object sender, EventArgs e)
{
KillTimer();
if (m_Host.MainWindow.WindowState == FormWindowState.Minimized &&
m_Host.MainWindow.IsAtLeastOneFileOpen())
{
m_Host.MainWindow.LockAllDocuments();
}
}
}
}
这个插件在文件被打开时响应(对于KeePass来说,这通常意味着它已经打开了其安全数据库文件)。然后,KeePass有一些当前调用堆栈中需要完成的事情。MinLock并没有在FileOpened事件处理程序中立即锁定,而是使用了一个Windows.Forms.Timer来等待一小段时间后再重新锁定KeePass工作区。计时器不能在底层消息泵运行之前触发,因此,通过这种方式,插件不会中断KeePass在事件触发的相同调用堆栈中。KeePass继续愉快地进行,似乎完成了与数据库相关的所有操作,然后不久之后,消息泵运行,计时器的tick事件触发,MinLock重新锁定KeePass。
MinLock是为KeePass版本2.19开发的。有关PLGX与KeePass未来版本的兼容性的详细信息,请参见插件开发页面。
这种方法非常有效,因为MinLock在KeePass完成自动输入之前就重新锁定了。KeePass插件的开发非常简单。MinLock可能更适合作为一个官方的KeePass基于选项的功能,而不是作为一个插件。