#1 před 3 lety

hwnd
Člen
Registrovaný: 26. 4. 2009
Příspěvky: 5

Bezpečné aktualizace

Dobrý den,
vyvíjím takový program (PHP), který bude obsahovat aktualizační nástroj. Aktualizační nástroj se každou noc podívá na server, jestli je program aktuální. Není-li program aktuální stáhne si potřebná data. Bojím se však o bezpečnost. Zde bych se s vámi chtěl podělit o můj koncept na průběh aktualizací.

Příprava na aktualizace

  1. uživatel programu navštíví jeho webové stránky a nechá si vygenerovat „aktualizační klíč“, server si jej uloží do databáze
  2. tento klíč pak vloží do programu

Aktualizační klíč bude rozdělen na 2 poloviny.
Ta 1. polovina bude sloužit pro autorizaci klienta, ta 2. polovina pro autorizaci serveru.

  1. klient se připojí na aktualizační server
  2. server vrátí náhodný řetězec (klíč pro hmac)
  3. program zakóduje 1. polovinu aktualizačního klíče pomocí hash_hmac a pošle jej serveru
  4. server si v databázi najde příslušný záznam a zapíše si k němu IP adresu klienta
  5. klient zašle na server náhodný řetězec
  6. server mu pošle hmacem zakódovanou 2. polovinu aktualizačního klíče
  7. klient si to zkontroluje a zapíše do databáze IP adresu serveru
  8. pokud by cokoli nesouhlasilo, bude program vyžadovat nový aktualizační klíč

Od této chvíle znají obě strany své IP adresy. V případě, že by došlo ke změně IP adres, bude program vyžadovat nový aktualizační klíč.

Průběh aktualizací

  1. cron spustí aktualizační nástroj
  2. aktualizační nástroj se připojí na server a zkontroluje si IP
  3. server pošle náhodný řetězec – klíč
  4. klient vrátí hmac 1. poloviny, taky mu pošle náhodný řetězec
  5. server vrátí hmac 2. poloviny a aktuální čísla revizí všech komponent
  6. klient si ověří platnost hmacu a aktuálnost komponent

    není-li nějaká komponenta aktuální, požádá o novou verzi

  7. server mu pošle případné aktualizace

Myslíte si, že je tento způsob dostatečně bezpečný? Všechny připomínky a nápady jsou vítány.

Máte nějaké nápady jak tento způsob realizovat pomocí PHP? U PHP mě napadá jenom HTTP přes cURL.

 

Zápatí