Sikre OutSystems Agile Platform-applikasjonen

Les de forrige installasjonene i serien: Komme i gang med OutSystems Agile Platform, Lære det grunnleggende i OutSystems Agile Platform, beskrive OutSystems Agile Platform Service Studio-opplevelse, Arbeide med OutSystems Agile Platforms Integration Studio, distribuere en applikasjon opprettet med OutSystems Agile Platform, Legge ECT til et eSpace med OutSystems Agile Platform, Arbeide med planlagte jobber i OutSystems Agile Platform, og bruke AJAX i OutSystems Agile Platform.

Sikkerhet er en av de viktigste funksjonene i ethvert program; dessverre i programvareutvikling får programmerere ofte ikke tid (og de mangler ofte kunnskap) for å få sikkerhetsvinkelen riktig. Når utviklere har en stram tidsfrist, blir sikkerhet (så vel som kvalitetssikring og dokumentasjon) vanligvis igjen.

OutSystems Agile Platform har flere funksjoner som gjør det veldig enkelt å bake sikkerhet i applikasjonen din, vanligvis med veldig liten innsats. Her er en titt på tre typer sikkerhet som jeg har jobbet med i Agile-plattformen: autentisering ("hvem er du?"), Autorisasjon ("har du lov til å gjøre det?") Og kryptering. Jeg vil også kort dekke Enterprise Manager-komponenten.

Godkjenning

Autentisering er en kjernedel av Agile-plattformen. Hver eSpace som lages har en brukerenhet innebygd i den. Brukerenheten håndterer det grunnleggende: navn, brukernavn, e-postadresse, passord og et par andre felt. Brukerenheten er låst slik at du ikke kan endre den. I Rat Catcher opprettet jeg en USER_DETAIL-enhet for å inneholde tilleggsinformasjon, og jeg knyttet den til brukerenheten.

Det er en rekke handlinger, funksjoner og andre verktøy som er innebygd i systemet som lar deg samarbeide med brukere. For eksempel kan du få den gjeldende brukerinformasjonen med UserId og UserName Session Variables. Du kan sjekke disse mot NullIdentifier-verdien for å bekrefte at brukeren er logget inn.

Hvis du trenger å se om en bruker er den de sier at de er og logge på dem, er dette en kløff. Hvis du har en garanti for at den som bruker applikasjonen er riktig person, men du ikke har passordet (for eksempel at noen henter passordet sitt eller oppretter en ny konto), kan du ringe innloggingsaksjonen og gi det UserId. Men hvis du vil forsikre deg om at de har riktig passord, er det LoginPassword-handlingen.

Merk: Systemet krypterer ikke automatisk passordene som er lagret i brukerenheten. Hvis du vil at passordene skal krypteres, legger du passordet gjennom krypteringsfunksjonen først når du oppretter en ny brukerenhet. Når det er sagt, er det ikke nødvendig å kryptere passordet som de oppgir når du logger inn brukerne. Du kan også lage tilfeldige passord med funksjonen GeneratePassword (); Jeg bruker dette når kontoadministratorene oppretter nye brukerkontoer, slik at de nye brukerne får et tilfeldig passord som kontoadministratoren ikke kjenner. Hvis LoginPassword mislykkes, kaster det ut ugyldig påloggingsfeil, som du kan håndtere i arbeidsflyten og utføre passende tiltak. Innlogging og LoginPassword kan settes til å være "vedvarende" hvis du vil. Du kan logge ut brukere med Logg ut-handlingen. Du kan se i figur A hvordan jeg koblet sammen et innloggingssystem for Rat Catcher. Figur A

En enkel innloggingsskjermhandling

For å opprette brukere lager du en ny post i brukerenheten - men husk å kryptere () passordattributtet først.

Autorisasjon

Den smidige plattformen lar deg lage forskjellige roller, som er kjent som tillatelsesområder. Hver bruker kan ha flere tillatelsesområder tildelt dem; i tillegg er det to innebygde tillatelsesområder: Anonyme og registrerte. Alle brukere har automatisk det registrerte tillatelsesområdet, og alle som ikke er logget inn er medlem av Anonym. Du oppretter disse tillatelsesområdene i eSpace-treet ved å høyreklikke på Tillatelsesområder og velge Legg til tillatelsesområde.

I Rat Catcher la jeg til tillatelsesområdene for kontoadministrator og globaladministrator. Rat Catcher lar flere brukere bli "eid" av en konto, men bare den ene brukeren med AccountAdministrator-tillatelse kan redigere de andre brukerne eller ta beslutninger som påvirker kontoen. Det andre nye tillatelsesområdet er forbeholdt folk på min ende som kan redigere hva som helst i systemet.

Det er veldig enkelt å bruke tillatelsesområdene. Hvis du vil begrense en webskjerm til bestemte brukere, velger du webskjermbildet i eSpace-treet, og velger tillatelsesområdene som får tilgang til webskjermen, i tillatelsesgruppen for Egenskaper. Hver gang en bruker blir henvist til en webskjerm som de ikke har tilgang til, får de en feil. Så, hvordan hindrer du brukere i å komme til disse skjermene?

I Header Web Block bruker jeg If-widgeten bare for å vise navigasjon til områder som brukeren har tilgang til. I Expression-redigeringsprogrammet kan du bruke funksjonen CheckXYZPermission () - der XYZ er navnet på tillatelsesområdet (å legge til et tillatelsesområde legger også til den tilsvarende funksjonen) - for å bestemme om den angitte brukeren har tilgang til det tillatelsesområdet. Med denne teknikken ser ikke brukerne navigering til områder de ikke har tilgang til; Hvis brukere prøver å få tilgang til disse områdene (for eksempel hvis de bokmerke en side i et begrenset område og deretter logget ut), får de en feilmelding.

I noen situasjoner må jeg gå et skritt videre. Når jeg for eksempel bruker skjermbildet AccountSettings, vil jeg ikke bare sørge for at brukeren er en kontoadministrator, jeg må sørge for at brukeren er kontoadministrator for kontoen det gjelder ; når alt kommer til alt ville det være trivielt for en angriper å opprette en konto og få tilgang til skjermbildet AccountSettings, men gi det en annen konto-ID å redigere. Et alternativ er å la AccountSettings-siden bruke AccountId til brukeren som for øyeblikket er pålogget, men jeg ville ha litt mer kompleks logikk. Jeg valgte å bruke en If-widget i forberedelsene mine som sjekker om AccountAdministrator-identifikatoren i KONTO-enheten er den samme som gjeldende bruker-ID, eller om brukeren har GlobalAdministrator-tillatelse; hvis ingen av disse betingelsene er oppfylt, kaster jeg en unntak som jeg opprettet for dette formålet.

Etter å ha undersøkt dokumentasjonen, lærte jeg at den beste måten å håndtere alle disse diverse unntakene var å gå til skjermflyten og legge til ErrorHandler Widgets ( figur B ) for å hente sikkerhets unntakene (som genereres når en bruker prøver å få tilgang til en webskjerm som de ikke har autorisasjon for) og de Unntakelige privilegiene-unntakene som Rat Catcher produserer. Herfra opprettet jeg en webskjerm som forteller brukeren at de mangler tillatelser og hadde linken InsufficientPrivileges Exception Handler til denne skjermen. For øyeblikket peker også Security Exception Handler på denne webskjermen, men jeg jobber med en påloggingspliktig side som vil omdirigere brukeren til sin opprinnelige destinasjon etter en vellykket innlogging. Jeg benyttet også anledningen til å lage en generisk side "en feil har oppstått" som automatisk sender inn en billett til meg på brukerens vegne. Dette tok bare noen få øyeblikk fordi jeg allerede hadde funksjonaliteten på Hjelp-skjermen - alt jeg trengte å gjøre var å refaktorere det til en egen handling. Figur B

Delen av Rat Catcher Screen Flow som håndterer feilene.

kryptering

Nå som Rat Catcher har verdifull informasjon som passord og kredittkortdetaljer som flyter rundt, er det veldig viktig å få noe kryptering som forekommer "på ledningen" for å beskytte brukernes data under transport. Jeg har skjermt for kontoinnkjøp, men det er ikke koblet til en kredittkortleverandør enda fordi denne krypteringen ikke er på plass. En forutsetning for å få en kredittkort gateway-konto er PCI-samsvar, som krever SSL-sikkerhet, så det har blitt veldig kritisk at jeg får SSL-krypteringen koblet opp.

På slutten av ting på den smidige plattformen er dette et blunk. Alt du trenger å gjøre er å velge en webskjerm som skal overføre sensitive data, velg drop-boksen HTTP Security og velge SSL. Hvis du har behov for å bekrefte identiteten til de besøkende, kan du velge SSL med klientsertifikater. På serversiden av ting trenger du et SSL-sertifikat fra en pålitelig kilde som skal installeres på webserveren, og få serveren til å bruke det sertifikatet for SSL-økter. Hvis applikasjonen strengt tatt er til intern bruk, kan IT-avdelingen bruke deres interne Certificate Authority for å generere sertifikatet gratis. For meg hadde jeg en litt vanskeligere rute å ta, på grunn av å ha serveren bak en omvendt proxy.

Først måtte jeg få sertifikatet mitt. Jeg valgte Go Daddy på grunn av dets latterlige lave priser, gode kundeservice og tidligere opplevelser. Jeg lover at selskapets racy reklame ikke påvirket avgjørelsen min (jeg ble Go Daddy-kunde i løpet av en 15-års periode med å ikke se på TV)! Jeg ønsket at front-serveren min også kunne skaffe ut andre nettsteder via SSL, så jeg valgte Go Daddy's Standard UCC-sertifikat, som tillater flere domenenavn i sertifikatet. Deretter installerte jeg sertifikatet, la SSL til på nettstedets bindinger og valgte sertifikatet.

Da oppdaget jeg at oppsettet av URL-omskriving ikke ville fungere fordi når Agile Platform Server ville skrive ut HTTPS-versjonen av URL-er for å sikre dem, brukte den vertsnavnet det ble kalt av, ikke det originale. Så i mitt tilfelle, selv om brukeren hadde trukket opp nettstedet etter det eksterne vertsnavnet, brukte utgangen det interne vertsnavnet for SSL-koblinger og skjemainnleveringer. Dette var et problem. Jeg slettet den generelle Reverse Proxy-regelen som jeg lagde, og jeg brukte Reverse Proxy-malen i URL Rewrite-konfigurasjonen til IIS Manager for å bruke standard reverse proxy. Nå hadde jeg et helt nytt sett med problemer - ingen av mine nærstående fungerte. Det viser seg at jeg trengte å godkjenne bruken av servervariabelen HTTP_ACCEPT_ENCODING og tvinge den til alltid å være tom; Ellers mislykkes regelen for å omskrive nettadressene som backend-serveren genererte. Dette fikset systemet for de ukrypterte sidene og gjorde at koblingene til de krypterte sidene var riktige.

Forsøkene mine på å trekke opp de krypterte sidene mislyktes fremdeles med en bisarr feilkode på 502.3 ("dårlig gateway"). For å gjøre en lang historie kort, trengte jeg å gå inn på backend-serveren, få opp den virtuelle katalogen for eSpace og fortelle den å "ignorere" klientsertifikater i stedet for å godta dem. Ja, dette bryter muligheten for å bruke alternativet HTTP With Client Certificateates på en side; alternativet var en lang, smertefull prosess for å installere et klientsertifikat på vegne av den lokale maskinkontoen på front-serveren. Når jeg så på instruksjonene, gjorde jeg meg kvalm, og siden jeg aldri planlegger å kreve klientsertifikater, valgte jeg å ta enklere vei for tiden.

Figur C

Selv om den nåværende siden bruker HTTP, peker koblingen Opprett en konto til en HTTPS-URL fordi den siden krever SSL.

Enterprise Manager

Enterprise Manager er en komponent som lar applikasjonene dine dele brukerdatabasene, administreres og administreres sentralt med mer. Det kommer med mye innebygd funksjonalitet rundt godkjennings- og autorisasjonsprosessen; det er også hjem til noen av de andre komponentene i den smidige plattformen som jeg liker, for eksempel Embedded Change Technology (ECT). Figur D

Enterprise Manager sin brukeradministrasjonsfunksjonalitet
Hvis du var smart nok til å starte prosjektet med stilguiden ( figur E ), er du allerede integrert i Enterprise Manager. Jeg var ikke så smart. Som den fremtredende fyren som jeg er, dyppet jeg først inn i dette prosjektet og tok oksen ved hornene. I dette tilfellet betydde det at da jeg til og med fikk vite om Enterprise Manager, hadde jeg mye funksjonalitet bygget og avhengig av innloggingssystemet mitt. Jeg prøvde å slå sammen Rat Catcher med Enterprise Manager Template eSpace, men det kom ganske dårlig ut. Jeg tok et skritt tilbake, og spurte meg selv om Enterprise Manager var verdt det. Hvis jeg startet et prosjekt fra bunnen av igjen, ville svaret være ja, men gitt at Rat Catcher ikke trenger å integreres i andre applikasjoner (det er front-UI og faktureringssystem for en WCF Web Service), følte jeg at jeg hadde allerede duplisert mye av funksjonaliteten som jeg hadde ønsket meg fra Enterprise Manager. Overfor beslutningen om å fortsette å transportere med det jeg hadde eller å slå sammen de to systemene, valgte jeg å fortsette å gå videre. Men herfra og ut har jeg lært leksjonen min: alle nye prosjekter starter med stilguiden og bruker Enterprise Manager. Figur E

Når du starter en applikasjon med stilguiden, inneholder den allerede skjermer for arbeid med brukere, for eksempel dette påloggingsskjermbildet.

J.Ja

Avsløring av Justin's tilknytning til industrien: Justin James har en kontrakt med Spiceworks for å skrive produktkjøpsguider; han har en kontrakt med OpenAmplify, som eies av Hapax, for å skrive en serie blogger, opplæringsprogrammer og artikler; og han har en kontrakt med OutSystems om å skrive artikler, eksempelskode, etc.

© Copyright 2020 | mobilegn.com