Ján Fečík


osobná stránka · blog

Dátum: piatok, 29. marca 2024
Čas: 16:35:25, 1711726525, @691
Meniny má: Miroslav, Mieroslav
IP adresa: 174.129.140.206

Programovanie zoznamky po druhé

Po skoro mesiaci som opäť toho spravil celkom dosť na svojej novej zoznamke, čo je môj nový projekt na ktorom sa snažím trošku viac dostať do tajov PHP a MySQL, proste sa trošku viac v tom naučiť pracovať, keďže ma to vo voľnom čase baví a je to asi lepšie zabitý čas ako by som mal sedieť pred tv, či v krčme či...či...či. Vôbec netuším či budú ľudia túto moju zoznamku navštevovať a aj ju využívať, ale tak snáď bude aspoň trošku používaná, keď s ňou zabíjam už toľko veľa času. Je to síce čas v ktorom sa síce čosi aj naučím a núti ma to ináč premýšľať, ale tak ak by bol z toho aj iný osoh, tak určite nebudem namietať, čiže ak by tam bola návštevnosť aspoň 10000 ľudí denne, tak namietať určite nebudem. Jediné čo ma štve je, že neovládam OOP, lebo predpokladám, že pomocou OOP čo je objektové programovanie by som mal celý ten svoj kód oveľa prehľadnejší a hlavne by som veci mohol riešiť iným spôsobom ako pri procedurálnom programovaní akým to programujem ja. Ak niekedy niekto nahliadne do toho môjho kódu po mne, tak si isto vyšklbe všetky vlasy a ako bonus k tomu sa ešte pogrcá. Viem, že ak to dokončím tak to prerábať tak skoro isto nebudem aj keby som sa do tajov OOP dostal. To by tam musela byť návštevnosť aspoň 100 000 ľudí denne aby som sa na také niečo dal :-) ale mile rád to risknem a potom to pokojne prerobím.

Programovanie zoznamky - začiatky  ·  Podrazy a falošnosť po druhé

Ako prvé do čoho som sa pustil bolo vyhľadávanie partnerov v mojom okruhu podľa zadaného polomeru v kilometroch. Člen má vo svojom profile uložené napríklad, že je z Bratislavského kraja, okres Pezinok, obec Slovenský Grob a tak mal na výber vyhľadávať partnerov podľa kraja, okresu a obce, alebo si mohol pri vyhľadávaní meniť parametre. Takéto vyhľadávanie nebolo moc zložité spraviť, aj keď mi to trošku trvalo, ale spraviť vyhľadávanie partnerov vo svojom okruhu mi už prišlo oveľa zložitejšie. Po nejakom čase a surfovaní po internete som došiel na to ako také niečo efektívne spraviť, ale nastal problém. Dané riešenie bolo založené na výpočte GPS súradníc miest a hneď ma napadlo, že odkiaľ akože mám získať skutočne presné GPS súradnice všetkých obcí na Slovensku.Programovanie zoznamky po druhéTo ale dlho netrvalo a zistil som, že Google ponúka voľne dostupné API, kde na základe názvu mesta vráti jeho GPS súradnice a iné informácie. Táto služba má ale obmedzenie len na 2000 požiadaviek za jeden deň a pri mojom skúšaní som ich skoro všetky vyčerpal, takže som si musel založiť viac projektov či účtov (to si už nepamätám) aby som získal ďalšie kľúče na prístup k tomu ich API a mohol to celé spraviť naraz. Keďže som tomu moc neveril, že isto mi tam nastane nejaká chyba a uloží nejaké nezmyselné GPS súradnice, tak som pri načítavaní zobrazoval aj obrázok Google mapy podľa zadaných GPS súradníc na overenie či sú správne. Nastavil som refresh v mojom skripte na 1 sekundu a postupne som asi hodinu zobrazoval automaticky všetkých 2900 obcí a miest. Vďaka načítaným GPS súradniciam som kontroloval zobrazovanú Google mapu, aby som si bol skutočne istý, že mám v databáze pri všetkých mestách správne GPS súradnice. Následne som vytvoril ďalšiu možnosť vyhľadávania, ktorú som ale sprístupnil len prihláseným členom a to, že člen môže zadať v akom okruhu sa má jeho potencionálny partner nachádzať. Rozmedzie som tam nastavil na 10 km v rozsahu od 0 km do 1000 km. 1000 km som tam zvolil len preto, že tam chcem pridať možno neskôr aj české mestá a niekto možno bude chcieť len písať s niekým a je mu jedno s kým, tak pri možnosti minimálneho veku 18 rokov, maximálneho veku 99 rokov, nastavený vzťah bude mať na nezáleží a okruh zvolí 1000 km, tak to vypľuje asi všetkých mužov, alebo ženy, podľa toho akého partnera daný člen hľadá. Neviem aká je asi presne najväčšia vzdialenosť medzi najzápadnejším českým a najvýchodnejším slovenským mestom či obcou a takú maximálnu hodnotu by tam bolo dobré dať, ale to beriem s rezervou, že taká situácia aj tak nenastane, takže 1000 km tam bohato stačí si myslím. Robil som si z toho vrásky, lebo som vôbec netušil ako na to a nakoniec som zistil, že mi naprogramovanie toho vyhľadávania zabralo menej času a roboty ako vyhľadávanie podľa regiónu, okresu či mesta.

Ďalšia vec čo som chcel doriešiť bolo zobrazovanie a editácia profilu. To som tiež nejako spravil a verím tomu, že kým to spustím, tak to ešte pár krát prerobím, lebo sa mi stále na tom čosi nepozdáva, ale tak o tom to asi je, že to budem stále upravovať kým tu zoznamku nespustím. Nechce sa mi to robiť na funkčnej zoznamke a preto chcem aby bolo všetko hneď vyladené a neskôr tam tak maximálne opravím nejaké chybičky, ktoré už nebudú moc zasahovať do štruktúry systému, čomu sa chcem práve neskôr úplne vyhnúť. Začal som používať aj Memcache, ktorým WebSupport kde mám webhosting disponuje. Memcache je distribuovaná pamäťová cache databáza a tu zatiaľ využívam na názvy regiónov, okresov a obcí, keďže čo zobrazenie tejto informácie to jeden SELECT v databáze a takto som sa zbavil dosť veľa zbytočných a opakujúcich sa SELECTOV. Takto sa pekne naťahajú z Memcache ak sú uložené a ak nie, tak sa vytiahnu z databázy a následne pod svojim kľúčom uložia a pri ďalšej požiadavke daného či iného člena sú pripravené v Memcache a nemusia sa tieto údaje opätovne vyberať z databázy, čo je viditeľné aj na rýchlosti generovania stránky. Isto by sa to dalo spraviť aj ináč, ale cache je cache a to človek neodrbe aj keby chcel. Keďže viem, že sa jedna o statický a nemenný obsah, tak je zbytočné tým zaťažovať databázu alebo skladovať v nejakom textovom súbore vyše 6000 premenných, takže je dobre na to použiť Memcache. Memcache isto ešte na tej zoznamke využijem na pár iných vecí pre zníženie záťaže.

Tak ma napadá teraz, že som hesla ukladal do databázy za pomoci funkcie md5, čo je kryptografická hašovacia funkcia, ale je dosť stará a už nie je bezpečná. Takže po diskusii s jedným programátorom, som md5 vymenil za čosi iné. Odporučil mi použiť pbkdf2 čo je oveľa bezpečnejšia hašovacia funkcia ako zastaraná funkcia md5. Pár dni som sa túto funkciu snažil naštudovať, aby som pochopil ako funguje a ak by sa teraz niekto dostal k databáze tejto mojej zoznamky, tak sa členovia nemusia vôbec obávať, že by niekto zistil a zneužil ich heslá. Funkcia pbkdf2 na vygenerovanie hash hodnoty potrebuje salt, čo môže byť nejaký náhodný reťazec a počet iterácií. Čím je počet iterácií vyšší, tým je hash hodnota bezpečnejšia. Takže je prakticky nemožné ak by niekto náhodou dostal do rúk databázu tejto mojej zoznamky a že by mu to k niečomu bolo ak nemá aj moje funkcie na skladanie daného hashu a aj v takom prípade by to bolo v podstate skoro nemožné, že by sa dopátral hesiel. Jedinú možnosť by mal, že pôjde na to hrubou silou, ale túto vec tam tiež chcem dorobiť. To znamená, že po pár neúspešných pokusoch zle zadaného mena či hesla pri prihlásení sa nebude možne nejaký čas prihlásiť. Nie som nejaký bezpečnostný expert, ale snažím sa aby bola celá táto moja aplikácia čo najlepšie zabezpečená a venujem tomu veľkú pozornosť. Po prerobení celej prihlasovacej časti na túto novú funkciu som sa pustil do automatického prihlasovania za pomoci cookies, po slovensky koláčikov :-) Tam som venoval tiež veľkú pozornosť na bezpečnosť a hlavne pred možnou krádežou cookies. Takže informácie ktoré sa pri zapnutí automatického prihlasovania uložia prihlásenému do cookies sa predtým najprv skomprimujú, potom zašifrujú mojim privátnym kľúčom a až po tejto procedúre sa uloží výsledná hodnota. Pri opätovanej návšteve zoznamky, sa moja aplikácia dopytuje na existenciu cookies a ak existuje, tak sa následne dáta z nich dešifrujú, rozbalia a overia všetky hodnoty či sedia v databáze. Mám tam spravený len jednoduchý odtlačok daného systému, ktorý chcem trošku vylepšiť a potom tam je ešte unikátny token. To ma napadlo ako také zabezpečenie voči úprave a skopírovaniu cookies do iného počítača a aj to len fyzicky, keďže na zoznamku sa dá pripájať len cez HTTPS protokol. HTTPS je šifrované spojenie medzi serverom kde beží moja aplikácia a klientom, teda prihláseným členom. Snáď to bude bezpečné riešenie, verím tomu, že to budem isto ešte prerábať, ale aspoň k tým uloženým dátam sa aj tak bez môjho kľúča nikto nedostane, takže aj tak nezistí čo presne sa tam nachádza.

Takže sa dokážem na tejto svojej zoznamke zaregistrovať, prihlásiť sa, upraviť si profil a vyhľadávať si partnerov podľa zadaných parametrov. To je ale celkom dosť na nič, veď sa nejako musia skontaktovať a na to asi najlepšie poslúžia správy. Nad tým som tiež veľmi dlho premýšľal ako takýto systém správ spraviť. Chcel som moc niečo také ako ma Facebook, ale na to by som potreboval vlastný server a také niečo na webhostingu nespravím ako som zistil. Teraz nemyslím po dizajnovej stránke, ale skrz toho ako taký chat ako má napríklad Facebook pracuje. Zasielanie správ je únavne a hlavne naprd ako som si na niektorých zoznamkách všimol, lebo v takej forme sú moc veľké časové odozvy medzi odpoveďami a to je nanič ak chce niekto súvislo konverzovať s druhou osobou. Takže som zvolil formu takého jednoduchého chatu a už druhý týždeň ho testujem. Snažím sa to spraviť čo najlepšie aby som nevyťažoval webhosting, ale trochu som sa inšpiroval z Facebooku a po prečítaní novej správy sa odosielateľovi zobrazí v poslednej správe, že správa bola prečítaná. Moje riešenie ktoré som tam spravil ale nie je nič prevratné, takže sa ani o tom nemusím rozpisovať. Chcem v ňom ale využívať Memcache a tým zamedziť zbytočnej záťaži na strane webhostingu, tak dúfam že sa mi to podarí. Aj to mám v hlave, že ako to chcem spraviť, ale musím si to hodiť na papier a spraviť nejakú blokovú schému a nedumať v kóde, že ako na to. Tiež to chcem prerobiť tak aby to fungovalo cez AJAX a JSON, ale do toho sa pustím keď budem mať na to chuť, lebo pri tom isto strávim pár hodín. Dosť som dumal nad posielaním správ medzi dvoma členmi, tiež oznamovaním počtu nových správ a prvotné riešenie mi vôbec nefungovalo tak ako som chcel, resp. si myslel že takto by to malo fungovať. Musel som si to celé hodiť nakoniec na papier, aby som videl presne podľa blokov ako sa to má správať a podľa toho som to prerobil a hľa, zrazu všetko funguje ako som chcel. V tomto som tiež bral do úvahy zabezpečenie v prípade ak by sa niekto cudzí dostal k databáze mojej zoznamky. Premýšľal som nad tým, že by konverzácia bola šifrovaná v databáze medzi dvoma členmi, tak že by som sa k nej nedostal ani ja, ale netuším vôbec ako na to. Zistil som, že by som k tomu potreboval použiť Diffie-Hellmanov algoritmus, ale to je už pre mňa španielska dedina, možno niekedy v budúcnosti sa tomu povenujem, ale vidím to bledo. Kto vie, možno za mesiac napíšem aj o tom, že sa mi to podarilo, asi stačí len pochopiť ako ten algoritmus funguje. No zatiaľ som to spravil aspoň tak, že sa správy do databázy pred uložením najprv skomprimujú a zašifrujú, takže bez kľúčov sa útočník k ničomu nedostane.

Keď ale teraz pozerám na tú svoju zoznamku, tak som z toho aj trochu nadšený. Vôbec som nečakal, že by som sa s tým dostal až tak ďaleko ako som sa dostal. Fakt som si myslel, že to po týždni zabalím a vykašlem sa úplne na to, lebo som si myslel, že na také niečo nemám bunky. Teraz ale keď tam už je toho tak veľa spraveného, aj keď niektoré veci ešte nemám úplne dotiahnuté a ešte plno vecí tam potrebujem dorobiť, tak ma zatiaľ ten výsledok celkom teší ak zoberiem do úvahy to, že som pred pár mesiacmi pomaly vôbec netušil ako niečo už také trošku väčšie naprogramovať. Viem, že to nie je nič svetoborné a zvládol by také čosi každý kto sa programovaniu venuje, ale na to, že nie som žiadny programátor a je to len také moje hobby som celkom spokojný, aj keď viem, že by sa to isto dalo spraviť oveľa lepšie a efektívnejšie.

Článok bol zobrazený 4197 krát a obsahuje 2030 slov
Pridané 10. novembra 2014