Sikkerhet vite Whos Who

The Perpetual Newbie - Logg Entry # 5.2This artikkelen først dukket opp på http: //www.undu.comAn tidligere versjon av denne artikkelen dukket opp tidlig i februar 00. Noen rettelser, litt klok redigering og bedre organisering vil forhåpentligvis resultere i noe bedre for deg, reader.Recently, fant jeg meg selv uten en søknad innlogging komponent. Tvunget av omstendighetene til å lage en for minst midlertidig utnyttelse, jeg synes det interessant nok til at jeg tenkte jeg skulle ta en løpetur på å skrive en omnibus artikkel for min kamerat newbies. Pass deg en midlertidig segue litt lenger ned! En login form er ikke alltid tegn på et programmerings paranoid. Ærlig talt, jeg bruker innloggingsskjemaet til å finne ut hvem som er å bruke programmet slik at jeg kan tagge oppføringer og redigerer med en identifikator. Hvis du trenger sterk sikkerhet på komponent eller menynivå, la nå og sjekk ut fullverdige systemer som UIL Security System. Men hvis du kjører en enkel app med et par brukere du ønsker å skille, eller hvis du ønsker å ha en "liten sikkerhet," lest on.Readers vil huske at jeg pleier å kjøpe mine løsninger heller enn å re-oppfinne dem. For sikkerhet og en ganske kjekk liten login form, jeg foretrukket Kalliopi er securityguard system. Mens du bruker Delphi 3, fant jeg det å være rask å installere, lett å kjøre og ganske kraftig. Dessverre, det er ingen Delphi 5 versjon av den. Selv om jeg ville ha vært å være først i køen når den kom ut, er mitt nyeste informasjonen at det aldri vil skje. Sooooo, måtte jeg ha en login system som tok fordel av de store tingene jeg hadde kommet til å forvente fra securityguard. Det måtte ha en innloggingsskjerm og et middel til å trekke ut informasjon om brukerens sikkerhetsnivåer og andre diverse info, slik som preferanser (jeg kunne gjøre dette gjennom INI /Register filer, men det er bare så mye lettere å sette det inn i sikkerhets tabellen , siden noen brukere migrere fra datamaskin til datamaskin) .Given min midlertidig behov for en pålogging, bestemte jeg meg for å begrense mine ambisjoner og arbeide med bare å få navnet og sikkerhetsnivået info i programmet. Jeg startet med design av sikkerhets tabellen, som jeg kaller PAZWORDZ. At tabellen skal inneholde et felt for brukernavn (tastet), passord og annen informasjon du anser appropriate.SEGUE: Naming FieldsIn lage din egen versjon av en sikkerhets bord, men uansett navn, bør du vurdere en påminnelse. Ikke misbruk din rett til å nevne felt hva du vil. For mange år siden var jeg en del av den første operasjonen for å kombinere Paradox for DOS, Interbase og peer-to-peer nettverk. Borland sa det ikke kunne gjøres på den tiden, men vi gjorde ... etter at vi fikset en hel flåte av navnesaker. Jeg oppdaget da at spaces, understrek og tegnsetting er onde, onde, onde i feltnavn. Som alle andre på den tiden, var jeg begeistret for å kaste av seg åket av begrensede dBase navn og elsket Paradox evne til å bruke navn som kjørte videre og videre og videre og videre. Det var det samme som en ny desktop publishing brukeren å finne ut om skrifter og sin overflod. Eller når de førstegangs W95 brukere oppdaget i slutten av 8,3 filnavnet tyranni. De gikk bananas. For meg var det feltnavn. Min største forbrytelse var feltnavn som Telefon # eller Kundens grunner. Interbase hatet disse navnene. Så, vi gjorde om strukturen av Paradox databaser og deretter gikk om programkoden (flere titusener av linjer) å finne og erstatte disse navnene. ALDRI again.Well, er aldri lenge. Når jeg først var å bygge mine sikkerhets tabeller, jeg brukte enkle navn på felt. Uten tanke, gjorde jeg brukerens navn feltnavn. Startdato ble DATE. Det var et par andre forseelser, men du får drift. Disse feltnavn ikke bite meg før jeg trengte å bruke noen SQL. Navnene Deretter ble årsaken for ekstra innsats. Hvis navnet feltet ser ut som en sannsynlig eiendom navn, eller selv kan være som en egenskap navn, endre det !. Gjør det nå, i den kreative fasen, og du vil bli mye lykkeligere senere. Gjør det brukernavn og Startdato. Hvis du ikke vil case-sensitive felt, så sørg for at du auto-cap navne og passordfelt. Til slutt, ikke glem å passordbeskytte det endelige produktet, og å spille inn passordet. Det er en forglemmelse jeg har vært skyldig of.SEGUE OVER.In gjør meg et Pålogging form. Jeg begynte med Delphi Passord form. Jeg kopierte etiketten og redigeringsboksen for passord for å opprette en etikett for brukernavn og redigeringsboksen. Noen jockeying av etiketter, bokser og knapper ga meg den tradisjonelle login form med brukernavnet redigeringsboksen over passord redigeringsboksen, overtop OK og Avbryt. Redigeringsboksene ble begge satt til store bokstaver, som jeg var med alle store bokstaver for navn og passord i sikkerhet tabellen. Hvis du ønsker å gå det ekstra steget for å ha case-sensitive identifikatorer, så ikke gjør det. Jeg satte en datakilde og bord komponent koblet til Pazwordz på skjemaet. Som en siste touch, bestemte jeg meg for å ta et bilde, med min logo i det og etiketten "An Idea Mechanic App." Du kan inkludere et generisk bilde, ble et selskap bestemt bilde eller ingenting i all.KeyPreview slått til TRUE, et viktig skritt. Og jeg måtte legge den dialogenhet til bruk uttalelse. Deretter la jeg følgende kode: var DlgLogin2: TDlgLogin2; AttemptsLeft: integer; gjennomføringen {Navnet og passordet ikke samsvarte, Fortsett eller Quit?} Prosedyre TDlgLogin2.NoGood; begin {Et forsøk ned, hvor mange reise?} AttemptsLeft: = AttemptsLeft - 1; hvis AttemptsLeft > = 1 da begynne {Tørk ut dårlig forsøk, og gå tilbake til begynnelsen} eUserName.Text: = ''; ePassword.text: '' =; eUserName.setfocus; {Jeg kunne være mer forklarende, her, men hvorfor?} Showmessage («Ikke riktig, prøv igjen! '); {Jeg kunne være mer forklarende) end annet DlgLogin2.ModalResult: = mrAbort; {For mange forsøk, BYE!} End {Håndter skriv tastetrykk i brukernavnet redigeringsboksen} prosedyre TDlgLogin2.eUserNameKeyPress (Sender: TObject; Var Key: Char); begynne hvis Key = # 13 {Var det på enter-tasten? } deretter begynne {konvertere skriv til en kategori} selectNext (ActiveControl som tWinControl, true, true); key: = # 0; {Tørk ut skriv tastetrykk} ende; end {Handle på enter-tasten i passordredigeringsboksen og klikk OK} prosedyre TDlgLogin2.ePasswordKeyPress (Sender: TObject; Var Key: Char); begynne hvis Key = # 13 da begynne selectNext ( ActiveControl som tWinControl, true, true); key: = # 0; OKBtnClick (Sender); {Tilsvarer å klikke OKBtn} slutten; end {Avbryt skrive inn navn /passord. Programmet vil ikke kjøre} prosedyre TDlgLogin2.CancelBtnClick (Sender: TObject); begynne DlgLogin2.ModalResult: = mrCancel; end {Vi har et forsøk, var det bra? JA! ! Beklager, NO} prosedyre TDlgLogin2.OKBtnClick (Sender: TObject); begynne OKBtn.SetFocus; {Dette sikrer redigeringsfeltet innholdet blir lest} hvis eUserName.text = '' da eUserName.setfocus {ingen navn, ingen forsøk} else if ePassword.text = '' da ePassword.setFocus {ingen passord, ingen forsøk} else if TblPW .findkey ([eUserName.text]) {er navnet der?} da om store bokstaver (TblPW.fieldByName ("passord") asString.) = ePassword.text {er passordet det samme?} deretter DlgLogin2.ModalResult: = mrOK {La programmet kjøre} else NoGood {Ethvert forsøk igjen?} else NoGood; {Ethvert forsøk igjen?} Ende; initialisering AttemptsLeft: = 3; Noen av koden bærer ekstra kommentarer. De tastetrykk prosedyrer for de to redigeringsboksene er de samme, med unntak av den påfølgende spoofing av et trykk på OK-knappen når du trykker skriv i passordfeltet. Og det er en mangel på feil isolasjons med dette prosjektet. Det er tydeligvis flere steder for Try /Unntatt blokker og feil-handlere. Det er opp til deg å bestemme hvor mye lenger å kjøre safe-kodepraksis på dette job.The prosjektet filen er vist nedenfor: bruker Forms, DBtables, Dialoger, FInputInv i 'FInputInv.pas' {FrmMainInput} uDlgLogin2 i 'E: \\ v5 \\ uDlgLogin2.pas {DlgLogin2} {$ R * res} begynne Application.Initialize; session.addpassword ('itsreallynotmyfault'); DlgLogin2: = TDlgLogin2.create (null); med DlgLogin2 gjøre begynne TblPw.DatabaseName: = 'Project1'; TblPW.TableName: = 'Pazwordz'; TblPW.Active: = true; showmodal; hvis ModalResult = 1 da begynne Application.CreateForm (TFrmMainInput, FrmMainInput); FrmMainInput.UserName: = DlgLogin2.eUserName.text; FrmMainInput.DEB: = DlgLogin2.TblPw.FieldByName ('MiniID') asString;. hvis FrmMainInput.DEB = '' da FrmMainInput.DEB: = kopiere (med store bokstaver (DlgLogin2.eUserName.text), 1,3); FrmMainInput.SecLevel: = DlgLogin2.TblPw.FieldByName ('SecLevel') asInteger;. FrmMainInput.PgmDir: = ExtractFilePath (application.ExeName); DlgLogin2.free; Application.Run; ende annet DlgLogin2.free; ende; end.Once mer, det er noen finagling med bruk uttalelse av DPR filen. Jeg har lagt DBTables og dialoger for å håndtere dialogen login og databasen komponenter på at form. Jeg kunne ha selvfølge å bruke den delen hvor jeg satt sikkerheten tabellens alias, tabellnavn og aktivere den. Men jeg ønsket å gjøre dette skjemaet en universell form jeg kunne bruke med mange bruksområder. Så, jeg lagret dialogen skjema til et sentralt sted og satt i linjene som vist her for å operere successfully.One gotcha gjorde oppstå. Opprinnelig var "hvis ModalResult = 1" linjen var "hvis ModalResult = mrOK." Kompilatoren kvalt på det, hevder det ikke kunne finne ut mrOK. Jeg var ganske sikker på at mrOK ble definert i dialoger, men jeg ga opp og i stedet brukt nummerert verdi på 1 for mrOK.Obviously, det er viktig å klamre seg til dialogboksen innloggings så lenge du kan, for å krysse over Sikkerhetsnivå, Brukernavn og andre Miscellanea at du har i sikkerhets tabellen. Jeg bruker DEB-feltet for å gjøre mini-tagging for identitet. Det står for data oppgitt av og er vanligvis de tre første bokstavene i navnet. Men, i tilfelle av ANG, kan det være Angelo eller Angie, så innholdet i sikkerhets tabellens MiniID feltet skiller mellom de to som ALO og ANG.Hopefully kan du bruke denne ideen til å starte din egen login form, enten det er for sikkerhet grunner eller for å finne ut hvem som bruker programmet riktig now.Gary MugfordIdea Mechanic, Bramalea ON [email protected] Anmeldelser



Previous:
Next Page: