Ovaj članak je preveden pomoću veštačke inteligencije

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 iz expires parametra 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 putem SECURE_LINK_SECRET promenljive okruženja ili u konfiguracionim fajlovima.

Da biste generisali heš, pratite ove korake:

  1. Konkatenirajte <expires>, <uri> i <secret> u jedan string.
  2. Izračunajte binarni MD5 (npr. md5($string, true) u PHP-u).
  3. Enkodujte ga koristeći Base64.
  4. Pretvorite Base64 string u URL-bezbedan format tako što ćete:

    • zameniti + sa -;
    • zameniti / sa _;
    • ukloniti završne =.

Konfigurisanje tajne za siguran link

Tajna koja se koristi za generisanje potpisa sigurnog linka može se postaviti na tri načina:

Važno Sve tri metode konfiguracije moraju koristiti istu vrednost tajne. Ako se tajna u 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.json fajlu, 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"     }   } }
  • NGINX konfiguracioni fajl

    Postavite $secure_link_secret parametar u ds.conf fajlu, 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;

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 urlExpires parametar za heširanje. Ovaj parametar je definisan u default.json (ne u local.json) i kontroliše konfiguraciju trajanja linka, a ne vrednost korišćenu u MD5 formuli. Uvek koristite stvarnu expires vrednost iz niza upita URL-a.
  • Osigurajte da je Base64 enkodiranje URL-bezbedno.
Članak sa oznaka:
Pregledajte sve oznake