Archyvai

Įražai pažymėti ‘saugumas’

Apkabink gyvenimą. Segėk saugos diržą.

2010-02-26 09:51

Negaliu neįdėti šios fantastiškos reklamos!

Apkabinkime gyvenimą. Super.

Auto , ,

Web mokėjimų saugumas: ką reiktų žinoti programuotojui

2009-05-12 21:45
Iš daddys.com

Iš daddys.com

Jau kurį laiką rašiau tai, apie ką mąstau. Tačiau senokai nerašiau to, ką žinau. Iš savo profesinės patirties. Tai šįkart įrašas būtent apie tai.

Noriu trumpai brūkštelti programuotojams apie svetainių, į kurias integruojami jų pačių kurti mokėjimo sistemų plugin‘ai, saugumo užtikrinimą. Arba tiems, kurie norėtų peržvelgti turimus plugin’us ir padidinti saugumo lygį iki maksimalaus. Taigi ši rašliava tiems, kurie žengia pirmuosius žingsnius programuodami web apmokėjimų siuntimą mokėjimų sistemoms ir tiems, kurie nori praplėsti savo žinias.

Įžangai – kaip dažniausiai vyksta tokie apmokėjimai. Kaip pavyzdį imsiu mokėjimų sistemą, prie kurios dirbu pats – mokėjimai.lt.
Taigi. Kliento svetainėje sugeneruojama forma, kurią pats naudotojas siunčia per savo naršyklę į mokėjimų sistemą. Tada mokėjimų sistema arba duoda ką pasirinkti, arba tiesiog nukreipia toliau į pvz. banką arba kitą mokėjimų tarpininką. Apmokėjus, naudotojas grąžinamas atgal į kliento svetainę, kuri dažniausiai jau žino apie apmokėjimą ir naudotojui praneša: Jūsų apmokėjimas patvirtintas! O tas “dažniausiai” reiškia, kad… Ne visi produktai yra pakankamai protingi ;)

Taigi taigi taigi. Mokėjimų sistema visad pasirūpina, kad jos siunčiama informacija būtų apsaugota ir visad tai būtų galima patikrinti jos kliento svetainės programinio kodo. Slidžiausia vieta yra ta, kai naudotojas gali keisti formos, siunčiamos į mokėjimų sistemą duomenis. T.y. dar vis kliento svetainėje.

Dažniausiai užsakymas yra siunčiamas plikas, be jokio kodavimo ir papildomos apsaugos iš mokėjimų sistemos. Mes ir šitai planuojame greitu metu išspręsti, bet kiek esu tyrinėjęs kitas sistemas – tai yra gan plika.

Iš esmės to daryti lyg ir nereikia. Užsakymas – tiesiog informacija, pagal kurią mokėjimų sistema sugeneruoja užklausą į pvz. banką. O po to jau ar naudotojas apmoka ar ne – kitas klausimas. Nieks nieko nepralaimi, nuostolių nepadarysi.

Bet! Įvertinkite tokį variantą: svetainės sugeneruotoje užsakymui Nr.1 mokėjimo formoje naudotojas, prieš siųsdamas ją į mokėjimų sistemą, pakeičia kainą iš, tarkime, 100Lt į 5Lt. Apmoka. Mokėjimų sistema praneša – “Apmokėjimas užsakymui Nr.1 įvykdytas sėkmingai. Mūsų mokėjimo ID yra 1425345, suma: 5Lt, apmokėjimas atliktas <data>”.

Puiku! Apmokėjimas atliktas! Tik vat suma skiriasi… Atrodytų, viskas aišku – tokio mokėjimo nepriimti. Tačiau patikėkit manimi – tai aišku yra tol, kol aš viską čia ne per daugiausiai supintai papasakoju. Kiek out there, in the internet yra svetainių, kurios džiaugiasi gautu apmokėjimu ir nenaudoja papildomo tikrinimo – statistika. Tačiau pasinaudojus, kad ir 1 svetainės “skyle” galima jai padaryti nuostolių.

Aišku, ne visi (protingi) internetiniai blogiukai taip darytų. Reikėtų dar pasistengti maskuoti savo identitetą, nes tokia veika turėtų būti traktuojama kaip nusikalstama. Ir t.t. Bet nebūkime prasto kodo rašytojai (nes pvz. prastų knygų sėkmė nelydi), o pasistenkime apsisaugoti nuo visų galimų.

Mano rekomendacijos:

  • Programuojant visada naudotis puikiu kokybės garantu: Never trust user input. Šiuo atveju nevertėtų tikėti duomenimis, kurie bus inputinami ne vien į kliento, bet ir į mokėjimų sistemos serverį.
  • Visada tikrink, ar gavai tai, ko tikiesi. Jei tai turi būti skaičius – tikrink. Jei tai skaičius, tekstas ar bet kas į duombazę – escapeink (ne su addslashes(), o su tam skirtom priemonėm). Kaip Audrius minėjo savo mokymuose – jeigu yra klaida, jos neapdorok, o atsisakyk tolimesnio vykdymo. Puikus patarimas, kurio esmė pastebima įgyjant patirties.
  • Naudokis aukščiausio lygio įmanomomis apsaugomis. Pvz. mokėjimai.lt siūlo galimybę tikrinti SSL technologija pasirašytą informaciją, bei prastesnę apsaugą garantuojantį metodą. Būtinai naudok truputį sudėtingiau įgyvendinamą ir suprantamą, tačiau daug saugesnį būdą! Taip būsi įsitikinęs, kad gavai būtent tai, ko tikėjaisi.
  • Visada tikrink, ar gavai tai, ką siuntei mokėjimų sistemai. Mano minėtu atveju užtektų pagal užsakymo numerį tikrini sumą. Yra ir kitas, geresnis variantas: pvz. mokėjimai.lt grąžina visus nestandartinius (į specifikaciją neįtrauktus) parametrus nepakeistus kliento svetainei. Tuo galima puikiai pasinaudoti, sugeneruojant MD5 haš’ą iš svarbiausių mokėjimo duomenų (kainos, valiutos, užsakymo numerio) ir kelių slaptų duomenų (kurių nežino nieks, išskyrus pačią generuojančią sistemą – na ir tave, programuotoją). Grįžtant apmokėjimui, turi būti vėl sugeneruojamas haš’as pagal užklausoje esančias viešus ir slaptus, tik tau žinomus, parametrus ir jis sulyginamas su gautuoju. Jeigu šie duomenys sutampa – you’re good to go!
  • Ir pabaigai: tikrink, ar mokėjimas sėkmingas :) Jeigu mokėjimų sistema informuoja ir apie nesėkmingus mokėjimus (kad pvz. nuimti prekės rezervaciją ir būtų galima ją parduoti kam nors kitam), tai tikrink! Patikėkite manim – būna svetainių, kurios tik laukia užklausėlės į skriptelį su užsakymo numeriu ir viskas – praleidžia apmokėjimą kaip sėkmingą. Nors ir pati mokėjimų sistema pasakė: naudotojas neapmokėjo. Ot!

Būkit budrūs. Galit žaisti su “O gal nieks manęs nebandys apgauti..?”, tačiau jeigu galima apsidrausti – tai padaryti būtina, nes po to bus… Apmaudu :) Geriausiu atveju.

IT, Verslas ir ekonomika , ,

Dar kartą dėl saugos diržų

2008-12-24 13:11

Aš visad stengiuosi įrodyti savo bendrakeleiviams, kad segtis automobilio saugos diržus – ar tai būtų galas, ar priekis – būtina. Pats refleksyviai užsisegu įsėdęs į automobilį. Ir man nesuprantama, kaip galima būtų kitaip. Deja, nemažai kam… Tai nesuvokiama.

Šiuo atveju kalbos pasiekia mažiau, nei vaizdai. Taigi pateikiu rusiško Autoreview ištraukėlę, kur išbandė panašius scenarijus – tik vienu atveju priekyje sėdėję žmonės nebuvo prisisegę, kitu – gale. Nors daug kur buvo šnekėta ir rašyta, tačiau nesisegantieji, akivaizdu, nesupranta, kad jie žaidžia ne tik su savo gyvybėm, tačiau yra ir potencialūs žudikai. Gali nužudyti šalia ar priekyje sėdinčius. Nejuokaukime.

Taip pat nejuokaukime su padangomis – naudokime gerą gumą :)

Auto , ,