Ochrana programu heslem   zodpovězená otázka

VB.NET, Bezpečnost

Dobrý den,

chtěl bych chránit aplikaci heslem a narazil jsem na problém. Ochrana heslem bude jako option, takže potřebuju ukládat dvě hodnoty, heslo(hash) a boolean hodnotu(jestli bude app vyžadovat heslo). Uložení hesla bych neviděl jako velký problém, protože se ukládá jen hash a ten o něm nic neříká. Problém je ta druhá hodnota. Ze všech možností, o kterých jsem uvažoval mi přijde jako nejlepší cesta, ukládat tyto hodnoty do zaheslované databáze( se kterou program pracuje).

Takže otázka je: Máte s tím nějaké zkušenosti, nebo jak byste postupovali?

Za všechny reakce díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Použil bych System.Configuration.ProtectedConfigurationSection, což je šifrováním chráněná skupina konfiguračních hodnot, která se dá naprosto bezproblémově integrovat do již existujícího konfiguračního systému dané aplikace. Šifrování a dešifrování hodnot konfigurace probíhá naprosto transparentně. Pokud jste nikdy s konfiguračním API .NET Frameworku nepracoval, bude nutné nastudovat základy (ConfigurationSection, ConfigurationElement atd.).

Jinak nevím co máte na mysli "zaheslovanou databází", ale uvědomte si, že do databází Microsoft SQL Serveru má plný přístup každý člen skupiny Administrators (což jsou bohužel ve většině případů i normální uživatelé) pokud se pro přihlášení použije Windows autentizace místo SQL autentizace.

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Díky za odpověď. Na to System.Configuration se podívám.

S tou databází je to tak, že používám SQL Server Compact Edition, takže si myslím, že dostat se do bez hesla ní nebude tak snadné. Rád bych na to znal Váš názor.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nene, výše popsaný problém je slabinou prakticky všech edicí SQL serveru. Teprve pokud máte databázi na nějakém serveru, na nějž se nepřihlašují uživatelé, a který má rozumně nastavena práva, tak je to relativně bezpečné.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jenomže SQL compact není server jako takový...

http://vbnet.cz/blog-clanek--39-sql_serv...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsem se snažil nastudovat ConfigurationSection, ConfigurationElement, ProtectedConfigurationSection, atd.,ale moc moudrej z toho nejsem. Nemohl byste uvést nějaký příklad, nebo mě odkázat, kde bych nějaké příklady našel?

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Následující zdroje by vám měly usnadnit pochopení konfiguračního API (alespoň mě byly velmi užitečné a zodpověděly mi spoustu otázek na které jsem v MSDN nenalezl odpovědi):

http://blogs.msdn.com/rprabhu/articles/4...

http://msdn.microsoft.com/en-us/magazine...

http://www.codeproject.com/KB/dotnet/mys...

http://www.codeproject.com/KB/vb/CustomS...

http://blogs.msdn.com/johan_stenbergs_bl...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za ochotu. Myslím že tohle mi pomůže

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ja som pouzil zaheslovany mdb subor, do ktoreho som vlozil

heslo pre aplikaciu.

Kod pre otvorenie zaheslovanej databazy a precitanie pola

s heslom.

V projekte je nutne mat referenciu na DAO.

Dim db As DAO.Database
        Dim tb As DAO.Recordset
        Dim cestaApp As String = My.Application.Info.DirectoryPath
        Dim DAODBEngine_definst As New DAO.DBEngine()
        db = DAODBEngine_definst.OpenDatabase(cestaApp & "\" & "heslo.mdb", False, False, ";pwd=123")
        tb = db.OpenRecordset("Select * From tabHeslo")
        Me.TextBox1.Text = tb("Heslo").Value
        tb.Close()
        db.Close()

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Už jen to, že máte heslo natvrdo v kódu je naprostá hovadina...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Asi ste to zle pochopil. Heslo nie ulozene natvrdo v kode.

Je ulozene v databaze a da sa prepisovat alebo kodovat priamo z vytvorenej aplikacie. Aplikacia sa pri spusteni pyta na heslo, ktore potom overuje s heslom v databaze.

Ja som tento pristup pouzival bez problemov. Je to dost jednoduche.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

K čemu je tedy hodnota "pwd=123" v connection stringu? Předpokládám, že je to heslo pro přístup do databáze. Zde je slabé místo v programu, kdokoliv si toto heslo může jednoduše zjistit a změnit/odstranit heslo uložené v databázi. Pokud do databáze ukládáte heslo jako čistý text, pak už ani nemá cenu to dále řešit (heslo v textové podobě se NIKDY nikam neukládá, vždy se používá hodnota hash která se porovnává s hashem zadaného hesla).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback