Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Java kód

Zdravim, můžete mi prosím někdo osvětlit jak je to s bezpečnosti kodu v Javě. Napřiklad chci pomoci javy vytvořit přístup k db kde musím zadat i heslo. Po dokončeni se mi software vytvoři v jar souboru. Ovšem když ho otevřu v archivu tak tam jsou samozřejmě bajtkody kde to heslo jde vyhledat. Kod je sice tak trochu zakodovaný ale řetězce tam vidět třeba jdou. Jak se to řeší? Ono v podstatě bajtkód jde znovu rozkodovat na zdrojový kod že?

Předmět Autor Datum
Je uplne jedno v com je program napisany, ak je nejake heslo v programe tak VZDY ide z toho programy… nový
MM.. 07.08.2012 21:51
MM..
Ne, zatim jen tak zkoušim hlavně pro sebe abych měl představu na co vše je nutné davat pozor. Nejak… nový
Hynek123 07.08.2012 22:09
Hynek123
Ja mam pocit ze si nepochopil ani jednu moju vetu tak skus este raz citat a a pripadne sa zamysliet… nový
MM.. 07.08.2012 22:20
MM..
hh, nečekal jsem že to bude tak složíte na bezpečnost:) Každopádně diky, hodně si mi pomohl. Už to… nový
Hynek123 07.08.2012 22:51
Hynek123
Ked ti ide len o to aby kazdy trtko amater nevidel v zdrojakoch heslo, tak ho uloz ako pole zaXOR-ov… nový
MM.. 07.08.2012 22:33
MM..
Inac mozno by si mal upresnit ze co konkretne sa snazis robit a kde to ma byt nasadene, aby ti niekt… nový
MM.. 07.08.2012 22:49
MM..
No jak jsem psal nemam žadny hlubší smysl. Každopádně v budoucnu bych nejspíš chtěl udělat aplikaci… poslední
Hynek123 07.08.2012 22:58
Hynek123

Je uplne jedno v com je program napisany, ak je nejake heslo v programe tak VZDY ide z toho programy vytiahnut (niekedy za par minut niekedy za viac ale ide to vzdy ptz ked to heslo vie poslat niekam program, tak to musi byt mozne v nom dohladat).

Principialne heslo pre porovnanie s heslom zadanym uzivatelom sa robi tak ze sa ulozi hash a hash sa porovnava s hashom vyrataneho zo zadaneho hesla.
Ty ale potrebujes poslat enginu heslo a nie hash, takze v tvojom pripade to budes musiet riesit inac, bud musi zadavat heslo user, alebo zakryptujes/odkryptujes DB heslo pomocou user hesla, alebo bude heslo v aplikacii ale musi sa potom zabezpecit aby sa aplikacia nempohla dostat von od klienta, co ale asi neni mozne. Principialne heslo ktore je v nejakej app je uplne k hovnu a je potom treba zabezpecit aby pristup k samotnej DB mali len autorizovani klienti a nikto iny (t.j. oddelit ju od internetu apod).

Nemate u vas ziaden bezpecnostny koncept ani ziadne specifikacie podla ktorych mas robit aplikaciu?

Ne, zatim jen tak zkoušim hlavně pro sebe abych měl představu na co vše je nutné davat pozor.

Nejak nechapu "enginu heslo"?
Jinak k tomu hashi? Nevim jestli to byla pravda ale cetl jsem nekde už davno že to taky neni 100%. Že jde nějak rozlousknout.

A když bude mit uživatel zakryptovane DB heslo, nemůže to pak nějak získat na zpět když bude vědět že je to zakryptováno jeho heslem?
Snad jsem se vyjadřil jasně:) Každopádně diky za pomoc.

Ja mam pocit ze si nepochopil ani jednu moju vetu tak skus este raz citat a a pripadne sa zamysliet ze co som tym chcel povedat :)

Databaze potrebujes poslat heslo a nie hash. Databazovy engine tiez nejak potrebuje porovnat heslo s nejakymi svojimi ulozenymi ze ci suhlasi, ale nema v sebe ulozene hesla ptz by ich mohol ktokolvek vycitat, ale ma ulozene len hashe hesiel. Z toho dovodu utocnik aj keby zistil hashe tak nevie heslo a teda nemoze ich zneuzit. Ziskat heslo z hashu JE problem a mozes si skusit prelomit 20znakove heslo v SHA a dovidenia o milion rokov :)
To je ale fuk ptz ak chces dat akukolvek identifikaciu do programu automaticky tak utocnik VZDY moze urobit uplne stejnu vec jak ten program a VZDY to ide z programu vycitat. Preto takato "ochrana" je nezmysel. Je to len ochrana akoze navonok (tym myslim ochrana pred tymi ktori nemaju pristup k tej App).

Heslo do databazy sa moze do programu ulozit kryptovane pomocou nejakeho ineho user hesla. Samozrejme user ktory bude mat svoje heslo moze potom zistit v programe heslo do Databazy. Ked niekomu umoznis dostat sa do databazy LOKALNE (bez pripojenia na teba) tak tento jedinec sa do tej databazy dostane a je schopny vycitat mechanizmus autentifikacie. Ked to chces zabezpecit musel by si urobit databazovy engine tak ze klientovi posle nejaky kluc, klient posle ten kluc tebe, ty ho zakryptujes svojim privatnym klucom, posles ho nazad klientovi a klient ho posle databazovmu enginu. V tomto pripade klient nevie napodobnit autentifikaciu. Ale pri kazdom spojeni do DB by sa musel pripajat na teba a ziadat o ten vstup do DB.
Riesenia existuju v zavislosti na tom co sa robi jake su poziadavky a celkovy koncept, a chce to trochu aj experta na bezpecnost s dlhorocnymi skusenostami, ako sorry ale ak to urobi laik co nema o bezpecnosti sajnu tak to prelomim za 5minut.

Ked ti ide len o to aby kazdy trtko amater nevidel v zdrojakoch heslo, tak ho uloz ako pole zaXOR-ovane kazdy znak napr. pomocou 0x5A alebo lepsie pomocou niecoho co sa v cykle meni, potom tie znaky preXORujes v cykle, a mas to. Amater ktory nevie co to je XOR heslo z programu nevycita. Pouceny kinderhacker s nejakymi skusenostami to uz ale vycita.

Inac mozno by si mal upresnit ze co konkretne sa snazis robit a kde to ma byt nasadene, aby ti niekto zhruba napisal koncept jak sa to robi.

Vseobecne cokolvek co sa pripaja na server zvonku sa nepripaja priamo na databazu ale komunikuje len s nejakym kodom beziacim na serveri a na nom sa autentifikuje User zvonku nejakym user heslom. A potom autentifikacia pokracuje nejakym dynamickym popisovaciom (napr. session) a na databazu leze len lokalny kod na serveri a nie priamo aplikacia zvonku. Tak si ochranis databazu pred priamym vstupom. Priamo na DB zvonku moze potom liezt len admin ktory vie heslo do DB.

No jak jsem psal nemam žadny hlubší smysl.

Každopádně v budoucnu bych nejspíš chtěl udělat aplikaci kde se uživatelé přihlási na své učty které jsou v mysql. Čili místo webového rozhraní udělat třeba i desktop aplikaci. Například na zasílani nějakych dat do db. A je asi fakt že napojit se přimo na db by nebylo dobre.

Zpět do poradny Odpovědět na původní otázku Nahoru