Občas sa stane, že potrebujeme aby užívatelia mali prístup k nejakým dátam, no zároveň chceme zabrániť tomu, aby ich šírili ďalej. To samozrejme úplne riešiť nejde (ťažko totiž niekomu zabrániť, aby si vzal k počítaču foťák, otvoril si dané údaje a urobil fotku), je však možné ošetriť to pre menej kreatívnych užívateľov a tým kreatívnym aspoň skomplikovať situáciu. Ďalší text sa týka len zabezpečenia v rámci Lotus Notes klienta
Najskôr malé zhrnutie, ako je možné z databázy dostať dáta štandardnými spôsobmi:
1. Kópia / replika celej databázy
3. Kopírovanie dokumentov – Ctrl + C, Ctrl + V
4. Export – buď pohľadu, alebo nejakého konkrétneho dokumentu
5. Tlač
6. Screenshot
Kópia / replika celej databázy
S týmto nám pomôže ACL, konkrétne možnosť “Replicate or copy documents”, ktorá sa dá nastaviť u užívateľov od Depositora až po Managera. Ak daný užívateľ túto voľbu v ACL nemá zapnutú, každý pokus o vytvorenie kópie alebo repliky skončí chybovou hláškou “You are not authorized to perform this operation.”. Toto nastavenie zabráni aj kopírovaniu dokumentov pomocou Ctrl+C, Ctrl+V.
Kopírovanie dokumentov, exporty, tlač
Druhý spôsob ako zabrániť kopírovaniu dokumentov, je nenápadný checkbox na poslednej záložke nastavenia formulára.
Dokumenty vytvorené pomocou formulára s takýmto nastavením majú automaticky vytvorené pole s názvom $KeepPrivate a hodnotou 1. Takéto dokumenty nie je možné vytlačiť, kopírovať ani exportovať nezávisle na právach pridelených v ACL. Po menšom testovaní som ale zistil, že toto nastavenie má 2 nedostatky.
Dokumenty označené $KeepPrivate je možné vytlačiť v pohľade voľbou Print selected view. Ďalším nedostatkom je, že toto pole je možné zmazať napr. agentom, alebo magickým tlačítkom. Vyjadrenie IBM je, že sa nejedná o “security feature”, takže to nie je vhodné na zabezpečenie, každopádne je dobré vedieť, že niečo také existuje.
Takto zabezpečené je možné odosielať aj maily, stačí v Delivery options zapnúť Prevent copying.
Screenshot
Užívateľom s operačným systémom Windows je možné zakázať vytváranie screenshotov pomocou nasledujúceho kódu v LotusScripte. Autorom je Charles Robinson a viac informácií sa je možné dozvedieť v jeho článku (v angličtine).
Napr. ak nechceme aby užívatelia vytvárali screenshoty v nejakom pohľade, pridáme do Declarations pohľadu tento kód.
Declare Function FindWindowByClass Lib "user32" Alias "FindWindowA" (Byval lpClassName As String, Byval lpWindowName As Long) As Long Declare Function GetTickCount Lib "kernel32" () As Long Declare Function RegisterHotKey Lib "user32" (Byval hWnd As Long, Byval id As Long, Byval fsModifiers As Long, Byval vk As Long) As Long Declare Function UnregisterHotKey Lib "user32" (Byval hWnd As Long, Byval id As Long) As Long Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (Byval lpString As String) As Long Declare Function GlobalDeleteAtom Lib "kernel32" (Byval nAtom As Long) As Long Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long Const VK_SNAPSHOT = &H2C Const MOD_ALT = &H1 Const MOD_CONTROL = &H2 Const MOD_SHIFT = &H4 Dim g_hWnd As Long Dim g_Print As Long Dim g_AltPrint As Long Dim g_CtrlPrint As Long Dim g_ShiftPrint As Long
Do QueryOpen:
'Get a handle to the Notes client window so you can tell Windows which window to hook the hotkeys to g_hWnd = FindWindowByClass("Notes", 0) 'Register new identifiers for our custom hotkeys. GetTickCount returns a number that's based on the system clock, ' so you know it won't be duplicated. g_Print = GlobalAddAtom(Cstr(GetTickCount)) g_AltPrint = GlobalAddAtom(Cstr(g_Print) + Cstr(GetTickCount)) g_CtrlPrint = GlobalAddAtom(Cstr(g_AltPrint) + Cstr(GetTickCount)) g_ShiftPrint = GlobalAddAtom(Cstr(g_CtrlPrint) + Cstr(GetTickCount)) 'Now register the hotkeys Call RegisterHotKey(g_hWnd, g_Print, 0&, VK_SNAPSHOT) 'PrintScreen Call RegisterHotKey(g_hWnd, g_AltPrint, MOD_ALT, VK_SNAPSHOT) 'Alt+PrintScreen Call RegisterHotKey(g_hWnd, g_CtrlPrint, MOD_CONTROL, VK_SNAPSHOT) 'Ctrl+PrintScreen Call RegisterHotKey(g_hWnd, g_ShiftPrint, MOD_SHIFT, VK_SNAPSHOT) 'Shift+PrintScreen
A do QueryClose:
Call UnregisterHotKey(g_hWnd, g_Print) Call UnregisterHotKey(g_hWnd, g_AltPrint) Call UnregisterHotKey(g_hWnd, g_CtrlPrint) Call UnregisterHotKey(g_hWnd, g_ShiftPrint) 'Delete our custom entries Call GlobalDeleteAtom(g_Print) Call GlobalDeleteAtom(g_AltPrint) Call GlobalDeleteAtom(g_CtrlPrint) Call GlobalDeleteAtom(g_ShiftPrint)
Hlavnou nevýhodou tohoto prístupu je, že vytváranie screenshotov je vypnuté pre celý systém až do zavolania kódu ktorý je v predchádzajúcom príklade v QueryClose, čo môže niektorých užívateľov trochu zmiasť. Ďalej tento kód funguje na princípre preregistrovania klávesových skratiek, čo znamená, že bude stále možné vytvárať screenshoty rôznymi utilitami.
Ak by ste vedeli o nejakej ďalšej technike, ktorú som v článku nespomínal, podeľte sa o ňu pomocou komentáru a ja článok rád rozšírim.
#1Martin
http://martinhumpolec.cz