Kaip el. parduotuves apsaugoti padėjau (?)

Yra tokia tinklalapių saugumo spraga – CSRF, galinti pakankamai dažnai pasitaikyti (iš esmės – kiekviena forma ir dar daugiau), bet nepakankamai dažnai minima šalia, tarkime, SQL injekcijų ar XSS. Galbūt todėl jau senokai pastebėjau, kad net pakankamai populiarūs lietuviški tinklalapiai, kaip didžiausios el. parduotuvės, šią spragą turi. Bet tik vieną gražų šeštadienio rytą sugalvojau – reikia pagaliau normaliai pratestuoti populiariausias parduotuves ir pranešti apie jų CSRF.

Ką išnaudojus šią spragą galima nuveikti el. parduotuvių atveju? Iš esmės – beveik viską, ką gali pats vartotojas. Aš testavau prekės įdėjimą vartotojui į krepšelį, tačiau tam tikrais atvejais galima padaryti daug daugiau: išsiųsti užsakymus, redaguoti asmeninę informaciją, pakeisti prekių pristatymo adresą, ir t.t. Jei turėtume parduotuvių, kuriose būtų mokama kokiu nors automatiniu būdu (pvz. pririšta banko kortele ar su iš anksto papildytu balansu), nebeprašant duomenų per kiekvieną užsakymą, kenkėjiškas tinklalapis galėtų padaryti ir užsakymą vartotojo vardu.

Tad padaręs penkis puslapius, išnaudojančius spragas penkiose populiariose Lietuvos el. parduotuvėse (trys iš jų patenka į Alexa 100,000), išsiunčiau laiškus joms su nuorodomis ir problemos aprašymu.

Praėjo nei daug, nei mažai – penkios savaitės. Pats metas būtų apžvelgti, kaip sureagavo el. parduotuvės. Dalis prašė neminėti jų tikrųjų pavadinimų – kadangi rašau vien su gerais ketinimais, išpildysiu šį jų norą: kad ir kaip kvailai skambėtų, visos parduotuvės bus minimos kodiniais pavadinimais...

Parduotuvė A atrašė sparčiausiai, vos prasidėjus darbo dienai. Žadėjo informuoti, kai spraga bus ištaisyta – neinformavo, tačiau ištaisė.

Parduotuvė B sureagavo keliomis valandomis vėliau. Buvo be galo dėkinga už pranešimą, netgi pažadėjo nuolaidą kitam pirkiniui, bet... neištaisė iki šiol, CSRF vis dar egzistuoja.

Parduotuvė C atrašė antrą darbo dieną. Spragą pašalino (neužfiksavau, per kiek tiksliai laiko – tada žadėjo, jog per dvi savaites, nes „[spraga] nėra labai kritinė“).

Parduotuvė D vienintelė turėjo webmaster'io (ne info) el. paštą savo svetainėje. Nieko neatsakė – nemandagūs, bet spragą ištaisė – svetaine rūpinasi.

Parduotuvė E – apie šią rašyti net šiek tiek liūdna... Naudoja karkasą, kuris pats saugo nuo CSRF, bet... naudoja neteisingai. Negavau jokio atsakymo, spraga egzistuoja toliau.

Tad tam ir klaustukas įrašo pavadinime – man nebuvo sunku pranešti, tačiau panašu, kad reputacija ir klientų gerovė rūpi ne visiems. Nors turėti saugumo atžvilgiu tokią kultūrą, kaip užsienyje, labai norėtųsi...

O pabaigai – OWASP Top 10. Būkit saugūs.

Legaliai žiūrime anime Lietuvoje

Naršiau vakar YouTube. Paieškoje išmetė vieną iš kompanijos FUNimation licenzijuotų anime. Daug nesitikėdamas paspaudžiau ir... vos akys ant kaktos neiššoko. Veikia Lietuvoje! Ta proga nusprendžiau pasižvalgyti ir po kitų anime platintojų svetaines ir parašyti įrašą, kuris padėtų lietuviams-anime fanams nebūti baisiais piratais.

FUNimation

Nors šios kompanijos pagrindinė veikla – DVD leidimas JAV rinkai, jos YouTube kanale jau seniai galima nemokamai džiaugtis anime, o taip pat pasirinkti iš įgarsinimo ir subtitrų. Tiesa, lietuviams prieinama nedaug iš jų – tuos, kuriuos pavyko atrasti, surašėme AnimeZonos forumo temoje, nors jų gali būti ir daugiau.

Crunchyroll

Crunchyroll – neabejotinai didžiausias anime platintojas, veikiantis Simulcast principu. Tai reiškia, jog serijos atsiranda Crunchyroll svetainėje, vos tik yra parodomos per Japonijos TV, o kartais – netgi ir anksčiau.

Mažą dalį CR licenzijuotų serialų galima žiūrėti ir neprisiregistravus. Nemokamai galima žiūrėti tik nedidelę dalį anime, serijos atsiranda su savaitės vėlavimu, vienintelė galima kokybė – 360p, o taip pat žiūrėjimą pertraukia įkyrios reklamos. Mokami planai pranašesni visose srityse: prieinama daugiau anime, nėra savaitės laukimo, kokybė – iki 1080p ir nepamatysite nei vienos reklamos.

Anime planas kainuoja 6.95$ mėnesiui, vaidybinių serialų, vadinamų tiesiog „dramomis“ – tiek pat. Jei norite abiejų– „All-access“ narystė atsieis mažiau, nei perkant du planus atskirai – 11.95$ mėnesiui. Be to, Crunchyroll siūlo nemokamą 14 dienų bandomąją narystę, padarius simbolinį 0.00$ mokėjimą iš savo PayPal sąskaitos ar banko kortelės (būtent taip šią svetainę išbandžiau ir aš). Tiesa, po tų dviejų savaičių reikia nepamiršti narystės atšaukti – kitaip ji automatiškai prasitęs mėnesiui, šį kartą jau už pinigus.

Tačiau lietuviai čia vėl lieka nuskriausti – turinio pasirinkimas vis tiek nėra toks platus, koks siūlomas amerikiečiams. Tarkime, iš 17 naujų rudens serialų, nemokamai prieinami vos 4 – daugiausiai ne tokie populiarūs anime. Nors, pažvelgus į jau baigtus transliuoti anime, situacija ten atrodo daug geresnė – galbūt ne visoms šalims teisės gaunamos vienu metu.

Shounen fanus turiu kuo pradžiuginti – Naruto ir Fairy Tail prieinami visiems.

Animeshop.lt

Be užsieninių platintojų, atsiminiau dar ir šią lietuvišką e-parduotuvę. Nors iš šalies ji atrodo gerokai apmirusi ir niekur per daug nesireklamuojanti, jos CD/DVD kolekcija, kaip lietuviškai parduotuvei, atrodo gana nebloga. Tiesa, gaila, kad rusiškai įgarsintų DVD kiekis gerokai lenkia angliškus, tačiau lietuviškų – dar daugiau. Tarp jų – ir Ghibli darbai, kaip Totoro ar Mononoke.

Amazon

Nors įrašas turėjo būt tik apie streamingą, paminėjus lietuviškąją parduotuvę, nesąžininga būtų paminėti Amazon, kur irgi galima rasti anime DVD/Blu-ray diskų. Čia jų pasirinkimas – ypač platus, o kainos – visai padorios: 8 svarai už filmo Blu-Ray ar 11 svarų Blu-Ray diskų porą su visomis serialo serijomis. Tiesa, ne visi Amazon pardavėjai siunčia prekes į Lietuvą, o siuntimo kaštai kai kada gali sumą ženkliai padidinti.

Ar verta?

Taip, jei tik nesate radikalių pažiūrų (pavyzdžiui, nekenčiate lokalizuotų vertimų, o webinis 1080p – jums per prastas) ir tenkina platintojų repertuaras. Tuo labiau, kad Crunchyroll ar FUNimation galima naudoti ir nemokamai. O ko jums neduos, pasiteisindami „not available in your country“ – ne nuodėmė ir nusipiratauti... ;)

Ciklas for ir kiti apokalipsės raiteliai

... arba kodėl C++ – netinkama kalba programavimo mokymui mokyklose.

Prieš kokius dvejus metus (dabar tai atrodo taip seniai) juokiausi iš tų, kurie informatikos pamokose kalė Paskalį ir džiaugiausi, jog mokyklose pereinama prie C++. „Pagaliau moksleiviai bus mokomi naudingos, pritaikomos daugelyje sričių kalbos“ skambėjo mano galvoje ir nekantriai laukiau tos akimirkos, kai sėdėdamas informatikos prieš savo akis pamatysiu krūvą riestinių skliaustų.

Lol nope

Trumpai mano priekaištus galima apibendrinti taip: nesimokydamas papildomai, mokykloje C++ nesuprasi. Taip, galbūt tu iškalsi kažkurias sritis (kiek baitų tikriausiai ant mokyklos kompailerio užims int ar float tipas), galbūt išmoksi mintinai, kaip rašyti programą, sprendžiančią kvadratinę lygtį, tačiau vis tiek suprasi ne visą savo rašomą kodą ir kodėl jį turi rašyti.

Kokiais kriterijais mokymui apskritai buvo pasirinkta C++ – man mįslė. Ar mokiniui labai svarbu, kad jo programa įsivykdytų per vieną tūkstantąją sekundės, bet neduokdie ne per dvi tūkstantąsias? C++ yra labai gera kalba dėdėms su unix barzdomis, bet ne dešimtokui, abejojančiam, kas yra bitas, o kas – baitas...

Estija pradeda mokyti programavimo pirmokus. Mes – atvirkščiai – dešimtokus bandome atbaidyti tokiais siaubais kaip C++ ir vietoj to, kad sudomintume juos programavimu, IT pamoką paverčiame nemėgstamiausia iš visų.

Baltosios dėmės

Pirmą kartą atradęs šį straipsnį tiesiog įsimylėjau tą terminą. Pabandykim panagrinėti pirmąją programą, su kuria supažindinamas kiekvienas žalias mokinukas, pasirinkęs programavimą.

Nagrinėti kiekvieną kodo eilutę kurse paprasčiausiai neskirta laiko, todėl skatinama visą boilerplate  tiesiog ignoruoti. Nesvarbu, kas tas int main, svarbu, kad jis yra ir turi būti. Kitaip nieko nesigaus. O štai čia – analogiško kodo pavyzdžiai Python, Ruby ir netgi Perl kalbomis:

Šiek tiek skiriasi nuo C++, tiesa? Ką lengviau įsiminsite, suprasite, kaip veikia kiekviena eilutė? Būtent taip turėtų būti mokoma programavimo – be jokių bereikalingų, blaškančių dėmesį užrašiukų. Jei kažkas kartojasi kiekvienoje programoje, tą tikrai galima pašalinti iš programuotojo akių. DRY.

Mokykite programuoti, o ne C++

Būtent tai turėtų būti programavimo mokymo mokyklose uždavinys. Tu mokomas ne tam, kad sėdėdamas mokykliniame suole sukurtum Windows 9, o tam, kad minimaliai susipažintum su tuo, kaip yra programuojama. Taip, jei pasirinksi informatikos mokslus tęsti toliau, universitete programuosi kita kalba, darbe – galbūt ir dar kita. Tačiau ne kiekvienas bus programuotoju, o didžiąją dalį informatikos egzamino vis tiek sudaro būtent programavimas.

Tai kokia kalba tada tiktų geriausiai? Ogi tokia, su kuria galėtum tiesiog imti ir dirbti, o ne mokytis kalbos įnorių ir keistenybių. Netgi ta, gal šeštoje klasėje mylėta, Komenskio LOGO vietomis yra daug aiškesnė už C++.

Šis kodas – LOGO ciklo kartok palyginimas su C++ ciklu for. Taip, aš puikiai suprantu, kad for galingesnis (žr. sakinį apie unix barzdas) – tačiau dažnu atveju mokantis tas skaitikliukas i – visiškai nereikalingas, o veiksmus tereikia pakartoti – todėl ir kartok.

C++ nėra vien blogų sprendimų krūva. cin >> a >> b; yra daug smagiau negu C variantas scanf("%d %d", &a, &b);. Pastarasis verstų mokytis dar du dalykus – scanf/printf formato kalbą ("%d %d") ir kas per velnias yra tie &. Čia nusileidžia net mano mylimas Python, neturintis funkcijos „skaityk failą iki tarpo ir paversk duomenis į tokį tipą, kokio noriu“.

Tačiau čia C++ smagumas ir baigiasi. Toliau eina tik segfault'ai, astronominiai skaičiai dėl to, kad kažkur neparašei x = 0, sėdėjimas ir žiūrėjimas bukomis akimis į monitorių kiekvienąkart, kai kodas nesikompiliuoja.

Tai ką siūlai, gudruoli?

Kol kas nieko. Idealios kalbos nėra, tačiau yra keletas sprendimo variantų:

  • Imame kurią nors iš dinaminių kalbų (Python, Ruby, ...) ir vietoj vienų quirk'ų taikomės su kitais.
  • Imame kurios nors iš dinaminių kalbų minimalią implementaciją ir modifikuojame pagal savo poreikius. Netikiu, kad Lietuvoje nerastume nei vieno tą sugebančio programuotojo.
  • Kuriame savą programavimo kalbą nuo nulio. Nežinau, kam galėtų to reikėti, kai yra antras variantas.

Aišku, yra ir dar vienas variantas – mokinius palikti prie C++. Deja, šis - prasčiausias, nes įstatymai smurtą prieš vaikus griežtai draudžia...

Kodėl? Ogi todėl…

Žodžiu, istorija tokia. Buvo berods 2010-ųjų ruduo, Janutienė buvo ką tik pradėjusi TV3-uose kurti savo publicistinę laidą „Kodėl?“ (dabar savo laidas ji ir panašūs veikėjai jau vadina nuomonių, požiūrių laidomis - kam gi reikia faktų?).

Kadangi buvau po operacijos, tai nieko geresnio ir negalėjau daryti, kaip tik teliką žiūrėti. Įsijungiau būtent vieną iš pirmųjų „Kodėl?“ laidų. Tada prieš keletą dienų buvo praūžusi per Lietuvą audra - vartė medžius, ir taip gavosi, kad keletą žmonių ir užmušė. Vedėja iškėlė tokį klausimą - gal dėl mirčių kalta visai ne audra, o tos tarnybos, kurios „nepakankamai informavo gyventojus apie pavojų“. Ir, aišku, reikiamas atributas tokiai laidai - SMS balsavimas ta pačia tema - „ar dėl mirčių kalti žmonės, o ne gamta?“. Taip / Ne.

Praeina viena-kita minutė. „Taip“ surenka apie 20 balsų, „Ne“ - apie 80, taip balsai ir juda. Laida išeina į reklamą. Po kiek laiko sugrįžta, žinoma, atgal įjungiamas ir taskbaras su balsų skaičiais. Tik šįkart šie jau apsimainę: dabar jau  „Ne“ turi dvidešimt kelis balsus, o „Taip“  - apie šimtą. Tokia tendencija ir tęsiasi.

Įrodymų reikia, sakysite? Neturiu, bet juk žodinio liudijimo gana! ;) Nepuoliau fotografuoti rezultatų - iš kur žinoti, kad taip bus... Po to radau laidą internete (nepamenu, ar jau buvo tv3play, jei ne - tai buvo kur nors kitur). „Checkmate“, suskambėjo galvoje. Neatspėjau - laidos pradžia buvo nukirpta ir įdėta tik dalis po reklamos, su „pataisytais“ rezultatais.

Just saying... :)

PyCon-LT 2012 – buvau!

Kadangi savo mylimiausio Python kol kas neišdaviau su jokia kita programavimo kalba, buvo labai smagu vieną gražią dieną sužinoti, jog po trejų metų vėl organizuojama lietuviška python konferencija. Nors iš kitos pusės šiek tiek liūdnokas, kad lietuviškoji Ruby bendruomenė sugeba susirinkti jau penktą kartą (kur dar visokie workshop'ai...), o štai pythonistams taip dažnai neišeina.

Ir visgi, negaliu neįkišęs trigrašio ir neparašęs vieno-kito žodžio apie PyCon'e skaitytus pranešimus.

Fabric (Remigijus Jarmalavičius)

Jau pats pirmasis pranešimas man patiko - Fabric galimybės apžvelgtos tikrai puikiai, jokių priekaištų. Galbūt live demo, o ne paveikslėliai, būtų buvę smagiau, tačiau pilnai užteko ir to, kas buvo (o ir kam kankinti serverius be reikalo...).

Python paketai (Marius Gedminas)

Pranešimas buvo platesnis, nei tikėjausi, ir iš dalies tinkamas ne vien Python paketams, kadangi __init__.py ir setup() laiką maždaug lygiai dalinosi su patarimais turėti README, changelog'ą ir MANIFEST.in (kurio niekad nenaudojau... galbūt laikas pradėti :) ). Galbūt visiškam naujokui informacijos ir būtų kiek daugoka...

Django, nuo ko pradėti, kaip pabaigti (Mantas Zimnickas)

Pranešimas nebuvo blogas, tačiau iš esmės buvo visai ne tai, ko tikėjausi. Labai pasigedau „kaip pabaigti“ dalies, visas pranešimas buvo skirtas labiau „nuo ko pradėti“, tačiau ir čia parodytas tik vienas kelias - su paties Manto sukurtu šablonu django-starter. Kyla klausimas, ar pirmąkart django bandamčiam „startproject“ nebūtų lengviau, nei susipažinimas su trimis build sistemomis vien tam, kad pašalinti kažko, ko iš startinio paketo nereikia.

Python Androide (Albertas Agejevas)

Pagrinde - nesėkmės istorija, kaip pranešėjas bandė bandė kurti androidui ir nieko nesigavo. Nieko nuostabaus, kaip ir pranešimo metu sakyta, Python šioje OS vis dar lieka hakerių pasižaidimui. Anksčiau sklandė visokie gandai, neva Androidui bus galima pilnavertiškai programuoti Ruby ar dar kažkuo, tačiau turbūt ir toliau rašysim visų mylimą Javą, o Google dėl jos bylinėsis su Oracle...

Python ir Google App Engine (Skirmantas Jurgaitis)

Pranešimas, kurio dėka darkart įsitikinau, kad App Engine man nereikia - nenoriu nei apženyti savo aplikacijų su vienintele platforma, nei vienąryt atsikėlęs rasti už tai sąskaitą su keliais nuliais už tą pačią lėtą lėta platformą... :)

VU skaičiavimo resursai Python aplinkai (Albertas Gimbutas)

Pranešimas kiek užsitęsė, o tema man neaktuali - nesu VU studentas, tad minėtais resursais negalėsiu pasinaudoti. Tačiau vis tiek šiek tiek pavydu buvo pranėšėjui - jis turi priėjimą prie kompiuterio su 1080 procesorių (ar branduolių?)... :)

Python priemonės programavimo mokymui (Jurgis Pralgauskis)

Dalis resursų - žinomi, tačiau pasitaikė ir nematytų, todėl labai tikiuosi, jog skaidrės atsiras konferencijos tinklalapyje - nespėjau nei įsidėmėti, nei užsirašyti kai kurių knygų pavadinimų.

Kivy - Python UI Library for Any OS (Zogg)

Apie Kivy girdėti jau teko ir anksčiau, tačiau nesu jo išbandęs - netgi ir žinodamas apie kūrėjų vykdomą konkursą, patingėjau ką nors sukurti. Ir nors GUI programavimas nėra ta sritis, kurioj jausčiausi kaip žuvis vandeny, Kivy atrodo gan neblogai - pačiupinėti neskaudės.

--

All in all, geriau nei vakar, o rytoj turėtų būti dar geriau. O jei dar tas rytojus būtų ne už kalnų... Rengti dar vieną PyCon'ą greitu metu būtų overkill, bet jeigu kas nors panašaus į jau minėtus Rubyninkų workshop'us? ;)