- Početna
- Dokumenti
- Instalacija i konfiguracija
- Preduzeće
- Verzija Dockera
- Validacija MD5 potpisa za sigurne linkove u ONLYOFFICE Docs
Validacija MD5 potpisa za sigurne linkove u ONLYOFFICE Docs
Pregled
ONLYOFFICE Docs koristi sigurne linkove sa MD5 potpisima kako bi zaštitio pristup keširanim fajlovima. Ovi linkovi sadrže parametre md5 i expires i generišu se interno od strane CoAuthoring servisa i validiraju putem NGINX-a.
Da biste validirali ili reprodukovali ove MD5 hešove (npr. za implementaciju sopstvenog proxy-ja ili sigurnosnog sloja), pratite uputstva ispod.
Generisanje MD5 potpisa
MD5 potpis se računa koristeći sledeću formulu:
md5 = BASE64URL(MD5(<expires><uri><secret>)) Gde je:
<expires>numerička vrednost izexpiresparametra u URL-u;<uri>puna putanja zahteva (bez domena ili niza upita), počevši od/cache/files/...;<secret>zajednička tajna koju koristi ONLYOFFICE Docs, obično postavljena putemSECURE_LINK_SECRETpromenljive okruženja ili u konfiguracionim fajlovima.
Da biste generisali heš, pratite ove korake:
- Konkatenirajte
<expires>,<uri>i<secret>u jedan string. - Izračunajte binarni MD5 (npr.
md5($string, true)u PHP-u). - Enkodujte ga koristeći Base64.
-
Pretvorite Base64 string u URL-bezbedan format tako što ćete:
- zameniti
+sa-; - zameniti
/sa_; - ukloniti završne
=.
- zameniti
Konfigurisanje tajne za siguran link
Tajna koja se koristi za generisanje potpisa sigurnog linka može se postaviti na tri načina:
local.json razlikuje od one u ds.conf, validacija linka će propasti. Ovo je čest problem nakon ažuriranja — uverite se da su vrednosti usklađene. -
Promenljiva okruženja (samo za Docker)
Postavite promenljivu okruženja prilikom pokretanja kontejnera:
SECURE_LINK_SECRET=your_secret_here -
Konfiguracioni fajl local.json
Postavite storage.fs.secretString parametar u
local.jsonfajlu, koji se može pronaći na sledećoj putanji:- Za Windows -
%ProgramFiles%\ONLYOFFICE\DocumentServer\config\local.json - Za Linux -
/etc/onlyoffice/documentserver/local.json - Za Docker -
/etc/onlyoffice/documentserver/local.json(unutar Docker kontejnera)
{ "storage": { "fs": { "secretString": "your_secret_here" } } } - Za Windows -
-
NGINX konfiguracioni fajl
Postavite
$secure_link_secretparametar uds.conffajlu, koji se može pronaći na sledećoj putanji:- Za Windows -
%ProgramFiles%\ONLYOFFICE\DocumentServer\nginx\conf\ds.conf - Za Linux -
/etc/onlyoffice/documentserver/nginx/ds.conf - Za Docker -
/etc/onlyoffice/documentserver/nginx/ds.conf(unutar Docker kontejnera)
secure_link_md5 "$secure_link_expires$uri$secure_link_secret"; secure_link $arg_md5,$arg_expires; - Za Windows -
Primer
Razmotrimo sledeći primer:
https://example.com/cache/files/data/31.172.71.235__172.18.0.2new.docx1749812378403_5169/output.docx/output.docx?md5=NS2_divLHhVBHdvvU9vbwA&expires=1749813362
Korak 1. Ekstrakcija parametara
Izvucite sledeće parametre iz URL-a:
expires: "1749813362";uri: "/cache/files/data/31.172.71.235__172.18.0.2new.docx1749812378403_5169/output.docx/output.docx";secret: "eNk2pNcaoWYTkpR7YWxe".
Korak 2. Validacija MD5 koristeći PHP
Sledeći PHP primer pokazuje kako generisati i validirati MD5 potpis:
<?php $expires = "1749813362"; $uri = "/cache/files/data/31.172.71.235__172.18.0.2new.docx1749812378403_5169/output.docx/output.docx"; $secure_link_secret = "eNk2pNcaoWYTkpR7YWxe"; // Formirajte string:<expires><uri><secure_link_secret> $string_to_hash = $expires . $uri . $secure_link_secret; // Izračunajte MD5 heš $md5_hash = md5($string_to_hash, true); // Enkodujte u Base64 (URL-bezbedan) $base64_hash = str_replace( ['+', '/', '='], ['-', '_', ''], base64_encode($md5_hash) ); // Ispis rezultata echo "String za heširanje: " . $string_to_hash . "\n"; echo "Generisani MD5 heš: " . $base64_hash . "\n"; echo "Očekivani MD5 heš: NS2_divLHhVBHdvvU9vbwA\n"; ?> Korak 3. Poređenje potpisa
Funkcija izračunava sledeći MD5 potpis:
NS2_divLHhVBHdvvU9vbwA Ovaj potpis odgovara md5 parametru u URL-u. Stoga, zahtev je validan i može biti potvrđen.
Poznati problemi
- Uvek koristite URI, a ne ceo URL.
- Uverite se da vaša tajna odgovara konfiguraciji.
- Nemojte koristiti
urlExpiresparametar za heširanje. Ovaj parametar je definisan udefault.json(ne ulocal.json) i kontroliše konfiguraciju trajanja linka, a ne vrednost korišćenu u MD5 formuli. Uvek koristite stvarnuexpiresvrednost iz niza upita URL-a. - Osigurajte da je Base64 enkodiranje URL-bezbedno.