Zapmatování hesla   zodpovězená otázka

VB.NET, WinForms

Zdravim, dělám Facebookovou aplikaci a potřeboval bych vědět jak uložit heslo v MaskedTextBox.

Předem dik za odpověď

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

Môžete ho uložiť do Settings projektu, nastavuje sa to na karte Settings vlastností projektu, dostupné to bude pomocou My.Setting.<názov vlastnosti> . Nezabudnite pri ukončení nastavenia uložiť pomocou My.Settings.Save() a hlavne to heslo pred uložením dôkladne zašifrujte, aby nič okrem vašej aplikácie nevedelo prečítať heslo.

Osobne by som všetko, čo má na starosti operácie s heslom, vrátanie šifrovania/dešifrovania, načítania/ukladania a iných označil ako Friend(resp. internal v C#) alebo Private. Takto môžete lepšie zabezpečiť, že iná assembly nemôže manipulovať s heslom, ani keď si pridá reference na Váš program.

Ideálne by som kritické časti aplikácie, ako napríklad narábanie s heslami oddelil do Class Library(.dll), dal ich ako internal, na assembly atribút InternalsVisibleTo a oba assembly(aj program aj Class Library) podpísať kľúčom. Pán Linhart, dala by sa obísť takáto ochrana ? Prípadne ako ?

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

Pokud se jedná o citlivé hodnoty v konfiguračních souborech, pro ně je určená speciální šifrovaná sekce. Její slabinou je, že každý uživatel s oprávněním Administrator má přístup k šifrovacímu klíči, který je v systému uložen v podobě obyčejného souboru.

Hesla se v žádném případě neukládají jako čistý text, ale jako hodnota hash vylepšená nějakou vlastní obfuskací (salt).

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

Zajímalo by mě, k čemu vám to bude. Patrně jste začal celou aplikaci přihlašovacím oknem, které můžete rovnou zahodit, protože autentizační mechanizmus Facebooku nutně vyžaduje prohlížeč (tedy komponentu WebBrowser) bez kterého se neobejdete. Na klasickou autentizaci ve stylu posílání jména a hesla někam můžete rovnou zapomenout. Dál by mě zajímalo, na co potřebujete MaskedTextBox pro zadávání hesla, když tam žádné omezení na znaky hesla není.

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

Jen taková poznámka, Facebook disponuje řadou API a web services, se kterými jde samozřejmě pracovat i bez web browseru, ale nevím zda to je i případ tazatele. Obecně tedy jde s facebookem komunikovat i přímo z aplikací, vyžaduje to ale danou aplikaci zaregistrovat v developerské sekci facebooku, kde se vygenerují i příslušné klíče pro přístup.

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

Pro vaši informaci ani jedno API z toho, co Facebook oficiálně nabízí vývojářům není použitelné pro desktopové aplikace. Vše je určeno pro webové aplikace. Takže u desktopových aplikací jiná možnost jak získat autentizační token než použít WebBrowser není. Ten je nutný pouze pro zobrazení přihlašovací webové stránky a maximálně odklepnutí potvrzení, že aplikace může přistupovat k základním informacím v uživatelském účtu. Aplikaci tam zaregistrovanou samozřejmě mám, kromě získání Application Key je potřeba nastavit ještě pár věcí v pokročilém nastavení, jinak přihlašování a komunikace z desktopové aplikace nebude fungovat.

Takže komunikovat bez WebBrowseru s tím jde, ale nikoliv bez předchozí autentizace, ke které je WeBrowser nezbytně nutný.

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

Dělám to takhle

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs)
        WebBrowser1.Navigate("http://facebook.com/login.php")
    End Sub
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Text = WebBrowser1.DocumentTitle
        Dim theElementCollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("input")

        For Each curElement As HtmlElement In theElementCollection

            Dim controlName As String = curElement.GetAttribute("name").ToString
            If controlName = "email" Then
                curElement.SetAttribute("Value", LoginForm.Username.Text)
            ElseIf controlName = "pass" Then
                curElement.SetAttribute("Value", LoginForm.Password.Text)
            ElseIf controlName = "login" Then
                curElement.InvokeMember("click")
            End If
        Next
        Show()
        
    End Sub

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

To je k ničemu hlavně ze dvou důvodů: Jakmile změní název elementů nebo přihlašovací adresy (a něco tam mění neustále), přestane to fungovat. Po prvním přihlášení je nutné povolit aplikaci přístup k základním údajům, jinak nebude fungovat a tímto způsobem se tento krok přeskočí.

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