ducin blog®:
kako to rade pravi majstori

Tekstovi u kategoriji: Programiranje

Zaštita i sigurnost informacija

eye on youNaslov možda ne prija uhu, ali svi znaju o čemu se radi. Gotova svi imaju svest koliko je ovo bitna tema. Međutim, bez obzira na važnost ovog pitanja, problem bezbednosti je najčešće zanemaren. Retko gde ćete imati priliku da učite o sigurnosti računarskih sistema. Svi akademski kursevi posvećeni su algoritmima, programskim jezicima(čitaj Java) ili teorijskom računarstvu. Ovu temu, obično i sami programeri poznati po samoukosti, ostavljaju za kasnije, što obično bude nikada. U tom pogledu, imao sam sreće da u prošlom semestru izučavam ovu materiju, i hteo to ili ne upoznam se sa nečim što čini pismenost jednog programera.

Problem bezbednosti je izražen posebno danas, u uslovima poplave Web aplikacija, od kojih je dabar deo ranjiv još „iz aviona“. U kombinaciji sa gomilom aljkavih programera, rezultati su potencijalno katastrofalani. Verovatno da jedino lenjost sprečava zlonamernike da učine više štete.

Da li je sistem siguran?

Prvo pitanje koje pada na pamet. Kao i obično, pitanje bez dobro dogovora.

Ovo nije problem koji bi mogao da bude rešen nekim matematičkim aparatom. Ne postoji instrument koji može da kaže da li je neki sistem siguran ili ne. Kao što ne može da se kaže da li neki program ima ili nema grešaka. Nejasno je da li strogo formalno, uopšte i možemo da definišemo šta je siguran sistem. Najbolje je na ovaj problem gledati kao na jedan inženjerski problem, i uvesti nešto manje strog kriterijum, sa pitanjem da li je sistem dovoljno siguran. Jedino dovoljno dobro rešenje je osloniti se na dobru praksu i skup već oprobanih metoda.

Sa ekonomskog aspekta može da se govori i o prihvatljivom nivou rizika. Kako nisam ljubitelj, a nadam se ni drugi, ekonomskog pogleda na stvari, ostavimo tu temu za neki drugi put…

Napadi i pretnje

Prosto rečeno, napad je bilo koja akcija koja ugrožava sigurnost informacija. U [1] se kaže:

U osnovi, napadi su akcije koje su usmerene na ugrožavanje sigurnosti informacija, računarskih sistema i mreža. Postoje različite vrste napada, ali one se generalno mogu klasifikovati u 4 različite kategorije.

Tako autori navode sledeće kategorije napada:

  • Presecanje ili prekidanje
  • Presretanje
  • Izmena
  • Fabrikovanje

Da bi se napad uopšte dogodio, sistem mora da ima određenu ranjivost(vulnerability), koja može da se iskoristi(eksploatiše) sa ciljem kompromitovanja sistema. Ranjivost može da nastane na više načina. Kao posledica greške u dizajnu, kao posledica greške ili previda u poslovnim pravilima ili kao posledica programerske greške(ko je rekao prekoračenje bafera). Na taj način, svaki potencijalni protivnik sa namerom i kapacitetom da iskoristi određenu ranjivost i situacija koja može da dovede do napada, predstavljaju pretnju po sistem.

Na osnovu pretnje, mogućnosti da se pretnja realizuje i materijalnog gubitka koji bi na taj način nastao, može da se izračuna i rizik. Zatim, na osnovu rizika može da se kreira i strategija ili plan rešavanja ili ublažavanja pretnje. No, ekonomski aspekti nas ne interesuju u ovoj priči…

Kriptografija

U osnovi svake sigurnosne tehnike ili servisa obično leži kriptografija. Bruce Schneier je na pitanje šta je to kriptografija dao sledeći jednostavan odgovor:

Ako uzmem pismo, zaključam ga u sef, sakrijem taj sef negde u Njujorku, a zatim vam kažem da pročitate pismo, onda to nije kriptografija. Sa druge strane, ako uzmem pismo i zaključam ga u sef, a zatim vam dam taj sef, njegovu projektnu dokumentaciju i stotinu identičnih sefova sa njihovim šiframa, a vi i dalje ne možete da otvorite sef i pročitate pismo, to je kriptografija.

Osnovni zadatak kriptografije je proučavanje kriptografskih algoritama, ili svima poznato, algoritama šifrovanja. Današnje šifre svoju moć zasnivaju na nečemu što se zove ključ(nije uvek tako, Cezarova šifra). Nasuprot kriptografiji, kriptoanaliza ima zadatak da na osnovu šifrovanog teksta odredi početni tekst ili ključ koji je korišćen. Kriptologija obuhvata zajedno kriptografiju i kriptoanalizu.

Postoje dve osnovne vrste šifara sa ključem. Simetrične i asimetrične šifre. Simetrične šifre, poznate i kao šifre sa tajnim ključem, koriste jedan te isti ključ i za šifrovanje i za dešifrovanje podataka. Simetrične šifre mogu da rade bit po bit(bajt po bajt) sa ulaznim podacima, kada se nazivaju šifre toka, ili sa blokovima podatka, kada se kaže da su to blokovske šifre. Asimetrične šifre, koje se još zovu i šifre sa javnim ključem, koriste dva različita ključa. Javni i privatni ključ. Poruka se šifruje javnim ključem, a zatim je dešifrovanje moguće jedino privatnim ključem.

U zavisnosti od toga na koji način šifra obrađuje ulazne podatke, razlikuju se supstitucione i transpozicione šifre. Supstituciona šifra svaki element(slovo) ulaza, zamenjuje nekim drugim(ne uvek istim) elementom. Kod transpozicionih šifara, elementi ulaza ostaju isti, ali im se menja raspored.

Jednosmerne heš funkcije

Jednosmerne funkcije nisu same algoritmi šifrovanja, ali su sastavni deo gotovo svih šifara. To su funkcije koje je relativno lako izračunati, ali jako teško naći inverznu funkciju. Lako je razbiti prozor, ali gotovo je nemoguće od komadića sastaviti prvobitni oblik. Da li „prave“ jednosmerne funkcije u matematičkom smislu postoje, ne zna se niti postoji dokaza za to. Primenjena kriptografija koristi jedan poseban oblik jednosmernih funkcija. Jednosmerne heš funkcije. Heš funkcija za ulaznu, originalnu poruku, daje vrednost fiksne dužine, nazvanu heš. Na taj način, dobija se digitalni „otisak prsta“ originalne poruke. Kako ove funkcije ulaznu poruku preslikavaju u vrednost fiksne dužine moguće je da postoje dve različite poruke koje imaju jednaku heš vrednost. Očigledno je da ove funkcije nisu bijekcije, te da nisu ni prave jednosmerne funkcije. Međutim njihov rezultat je dovoljno dobar za primenu u kriptografiji. Naime, ako je heš dužine 160 bita, tada je verovatnoća da dve poruke imaju jednaku heš vrednost jednaka 1:2^160.

SSL

Da bi se uspostavio siguran komunikacioni kanal između dva računara, potreban je nekakav sigurnosni protokol. Jedan takav protokol, koji dodaje sigurnost u TCP/IP model, je dobro poznati SSL – Secure Socket Layer. Konkretno SSL nudi:

  • Privatnost. Sve poruke između dva računara šifrovane su simetričnom šifrom.
  • Proveru identiteta. Identitet obe strane može da se proveri(klijent i server).
  • Pouzdanost. Protokol proverava integritet poruka.

Funkcionalno SSL se sastoji iz dva protokola: SSL Handshake-a i SSL Record-a. Handshake uspostavlja sigurnu sesiju između dve strane. Identifikuje računare, bira konkretan protokol za šifrovanje i razmenjuje ključ sesije kojim će nadalje biti šifrovane sve poruke. SSL Record obavlja samo šifrovanje komunikacije. Posebna snaga ovog protokola ogleda se u tome što se sam ključ sesije, koji razmenjuju dve strane, šifruje javnim ključem. Sa druge strane relativna brzina proizilazi iz činjenice da se za komunikaciju koristi simetrična šifra.

Najpoznatija primena SSL-a je HTTPS protokol. Uistinu HTTPS nije novi protokol, već je to stari obični HTTP, koji kao komunikacioni kanal koristi SSL.

Zaključak

Kako su neke teme ostale nedorečene u jednom od prethodnih tekstova, da pokušam da sada budem potpuno jasan. Ako želite da učite o ovakvim stvarima, upišite FIT. Ako želite efikasno, brzo, i studiranje koje vam daje praktično i upotrebljivo znanju, upišite FIT. Ako hoćete da učite o pravom programiranju, i da vas uči ekipa sjanih profesora i asistenata, upišite FIT. Uzgred, imao sam priliku da mi jedan od dole potpisanih autora knjige bude profesor…

[1] Sigurnost računarskih sistema i mreža, Mikro Knjiga 2007, Dragan Pleskonjić, Nemanja Maček, Borislav Đorđević, Marko Carić

[2] Primenjena kriptografija, prevod drugog izdanja, Mikro Knjiga 2007, Bruce Schneier

Napisao: duca

Relative vs. absolute path

Nije mi jasno kada će, oni koji do sada to nisu, da shvate da u feed ne mogu da idu relativne putanje. Ako ste primetili da u nekim agregatorima nema slika u Vašim tekstovima, već se pojavljuju precrtani kvadratići, odgovor leži ovde:


Explanation

Some RSS elements are allowed to contain HTML, including links and images. However, if these links use relative URLs to point to resources, users of some news aggregators will not be able to click on them. And your images use the relative URLs, the images may not appear (since the news aggregator will be looking for the images locally on the user's hard drive, rather than on your web site).

Znači ne može:

<img src="mojaslika.jpg" />

već samo:

<img src="http://www.ja.blog.com/mojaslika.jpg" />
Napisao: duca

Heroku: Rails u brauzeru

Prosto rečeno, Heroku je Rails razvojno okruženje u pretraživaču(jel sad bolje?). Nešto preciznije, Heroku je kompletna, web zasnovana, code/deploy/run platforma za Rails aplikacije. Ili, sve na jednom mestu. To znači da nove Rails aplikacije kreirate kroz web interfejs. Tako napravljene aplikacije možete da menjate kroz IDE u samom brauzeru. Kako sam skeptičan po pitanju složenijih web aplikacija, ovaj IDE je prevazišao moja očekivanja. Svakako nedostaju neke napredne opcije kao code completion, ali je editor i pored toga potpuno upotrebljiv. Dovoljan je jedan pritisak na dugme pa da pokrenete ovako napravljenu aplikaciju, koja je odmah dostupna na webu.

Svi drugi aspekti razvoja Rails aplikacije su identični. Kao da pišete kod na svojoj lokanoj mašini. Tako imate i pun pristup Rails konzoli, Rake zadacima i logovima aplikacije.

Zanimljivo je i šta se krije ispod haube. Autori Heroku-a kažu da cela platforma leži na Amazon EC2 osnovi. Tvrde da zahvaljujući tome, imate pristup neograničenim resursima i skalabilnosti. Ja sam se malo igrao, i sve ovo izgleda sjajno. Pitanje je samo kako bi se sistem ponašao u realnim uslovima i pod realnim opterećenjem. No za to treba sačekati da Heroku izađe iz beta faze, i da zaživi kao deo neke prave aplikacije.

Zaista sam oduševljen idejom. Ono što je Rails za Ruby, to je Heroku za Rails. U ostalom, probajte sami.

Napisao: duca

Multitasking nas zaglupljuje

Naravno, mislim na sposobnost ljudi da naizmenično obavljaju više poslova, prelazeći sa jednog zadatka na drugi i opet nazad, sve u kratkom vremenskom intervalu. Ko je čitao makar uvodno štivo iz arhitekture računara ili operativnih sistema, zna koliko je context switch skupa operacija. Izgleda da je stvar sa našim mozgom jednaka.

Ovaj problem posebno je izražen u današnjem okruženju informacionog overload-a, u kome smo osuđeni na računare, mobilne telefone, kamere i koje kakve uređaje, koji nam život čine lakšim. Bar bi tako trebalo da bude. Međutim, mesto da nam svi ovi gedžeti poboljšaju kvalitet života, postali smo robovi tehničkih dostignuća. Na način na koji niko nije moga ni da predvidi, veštačka inteligencija zavladala je svetom. Ostvarivši tako sve one slutnje SF horora o „dominaciji mašina“. Kao i virus, sa pre bi moglo da se kaže manjkom, nego viškom inteligencije, fenomen nazvan gedžet razjeda savremenog čoveka.

Mobilni telefon koji bez ikakvog pravila, i uvek u trenutku kada radite nešto važno, zvoni. PDA koji svakih pet minuta odvlači pažnju na sebe. RSS feed koji, više ni ne znam preko kog uređaja čitate. Da ne pominjem, kakvo je stanje kada se stigne do desktop-a. Ukoliko se od svih ovih smetnji uopšte i dokopate tastature. Tu teror tek počinje. Prvo i obavezno, otvorena mail aplikacija, koja Vas tera da svakih 30 sekundi, klikćete na Send/Receive, iako je mail klijent podešen da u pravilnim vremenskim intervalima sam to radi. 30 stranica koje kakvih help-ova. 7 instanci IE-a(upišite ovde Opera, Firefox, Safari, šta god) svaka sa po najmanje 15 otvorenih tabova. 3 otvorena Word dokumenta, koja nikako da otkucate. I na kraju, ako se nađe vremena da uradite checkout i otvorite IDE.

Meni ne treba nikakvo naučno istraživanje i potvrda lekara, da bih znao da ovo nije zdravo. Da bih znao, da ovakav način rada maksimalno iscrpljuje i dovodimozak do krajnjih granica izdržljivosti. Kakva je fiziološka i psihološka osnova ovakve reakcije čovekovog tela, na kraju nije ni bitno.

Da li rešenje postoji? Najveći problem je utvrditi problem. Tj. postati svestan činjenice da je bolest prisutna. Kada budete uspešni sa dijagnozom, rešenje je blizu. Malo discipline može lako da reši sve muke.

1.      Ne klikćite neprestano i bez ikakve potrebe iz jednog u drugi prozor.

2.      Svu pažnju usmerite na ono što trenutno radite.

3.      Ne prekidajte to što ste počeli, dok zadatak ne dovedete do kraja.

4.      Konsultujte drugi prozor, samo kada to zaista morate.

Možda Vam sve ovo zvuči banalno, ali pokušajte da poštujete sva ova pravila i ubrzo bi trebalo da vidite napredak u svojoj produktivnosti(kako mi samo ovo zvuči socijalistički). Za početak, ja sam uspeo ovaj tekst, da otkucam u jednom dahu.

PS: Kao što vidite ne gledam TV duel

PPS: Tekst ide u kategoriju programiranje, u nedostatku boljeg izbora…

Napisao: duca

Rails: Šta je to?

Znate onaj: Postoji 10 vrsta programera. Oni koji koriste Rails, i oni koji još nisu čuli za Rails.

Vic je možda izlizan, ali je u ovom slučaju surovo istinit. Teško da se neko sreo sa Rails-om, a da nije bio oduševljen njime.

Ruby on Rails

Pa šta je zaista Rails. Tehnički govoreći Rails nije programski jezik. Ruby je jezik, dok je Rails framework izrađen i napisan u Ruby-u. Otuda i ono „Ruby on Rails“. Međutim, mirne savesti bih mogao da kažem daje  Rails jezik. Stoga, ne bih voleo da mi neko zameri, ako to i učinim.ppOno što Rails razlikuje od bilo čega drugog, je što je nastao u realnim uslovima, i iz stvarne potrebe. Naime, Rails je izdvojen iz prave aplikacije(Base Camp) koja zaista i postoji i koja svakoga dana opsluži hiljade korisnika. Otuda verovatno nema prirodnijeg alata za razvoj Web aplikacije. Sve što je ušlo u Rails, nekada i negde je korišćeno u realnim uslovima.

Intrerpreter, ne kompajler

Rekao sam da je jezik u predmetu ove priče Ruby. Ruby je interpreter. Drugim rečima, oprostite se od performansi. Ruby je i funkcionalni jezik. Funkcionalni zato što ima funkcije prvog reda. Sve što možete sa bilo kojom drugom promenljivom, možete i sa funkcijom. Telo funkcije možete da dodelite nekoj promenljivoj, možete kasnije tako napravljenu funkciju da pozovete ili pak da je prosledite drugoj funkciji. Ruby je i dinamički jezik. Delove programskog koda možete da menjate u toku izvršavanja. Čik probajte to u C-u. Zahvaljujući svim ovim osobinama Rubyja, Rails je izuzetno elegantan i prirodan jezik.

MVC Framework

Na vrh svega ovoga što nudi Ruby, Rails dodaje još dosta toga. Tako Rails formira čitav WEB framework. I to ne bilo kakav, već MVC framework.  Po uzoru na MVC obrazac, Rails jasno prepoznaje i razlikuje koncepte kao što su kontroler, akcija, model, prikaz itd. Sve to ima za rezultat, jasno odvojena pravila poslovne logike, akcija i rezultata koji se prikazuju. Međutim to što je Rails MVC framework ne znači ništa. I Tapestry je MVC framework, pa su aplikacije pisane pomoću njega nešto najružnije i najsloženije što sam ikada video. Prava moć leži u dva koncepta koja se razvojni tim Railsa striktno pridržava. To su: DRY i convention over configuration.

Prvi princip, ili Don’t Repeat Yourself, obezbeđuje minimalno ponavljanje koda. Aplikacija je tako strukturirana da primorava programera da piše čist kod i eliminiše ponavljanje. Drugi princip, konfiguraciju, kako samog frameworka, tako i aplikacije, svodi na nužni minimum. To znači da je konfiguracija predefinisana i da podleže strogo određenim pravilima. U praksi, retko ćete imati potrebu da bilo šta u Railsu podešavate. Ako se pridržavate svih principa koje Rails određuje, dobićete gotove, funkcionalne, aplikacije uz minimum truda i koda.

Rekao sam da Rails prepoznaje koncept kao što je model. Međutim Rails čini i mnogo više od toga. Rails je čitav Object-Relational Mapper. Ovo programera oslobađa potrebe da radi direktno sa bazom podataka, u bilo kom smislu. Svi objekti u domenu aplikacije definišu se u samom jeziku, dok teret lepljenja na bazu, pada na Rails.

Klasika ili trend

Rails svakako nije zaobišao ni agile trend. Sve što je potrebno za unit testing je prisutno. Šta više poželjno je da testom pokrijete svaki aspekt aplikacije. Tu je agile, ali tu je i AJAX. Pisanje, kako vole da kažu, WEB 2.0 aplikacija je potpuno prirodno u Rails okruženju.

Ovo je samo delić priče o Rails-u. Nadam se da će ovo biti samo prvi tekst u Rails serijalu…

Napisao: duca
email adresa @ducinblog.com
Privatnost | Pravila korišćenja | | tel: +381646180655
© 2007 Dušan Pantelić. Sva prava zadržana.
From Russia with love, nginx! | FreeCSSTemplates.org