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
- uživatel programu navštíví jeho webové stránky a nechá si vygenerovat
„aktualizační klíč“, server si jej uloží do databáze
- 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.
- klient se připojí na aktualizační server
- server vrátí náhodný řetězec (klíč pro hmac)
- program zakóduje 1. polovinu aktualizačního klíče pomocí hash_hmac a
pošle jej serveru
- server si v databázi najde příslušný záznam a zapíše si k němu IP
adresu klienta
- klient zašle na server náhodný řetězec
- server mu pošle hmacem zakódovanou 2. polovinu
aktualizačního klíče
- klient si to zkontroluje a zapíše do databáze IP adresu serveru
- 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í
- cron spustí aktualizační nástroj
- aktualizační nástroj se připojí na server a zkontroluje si IP
- server pošle náhodný řetězec – klíč
- klient vrátí hmac 1. poloviny, taky mu pošle náhodný řetězec
- server vrátí hmac 2. poloviny a aktuální čísla revizí všech
komponent
- klient si ověří platnost hmacu a aktuálnost komponent
není-li nějaká komponenta aktuální, požádá o novou verzi
- 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.