Fórum | MyPower.CZ | Obnovitelné zdroje energie - energetická soběstačnost | Poslední návštěva: sob pro 03, 2022 3:18 am


Zápisky z vývoje - HTTP POST a COOKIES

Poznatky z vlastních modifikací zdrojového kódu, tutoriály, nápady, vylepšení, rozšíření, nové funkce, pluginy, speciální úpravy

Zápisky z vývoje - HTTP POST a COOKIES

Příspěvekod mypower.cz » čtv črc 23, 2015 9:53 pm

Tak přátelé,
po poněkud delší odmlce (asi tak 2 roky) jsem se opět vrátil k aktivnímu vývoji Micrologu a po několika dnech vývoje po večerech jsem implementoval funkčnost HTTP Cookies a metody HTTP POST, což je nezbytnost, chceme-li implementovat zabezpečení webového rozhraní Micrologu pomocí hesla.

POST bylo nutno implementovat zejména kvůli faktu, že Cookies se v HTTP requestu pomocí metody GET posílají až za požadavkem GET, což je první řádek HTTP requestu.

Typicky:

Kód: Vybrat vše
GET /nejakydotaz?parametry HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123


Vzhledem k omezené paměti arduina a někdy velmi dlouhým parametrům v řádku s GET je nutno tyto parametry zpracovávat postupně po částech hned poté co přicházejí. V Micrologu je na toto ve funkci zabezpečující provoz webserveru pole typu char o délce maximálně 200 bajtů. Můžeme tedy uložit maximálně 200 bajtovou dávku parametrů a poté je už vážně musíme zpracovat, neboť další bajty z parametru nemáme kam uložit. Například program displaye při uložení z www rozhraní znamená velmi dlouhý parametr v dotazu GET. Ten ale zrovna v případě ukládání programu displaye zpracováváme po dvou bajtech přímým zápisem do EPROM hned poté co příjdou z ethernetového rozhraní. Navíc například i zápis programu displaye může proběhnout až teprve poté co si ověříme, že je uživatel skutečně přihlášen. Ověření bude probíhat pomocí Cookies.

Po přihlášení vznikne tedy takzvaný session a do odhlášení se nebude neustále dokola přenášet heslo v čitelné podobě, což by bylo velmi nebezpečné, ale jedinečný a pro daný session unikátní hash (například 1c3d5a64c58) uložený pomocí Cookies, který bude mít také omezenou platnost časově, pokud se zapomeneme odhlásit a bude zneplatněn i po odhlášení. Klasicky tak jako u jakýchkoliv jiných www aplikací.

Jelikož nejdříve potřebujeme tedy ověřit Cookies, zdali nám prohlížeč posílá platný session hash, bylo nutno přejít z metody GET na metodu POST pro delší parametry HTTP dotazu, které by se nám těžko umístily do paměti a které potřebujeme zpracovávat "on the fly". Delší parametry se totiž při metodě POST posílají až po odeslání Cookies, což je pro naše účely perfektní.

HTTP request metodou POST může tedy vvypadat třeba následovně:

Kód: Vybrat vše
POST /nejakydotaz? HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123

dlouhe_predlouhe_parametry_http_dotazu_prakticky_nekonecne_ktere_zpracujeme_hned_jak_prichazi


Zbývá tedy implementovat

  • čas platnosti Cookies
  • samotný mechaismus vytvoření hash ID po zaslání hesla
  • přihlašovací formulář z www rozhraní
  • funkčnost více přihlášených uživatelů současně, tedy úložiště pro hash ID, zřejmě pouze omezený počet.
  • odeslání cookies do prohlížeče pomocí HTTP Headeru Set-Cookie.
  • nastavení hesla
  • reset hesla zřejmě propojením nějakého rezervovaného pinu při bootu micrologu
  • ... na něco ještě příjdu.

Implementace metody POST se dotkla samozřejmě i změn ve www rozhraní, které metodu POST nyní používá a s Cookies počítá.

Změny jsou zatím pouze vývojové, kód tedy ještě není vydán a funguje pouze u mě na stole. Všímavější MyPoweristi a Micrologisti si zajisté ve stavu online loggerů povšimli verze 2.05sd. Tak tohle je ten vývojový Microlog. Hádejte proč sd. Proč.. no proč .... proooooooč? Protože chystám dokončit rozpracovanou podporu SD karty a ukládání dat primárně na úložiště na SD kartě a až v momentě dostupnosti internetu teprve synchronizaci na MyPower.CZ pokud bude mít takové zařízení zapnut přenos dat na MyPower.CZ. To znamená mimo jiné výhody i to, že i dlouhodobější výpadek internetového spojení (logování přes nestabilní GSM nebo wifi se slabším signálem, atd.) nebude v žádném případě znamenat díru v grafech a ztrátu dat, jako je tomu nyní bez podpory SD karty. Jednoduchý důvod, data bez SD karty prostě není bez funkčního internetového spojení kam ukládat.

Mimo jiné www rozhraní dostálo designových změn a vylepšení oproti staré verzi. Screenshoty budou k dispozici v následujícím zápisku. Vzhledem k tomu, že jsem se vrátil k aktivnějšímu vývoji micrologu, budu teď zápisky z vývoje psát zřejmě častěji, aby se přínivci Micrologu, jejichž počet se za tu dobu značně rozrostl, měli na co těšit a podporovatelé věděli co vlastně podporují.

Pochopitelně dobrovolný support na vývoj projektu Microlog je více než vítán a aktivní, významní a pravidelní supportéři budou mít zcela jistě značné výhody v individuální podpoře z mé strany tak, jak tomu je doposud.

:)) :arrow: ::fv:: :arrow: *batt* :arrow: :home: ::rolleyes::
Uživatelský avatar
mypower.cz
R.I.P.
 
Příspěvky: 4935
Registrován: pát bře 04, 2011 11:36 am

Re: Zápisky z vývoje - HTTP POST a COOKIES

Příspěvekod kodl69 » čtv črc 23, 2015 11:36 pm

neuvěřitelný, co se do kousku paměti v arduinu dá dostat. Škoda že programování HTTP je v arduinu tak komplikovaný na rozdíl od běžnýho webserveru jako apache+mysql, IIS2 a podobně. Je mi jasný, že většina webu je na externím serveru, je to tak? A co aplikace HTTPS, to už asi v možnostech W5100 nebude. Jenom takový nástřel: arduino yun - příp yduino yunshield - na arduinu nasazenej shield s ARM a linuxem, tam je to webový rozhraní easy, ale dál jsem s tím nepokročil.
ostrov 4600Wp neustále ve stádiu zrodu: midnite classic 150 lite+whizbang jr., 16S a různě P cca 300Ah Winston, Ex Powerjack 8kW (momentálně samodomo cca 6kW). 48V DC rozvody a spotřebiče.
?
kodl69
podporuje fórum
 
Příspěvky: 6525
Registrován: sob črc 19, 2014 7:56 pm


Zpět na Vývoj MicroLogu

Kdo je online

Uživatelé procházející toto fórum: CC [Bot] a 0 návštevníků

Reputation System ©'