Názory k článku
Jsou vaše peníze u Citibank v bezpečí?
byly jsou a budou...
celé vlákno....
celé vláknoRe: ....
celé vláknoEbanka i Citi
celé vláknoNicmene ebanka ma, nebo alepson mela take par radku "kvalitniho" kodu. Napriklad pokud jste behem autorizace platby proces prerusili, platebni brana stejne nahlasila, ze platba je OK.
Re: Ebanka i Citi
celé vláknoeBanka shopy
celé vláknoRe: eBanka shopy
celé vláknoJak bych Vam to vysvetlil. Snad takto. Platebni brana eBanky nahlasi, ze je autorizace OK, neplest si prosim s provedenim platby ci skutecnym prevodem penez, i tehdy pokud pokud uzivatel cely proces utne v prubehu autorizace. Tzn. uzivatel si nakup rozmyslel a pri autorizaci proces zastavi. Obchodnik se dozvi, ze vse probehlo OK. A muze se jen divit, ze nejsou penize na jeho uctu.
To co tady mily Salame pises je prave tebou zminovane zameneni pojmu za dojem. Implementaci mame za sebou mnoho takze vime o cem mluvime. Priste prosim mlc, kdyz se bavi dospeli chlapce, treba se dovis neco zajimaveho.
P.S: A nauc se prosim podepisovat, ve slusne spolecnosti je to zvykem. Udelejete si u Vas v jeskyni den evropske kultury.
sem toho snad tak moc nerekl :)
celé vláknoRe: sem toho snad tak moc nerekl :)
celé vláknospatne mi to zformatovali...
celé vláknojen tak... takže tam chybí kusy kódu za znakem menší než ... :(((
O.
Re: spatne mi to zformatovali...
celé vláknoRe: spatne mi to zformatovali...
celé vláknoRe: spatne mi to zformatovali...
celé vláknofor(i=vlen;i<leng;i+=16)
strncat(trans,str_bin+i,1);
upravena optimalizovana smycka:
if (leng>=8000)
exit(1); /* spatna vstupni data */
for(i=vlen,j=0;i<leng; i+=16, j++)
trans[j] = str_bin[i];
trans[j] = 0;
O.
Citibank
celé vláknoRe: Citibank
celé vláknoRe: Citibank
celé vláknoRe: Citibank
celé vláknoRe: Citibank
celé vláknoVe spolecnosti existuje, nikdo vlastne presne nedokaze vysvetlit proc, presvedceni, ze banky jen proto, ze spravuji cizi penize, dbaji na kvalitu kodu v nejake obzvlaste zvysene mire oproti jinym naprosto beznym komercnim uzivatelum software. Pro takovou domenku ale skutecne neexistuje sebemensi duvod ...
Naopak, v bankach plati uplne stejne jako kdekoliv jinde, ze oblibeny je takovy programator (pripadn eexterni programovaci firma), ktery(-a) doda svou praci rychle a lacino. Jak tady nekdo poznamenal na jinem miste - programator, ktery programuje o tretinu pomaleji, protoze provadi audit kodu tak, aby jim dodavany kod neobsahoval chyby nebude patrit mezi zamestnavateli k nejoblibenejsim. C'est la vie ...
Vychodni filozofie
celé vláknoRe: Vychodni filozofie
celé vláknoKonec cyklu & ebanka
celé vláknotrochu me zarazila jistota, s jakou autor clanku ukoncoval retezec na konci sve opravy:
trans[j] = 0;
Nejsem zadny C-guru a tak, pokud se mylim, me omluvte. Ziju v domneni, ze dle standardu neni jasne, jake hodnoty budou mit ridici promenne cyklu po jeho skonceni. Ve vetsine pripadu by to mohlo fungovat, ale zrovna u bankovni aplikace bych si to NIKDY netroufnul zarucit. Uz nejednou jsem se setkal s kompilatorem, ktery si for cyklus zoptimalizoval a misto for (i=0;i<z;i++) provadel v podstate for(i=z;i>0;i--) .. dusledky takove optimalizace by byly v tomto pripade fatalni a myslim, ze chyba by byla na strane programatora.
Jinak co se tyce eBanky, tak pokud se neco nezmenilo, tak jeji vnitrnosti nejsou napsany v Cecku - coz neznamena, ze tam nemohou byt daleko horsi zverstva.
/ Lukas Suchanek
Re: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoDokonce mám (už dosti matný) dojem, že s tím může počítat i v Borland Pascalu. (Což je poslední Pascal, ve kterém jsem programoval, ale to je ještě více let. :-)
(Abych opravil Michala Kubečka - Lukáš Suchánek nepsal o hodnotě řídící proměnné BĚHEM cyklu, ale PO SKONČENÍ cyklu.)
Nicméně, kód vypadá takto:
if (leng>=8000)
exit(1); /* spatna vstupni data */
for(i=vlen,j=0;i<leng; i+=16, j++)
trans[j] = str_bin[i];
trans[j] = 0;
Cyklus je natolik komprimovaný (efektivní? možná - ale optimalizátoru to asi nepomůže), že není hned vidět, že řídící proměnnou je i, nikoliv j.
Možná by bylo vhodnější to napsat takto:
j = 0;
for(i=vlen;i<leng;i+=16) {
j++;
trans[j] = str_bin[i];
}
trans[j] = 0;
Takhle je hned jasné, co se kdy provede. A je to jasné stejně tak kompilátoru, jako člověku.
Bohužel, chyby s přetečením bufferu jsou v C programech naprosto běžné. Jsou ve spoustě programů, i ve slavných "velkých" aplikacích slavných firem. Troufl bych si říct, že těžko najdete aplikaci napsanou v C o alespoň miliónu řádků, kde by nějaká taková chyba nebyla.
Re: Konec cyklu & ebanka
celé vláknoO.
Re: Konec cyklu & ebanka
celé vláknoSice se dají stanovit normy pro psaní kódu a existují nástroje, které v kódu hledají místa podezřelá z buffer-overflow, ale stoprocentní to nikdy není.
Když se podíváte na stránky podpory velkých softwarehousů, snadno tam najdete info o podobných chybách. A týká se to i firem, které mají image prvotřídní bezpečnosti.
Tady je obrovská výhoda Javy, .NET a podobné zvěře.
Re: Konec cyklu & ebanka
celé vláknosi napsat nějaký/použít wrapper na práci s řetězci a je to ;-).
U jazyků platformě nezávislých (tedy interpretovaných ať už je to bytecode nebo přímo zdroják) zase hrozí nebezpečí v implementaci interpretu a ty většinou píšou zase ony velké software houses, nicméně u lidí kteří píšou kompilátory/interprety se dá předpokládat, že na tom budou znalostně poněkud lépe... ale spolehnout se na to taky nedá...
U OpenSource se dá alespoň trochu doufat, že si ten zdroják někdo prohlídne dřív než to někdo naboří...
O.
Re: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoJinak uvedená ukázka je názorným příkladem toho, že mluvit u cyklu for v C/C++ o nějaké řídící proměnné obecně dost dobře nejde.
Re: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoUkončovací podmínku mají i jiné cykly, než for. Čím se tedy liší for od jiných typů cyklu?
Čím se liší "část výkonná" od "samotného těla cyklu"?
Není náhodou tato "část výkonná" jenom "koncem samotného těla cyklu"?
Není náhodou "samotné tělo cyklu" jenom "něčím, co se nemůže dát do části výkonné, aby alespoň něco bylo v samotném těle cyklu a specifikaci bylo učiněno zadost"?
Re: Konec cyklu & ebanka
celé vláknoNa to je jednoduchá odpověď: ničím ;-), resp. liší se pouze syntaxí,
tedy tím, že je to všechno pohromadě, nicméně ekvivalentí zápis uděláte i pomocí while() { }
> Čím se liší "část výkonná" od "samotného těla cyklu"?
Tím, že je to všecho hezky nahoře pohromadě.
> Není náhodou tato "část výkonná" jenom "koncem samotného těla cyklu"?
ANO
> Není náhodou "samotné tělo cyklu" jenom "něčím, co se nemůže dát do části výkonné, aby alespoň něco bylo v samotném těle cyklu a specifikaci bylo učiněno zadost"?
Nejspíš ne, protože přes operátor "," (čárka) asi nepůjde udělat úplně všechno... i když mě zrovna teď nic nenapadá ;-), ale co si budem povídat byl by to hnus... ;-)
Navíc do části výkonné by měly přijít pouze jednoduché věci, které ovlivňují chod cyklu... (z hlediska přehlednosti kódu.)
O.
Re: Konec cyklu & ebanka
celé vláknoTakže když vyslovím hypotézu, že cyklus for je vhodné používat jenom tehdy, když máte nějakou řídící proměnnou, tj. nějaký counter, který inkrementujete nebo dekrementujete - budete s tím souhlasit?
Re: Konec cyklu & ebanka
celé vláknofor (iter.start(); !iter.done(); iter.next()) {
...
}
a prijde mi to daleko prehlednejsi nez to delat pomoci while.
Re: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoIterátor
celé vláknoAle ono je to ještě jinak a teď mi to došlo. To co je v závorce za "for", je implementace iterátoru. Takže iterátor není i nebo j, ale celý obsah té závorky.
Takže vám ctění kolegové dávám za pravdu a děkuji za objasnění. Když se na to člověk umí dívat takto, je použití cyklu for v podobě uvedené v článku přehledné.
Pro velmi jednoduché iterátory je skutečně rozumné používat zápis:
for (iterátor)
příkaz
A pokud je to zvláště jednoduchý případ
for (i = 0;i < 10;i++)
příkaz
můžeme i považovat za iterátor a tedy i za řídící proměnnou - a není to nesmysl a není to "zatěžování hlavy".
Re: Konec cyklu & ebanka
celé vláknoAle dovedu si rovnez predstavit daleko slozitejsi cykly for a urcite jsem je nejednou pouzil.
for v C/C++ zkratka neni synonymem pascalovskeho cyklu for, o dalsich jazycich nemluve...
Re: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka & SET
celé vláknoNa druhou stranu ne ja, ale kolegove meli tu cest delat neco napr. s puvodnim Juice Eurotelu, jak se vyjadril - ani halir by pres to neposlal... zrejme vedel proc...
Takze tech radoby dokonalych bastlu v republice je daleko lepe (navic kdyz se clovek obcas dostal v techto 'velkych' firmach operujicich s minimalne stamiliony korun k tomu, jak zpracovavaji data (namatkou Komercni banka, Ceska posta), doslova a do pismene trpel uz na pohled) a skutecne cest vyjimkam. Proti eBance nemohu rici nic vice, nez ze jsem nezaznamenal uspesny hack jejich systemu, Vy ano?
Re: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknofor ( i = 0; i < 10; ++i ) ;
muze nahradit jako
i = 9;
Vas priklad samozrejme take, ale ne vzdy:
for ( i = 0; i < z; ++i ) {
if (Something[i]) {
break;
}
}
by mel prochazet vzdy od zacatku. Aspon doufam :-)
Hodnoty promennych po ukonceni cyklu maji spravnou hodnotu a bezne se pouzivaji. Vyjimkou je C++:
for ( int i = 0; i < N; ++i ) {
...
}
kde promenna i neni mimo telo cyklu pristupna. Bohuzel, spravne to umi az nejnovejsi verze prekladacu, starsi pristup umozni.
(hmm, proc to zere mezery na zacatku radku?)
Oprava
celé vláknoRe: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoRe: Konec cyklu & ebanka
celé vláknoMuzu jen potvrdit
celé vláknoRe: Muzu jen potvrdit
celé vláknoRe: Muzu jen potvrdit
celé vláknoRe: Muzu jen potvrdit
celé vláknoMojebanka
celé vláknoBanky a jejich nedostatky
celé vláknoRe: Banky a jejich nedostatky
celé vláknoJak má laik vědět, že je aplikace pro vzdálený přístup k účtu děravá? Bankovními úředníky je klient při uzavírání smlouvy ubezpečován, že je vše O.K. Řekněte mi, kolik klientů bank si přečte tento nebo podobný článek a zda se vlastně klient banky používající služeb vzdáleného přístupu k účtu má po takových článcích pídit, jestliže asi zcela normálně myslící člověk - mám-li použít Vámi použité slovní spojení logicky asi očekává, že pro bezpečnost je uděláno maximum.....
Re: Banky a jejich nedostatky
celé vláknoRe: Banky a jejich nedostatky
celé vláknoRe: Banky a jejich nedostatky
celé vláknoRe: Banky a jejich nedostatky
celé vláknoJeden konkretni pripad je na http://underground.cz/784 .
Zacalovat klienty neni nic prijemneho, navic se toho chyti konkurence... A nerikejte, ze u soudu by jste mel proti bance sanci.
Zdrojáky
celé vláknov článku se už zdrojáky nenacházejí.
O.
Pozdě
celé vláknoS pozdravem,
průměrný uživatel.
PS: U jakého ústavu byste si ho založili (ho máte založený)? A proč?
Re: Pozdě
celé vláknoRe: Pozdě
celé vláknoRe: Pozdě
celé vláknoTim vcelku funkcni jsem myslel to, ze vyzaduje MSIE, vyzaduje Microsofti Javu, zkratka a dobre pokud nejste zakaznik/fanousek Billovych vyplodu, mate smulu. Jinak s funkcnosti (pominu-li fakt, ze IE uz pouzivam pouze a jedine pro Netbanku, coz mne docela stve) jsem nemel problemy az na detaily (jeden cas, zhruba tyden, to pri vypisu transakci negenerovalo popisy, takze akorat nejaky sileny kod a suma, nicmene hotline byl velmi rychly a vstricny). Dulezite je, ze ten internetbanking umi vsechno, co potrebuju, na pobocku nemusim a je to levne. Nejsem totiz silenec, abych za bankovni ucet s internet pristupem platil tisice korun za rok.
Jeste jsem zapomnel na jeden detail - velmi si cenim dvou prvnich vyberu v mesici z bankomatu zdarma, to je fakt super (v porovnani s ostatnimi bankami).