OWASP ESAPI
Članovi tima: Danijel Sokač
Uvod
ESAPI (The OWASP Enterprise Security) je besplatan open-source biblioteka koja omogućuje programerima da lakše implementiraju aplikaciju više razine sigurnosti. Također, ove biblioteke su dobre za daljnji razvoj istih.[1]
OWASP ESAPI verzije imaju identičan dizajn koji se sastoji od[1]:
- skupa sučelja za kontrolu sigurnosti - definiraju primjere tipova parametara koji se proslijeđuju tipovima kontrole sigurnosti
- implementacija za svaku kontrolu sigurnosti - logika programa nije specifična za organizaciju ni za aplikaciju
- opcionalnih vlastitih implementacija za svaku kontrolu sigurnosti - logika aplikacije može biti sadržana u tim klasama koje mogu biti razvijane od ili za vašu organizaciju
OWASP ESAPI ima BSD licencu koja sama po sebi dozvoljava korištenje i editiranje ESAPI-ja kako želite. OWASP ESAPI možete uključiti i u komercijalne proizvode.[1]
Sama smisao ove biblioteke je da se olakša implementacija sigurnih aplikacija u raznim programskim jezicima. Kasnije ćemo spomenuti, ali uskoro će se omogućiti suradnja sa drugim programerima da implementiraju ESAPI za neke druge jezike. Korisno je to da je ESAPI moguće koristiti na koji način se želi, a isto tako je super da se može uključiti u komercijalne proizvode.
Informacije o projektu ESAPI
OWASP Enterprise Security API (ESAPI) su alati koji pomažu developerima da se obrane od sigurnosnih propusta u njihovim aplikacijama. ESAPI je arhitekturalno jednostavan. To je skup klasa koje sadrže sigurnosne operacije potrebne većini aplikacija i njihova implementacija je sakrivena u klasama. Ovaj projekt je stvoren kako bi se olakšala ugradnja sigurnosti u postojeće aplikacije,a isto tako kako bi se olakšala implementacija sigurnosti u nove aplikacije. ESAPI se dobiva zajedno sa ESAPI filterom koji minimizira promjene potrebne za aplikaciju.[2]
Aktivni su projekti za slijedeće platforme: [2]
- Java EE
- .NET
- PHP - nema još nijedne verzije
- Ruby
- Python
- Coldfusion
- Swingset - web aplikacija koja demonstrira korištenje OWASP ESAPI-ja
- ASP
OWASP ESAPI projekt je dosta velika pomoć developerima kada je u pitanju implementacija sigurnosti u aplikaciju. Postoji dosta aplikacija koje imaju sigurnosne propuste ili zato jer developer nema volje da implementira sigurnost ili zato jer nema potrebnog znanja da vidi da u njegovom kodu postoje sigurnosne prijetnje. Bilo bi poželjno razviti ESAPI za najpopularnije programske jezike, a isto tako za sve ostale.
Sudjelovanje u OWASP ESAPI projektu
Nema nekih posebnih informacija o tome kako se prijaviti za koji projekt, međutim može se svesti na par koraka koje sam predvidio.
- Pronaći ima li već neka stranica za platformu koja je zanimljiva
- Pregledati stranicu za tu platformu na OWASP-u
- Pretplatiti se za mailing listu za tu platformu
- Javiti se menadžeru projekta
Ako ne postoji još projekt za platformu koja Vam je zanimljiva, možete pokrenuti projekt za tu platformu.
ESAPI specifikacije
Specifikacije za jezgru API-ja
Slijedeće komponente i opisi su preuzeti sa stranice navedene pod rednim brojem 3 u literaturi.
AccessController
Ovaj kontroler je zaslužan za odlučivanje ima li prijavljeni korisnik ovlasti pristupa navedenom resursu. Resurs je bilo što što implementira sučelje Resource.
Tipovi podataka
Parametar | Objašnjenje |
---|---|
R | klasa koja implementira sučelje Resource i predstavalja resurs kojem korisnik pristupa |
Context | bilo koji objekt koji predstavlja trenutni kontekst zahtjeva za autorizaciju - općenito je formatiran kao ključ-vrijednost |
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | - |
Parametri | resource | Resurs kojem korisnik pokušava pristupiti. | |
context | Kontekst zahtjeva. Može biti bilo koji objekt. Primjerice, ako korisnik zahtjeva pristup podacima, kontekst može biti identifikator resursa | ||
Iznimke | AccessDeniedException | Ako se dobije da korisnik nije autoriziran za pristup resursu. Također, AccessControlException će ispisati razloge pojave iznimke. | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | resource | Resurs kojem korisnik pokušava pristupiti. | |
context | Kontekst zahtjeva. Može biti bilo koji objekt. Primjerice, ako korisnik zahtjeva pristup podacima, kontekst može biti identifikator resursa | ||
Iznimke | - | - | |
Vraća | true/false | Vraća true ako je korisnik autoriziran za navedeni resurs inače vraća false. |
AccessReferenceMap<Key>
Ovo sučelje se koristi za mapiranje skupa direktnih referenci objekata na skup indirektnih referenci objekata. Ovo sučelje može pomoći u zaštiti ključeva tablice podataka, naziva datoteka i drugih tipova direktnih referenci objekata. Developeri ne bi smjeli izložiti direktne reference objekata jer to omogućuje napadačima da pokušaju manipulirati tim objektima.
Indirektne reference objekata se obrađuju kao stringovi. Implementacija može generirati ili jednostavne brojeve ili kompliciranije slučajne nizove znakova. Trebalo bi implementirati konstruktor koji prihvaća skup direktnih referenci kao parametar.
Prednost ovog zahtjeva ESAPI-ja je ako se koriste slučani nizovi znakova kao indirektne reference, onda napadač teško može otkriti stvarni identifikator resursa. Ukoliko se ovo sučelje primjenjuje za svakog korisnika, onda se sprječavaju i CSRF napadi.
Tipovi podataka
Parametar | Objašnjenje |
---|---|
Key | Tip podatka objekta koji će se koristiti kao ključ u sučelju AccessReferenceMap. |
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | Type | Tip za direktnu referencu. |
Parametri | direct | Direktna referenca objekta | |
Iznimka | - | - | |
Vraća | Key | Indirektnu referencu tipa Key. | |
|
Tipovi podataka | Type | Tip za direktnu referencu. |
Parametri | key | Indirektna referenca objekta | |
Iznimka | AccessDeniedException | Ako zahtijevana referenca ne postoji ili podrazumijevani tip nije ispravan. | |
Vraća | Type | Direktnu referencu tipa Type. | |
|
Tipovi podataka | Type | Tip za direktnu referencu. |
Parametri | direct | Direktna referenca objekta | |
Iznimka | - | - | |
Vraća | Type | Indirektnu referencu tipa Type. | |
|
- | - | - |
|
- | - | - |
Authenticator
Methode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | User | Tip za korisnika |
Parametri | - | - | |
Iznimka | AutenticationException | Ako nije uspjela prijava korisnika. | |
Vraća | User | Prijavljen korisnik | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | AutenticationException | Ako nije uspjela odjava korisnika. | |
Vraća | - | - |
Codec
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | c | Karakter za enkodiranje. | |
Iznimka | - | - | |
Vraća | String | Enkodirani niz znakova. | |
|
Tipovi podataka | - | - |
Parametri | s | Enkodirani niz znakova. | |
Iznimka | - | - | |
Vraća | String | Dekodirani niz znakova. |
Encoder
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | s | Niz znakova za enkodiranje. | |
Iznimka | - | - | |
Vraća | String | Enkodirani niz znakova. | |
|
Tipovi podataka | - | - |
Parametri | s | Enkodirani niz znakova. | |
Iznimka | - | - | |
Vraća | String | Dekodirani niz znakova. | |
|
Tipovi podataka | - | - |
Parametri | c | Codec | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Set<Codec> | Skup codec-a. | |
|
Tipovi podataka | - | - |
Parametri | codecs | Skup codec-a. | |
Iznimka | - | - | |
Vraća | - | - |
Encryptor
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | cipherText | Kriptirani tekst | |
secretKey | Tajni ključ za kriptiranje. | ||
Iznimka | EncryptionException | Ako je došlo do greške u dekripciji. | |
Vraća | PlainText | Dekriptirani tekst. | |
|
Tipovi podataka | - | - |
Parametri | plainText | Čisti razumljiv tekst. | |
secretKey | Tajni ključ za kriptiranje. | ||
Iznimka | EncryptionException | Ako je došlo do greške u enkripciji. | |
Vraća | CipherText | Kriptirani niz znakova. | |
|
Tipovi podataka | - | - |
Parametri | plainText | Čisti razumljiv tekst. | |
salt | Niz znakova koji pomaže u sažimanju. | ||
iterations | Iteracije kod sažimanja. | ||
Iznimka | EncryptionException | Ako se javi greška kod sažimanja. | |
Vraća | MessageDigest | Sažetak teksta. | |
|
Tipovi podataka | - | - |
Parametri | data | Niz znakova za digitalni pečat. | |
timestamp | Vrijeme kreiranja digitalnog pečata. | ||
Iznimka | EncryptionException | Ako se javi greška kod kreiranja digitalnog pečata. | |
Vraća | String | Digitalni pečat. | |
|
Tipovi podataka | - | - |
Parametri | data | Niz znakova za digitalni potpis. | |
Iznimka | EncryptionException | Ako se javi greška kod kreiranja digitalnog potpisa. | |
Vraća | String | Digitalni potpis. | |
|
Tipovi podataka | - | - |
Parametri | sealedData | Digitalni pečat. | |
Iznimka | EncryptionException | Ako se javi greška prilikom otvaranja digitalnog pečata. | |
Vraća | String | Razumljivi podaci. | |
|
Tipovi podataka | - | - |
Parametri | sealedData | Digitalni pečat. | |
Iznimka | DataIntegrityException | Ako digitalni pečat nije validan. | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | signature | Digitalni potpis. | |
data | Podaci sa kojima je kreiran digitalni potpis. | ||
Iznimka | InvalidSignatureException | Ako digitalni potpis nije valjan. | |
Vraća | - | - |
Executor
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | target | Ciljan objekt. | |
encoder | Encoder. | ||
Iznimka | ExecutionException | Greška prilikom izvršavanja sustavske naredbe. | |
Vraća | ExecutionResult | Rezultat izvršavanja naredbe. |
ExecutorResult
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Tekst pogreške. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Rezultat izvršavanja naredbe. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Integer | Vrijednost koju je vratila naredba pri izlaženju iz programa. |
ExecutorTarget
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | FileHandle | Datoteku koja se može izvršavati. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Handle | Radni direktorij. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | OrderedMap<String, String> | Parametri formatirani u obliku ključ-vrijednost. |
IntrusionDetector
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | eventName | Naziv događaja. | |
message | Poruka. | ||
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | exception | Greška. | |
Iznimka | - | - | |
Vraća | - | - |
LogFactory
U izradi...
Logger
U izradi...
Randomizer
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Boolean | Slučajan true ili false izbor. | |
|
Tipovi podataka | - | - |
Parametri | len | Duljina niza bajtova. | |
Iznimka | - | - | |
Vraća | Byte[] | Niz bajtova duljine koja je navedena kao parametar. | |
|
Tipovi podataka | - | - |
Parametri | extension | Ekstenzija datoteke. | |
Iznimka | - | - | |
Vraća | String | Slučajan naziv datoteke sa navedenom ekstenzijom. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Slučajan ID korisnika. | |
|
Tipovi podataka | - | - |
Parametri | min | Miniminalni broj. | |
max | Maksimalni broj. | ||
Iznimka | - | - | |
Vraća | Integer | Slučajan broj između min i max. | |
|
Tipovi podataka | - | - |
Parametri | min | Minimalan broj. | |
max | Maksimalan broj. | ||
Iznimka | - | - | |
Vraća | Long | Slučajn broj između min i max. | |
|
Tipovi podataka | - | - |
Parametri | min | Miniminalni broj. | |
max | Maksimalni broj. | ||
Iznimka | - | - | |
Vraća | Float | Slučajan broj između min i max. | |
|
Tipovi podataka | - | - |
Parametri | len | Duljina niza znakova. | |
charSet | Skup znakova. | ||
Iznimka | - | - | |
Vraća | String | Slučajan niz znakova iz charset duljine len. |
Resource
Sučelje za resurse do kojih korisnici mogu tražiti pristup.
ServiceLocator
Trenutno nema informacija...
User
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | Type | Tip podatka korisničkog ID-a. |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Type | Identifikacijski podatak korisnika. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Naziv računa korisnika. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Long | Niz brojeva koji predstavljaju rok isticanja. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Integer | Broj pogrešnih prijava. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Long | Vrijeme zadnje neuspješne prijave | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Posljednji IP sa kojeg se pristupa. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Long | Vrijeme zadnje prijave. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Long | Posljednje vrijeme promjene lozinke. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Reprezentacija trenutne lokacije | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Set<String> | Skup rola koje se odnose na prijavljenog korisnika. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Vraća ime koje se prikazuje javno na stranici. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Boolean | True ako je anoniman i false ako nije. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Boolean | Veća true ako je korisnik dostupan, a false ako nije. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Boolean | True ako je istekao rok i false ako nije. | |
|
Tipovi podataka | - | - |
Parametri | role | Naziv uloge korisnika. | |
Iznimka | - | - | |
Vraća | Boolean | Veća true ako korisnik ima tu ulogu, i false ako nema. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Boolean | True ako je korisnik zaključan i false ako nije. | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Boolean | Veća true ako je korisnik prijavljen, i false ako nije. |
Validator
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | Type | Klasa tipa Type od podatka koji se validira. |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Boolean | Vraća true ako su podaci ispravni ili false ako nisu. | |
|
Tipovi podataka | Type | Klasa tipa Type od podatka koji se validira. |
Parametri | data | Podatak koji se validira. | |
Iznimka | - | - | |
Vraća | - | - |
Exceptions
- AccessDeniedException
- AccountDisabledException
- AccountLockedException
- AuthenticationException
- EncodingException
- EncryptionException
- EnterpriseSecurityException
- EnterpriseSecurityRuntimeException
- ExecutionException
- IncorrectCredentialsException
Specifikacije za web API
Ovaj API opisuje komponente koje se mogu koristiti za web aplikacije.
ClientCookie
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Naziv kolačića. | |
|
Tipovi podataka | - | - |
Parametri | name | Naziv koji želimo staviti za kolaćića. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Vrijednost kolačića. | |
|
Tipovi podataka | - | - |
Parametri | value | Vrijednost koja se želi spremiti u kolačić. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Integer | Vraća vrijednost maksimalnog trajanja kolačića. | |
|
Tipovi podataka | - | - |
Parametri | maxAge | Maksimalno trajanje kolačića koje želimo postaviti. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Domena kolačića. | |
|
Tipovi podataka | - | - |
Parametri | domain | Naziv domene koju želimo postaviti u kolačiću. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | Putanja kolačića. | |
|
Tipovi podataka | - | - |
Parametri | path | Putanja kolačića. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Bolean | True ako jeste samo http, ako ne false. | |
|
Tipovi podataka | - | - |
Parametri | httpOnly | true ako jeste samo http, i false ako nije. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | Bolean | True ako jeste sigurni, ako ne false. | |
|
Tipovi podataka | - | - |
Parametri | secure | true ako se želi secure postaviti, i false ako ne. | |
Iznimka | - | - | |
Vraća | - | - |
SecureHttpRequest
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | ClientCookie | Tip podatka kolačića. |
Parametri | name | Naziv kolačića. | |
Iznimka | - | - | |
Vraća | ClientCookie | Vrijednost kolačića pod danim imenom. | |
|
Tipovi podataka | FileHandle | Upravitelj datotekom |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | List<FileHandle> | Skup uploadanih datoteka | |
|
Tipovi podataka | T | Klasa generičkog tipa T, istog tipa koji je i atribut. |
Parametri | name | Naziv atributa HTTP zahtjeva. | |
Iznimka | - | - | |
Vraća | T | Traženi atribut HTTP zahtjeva. | |
|
Tipovi podataka | - | - |
Parametri | header | Zaglavlje zahtjeva. | |
Iznimka | - | - | |
Vraća | String | Zaglavlje HTTP zahtjeva. | |
|
Tipovi podataka | - | - |
Parametri | name | Naziv parametra HTTP zahtjeva. | |
Iznimka | - | - | |
Vraća | String | Vrijednost parametra HTTP zahtjeva. | |
|
Tipovi podataka | - | - |
Parametri | url | tekst URL-a. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | CsrfException | Ako CSRF token nije validan. | |
Vraća | - | - |
SecureHttpResponse
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | cookie | Kolačić koji želimo dodati u odgovor. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | key | ključ parametra | |
value | Vrijednost parametra. | ||
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | url | URL za preusmjeravanje. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | contentType | Tip sadržaja odgovora. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | - | - |
SecureHttpSession
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | T | Clasa generičkog tipa, istog koji je i atribut. |
Parametri | key | Ključ parametra sesije. | |
Iznimka | - | - | |
Vraća | T | Vrijednost atributa sesije čiji ključ se proslijedio. |
URLResource
Extends
- Resource
WebUser
Metode
Metoda | Specifikacije | ||
---|---|---|---|
Tipovi | Objašnjenje | ||
|
Tipovi podataka | - | . |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | String | CSRF token kao string | |
|
Tipovi podataka | - | - |
Parametri | - | - | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | session | HTTP sesija. | |
Iznimka | - | - | |
Vraća | - | - | |
|
Tipovi podataka | - | - |
Parametri | session | HTTP sesija. | |
Iznimka | - | - | |
Vraća | - | - |
Specifikacije za mobilni API
Nema informacija..
Specifikacije za desktop API
Nema informacija...
ESAPI upute za sigurno pisanje koda
Tipičan popis ESAPI sigurnosnih zahtjeva za web aplikacije koji pokazuje kako koristiti ESAPI za implementaciju. Svi oni sigurnosni zahtjevi,s kojima se automatski upravlja su izbačeni iz liste. Slijedi popis koji je uzeti sa stranice pod linkom 4 u literaturi.
Autentikacija
- Svaka interakcija web mjesta od forme za prijavu pa do stranice koja potvrđuje odjavu mora koristiti SSL.
- Svaki zahtjev za stranicom koja zahtjeva autentikaciju treba pozivati metodu ESAPI.authenticator().login().
- Aplikacija bi trebala omogućiti korisniku odjavu na svakoj stranici koja poziva metodu ESAPI.authenticator().logout().
- Polja za lozinke moraju koristiti masku za prikrivanje znakova lozinke, tj. moraju biti tipa password.
- Aplikacija nikada ne smije staviti lozinku u HTML, uključujući i ponovno popunjavanje polja forme.
- Aplikacija bi trebala koristiti FIXME za postavljanje kolačića "zapamti me" u svrhu automatske autentikacije, ali samo ako ju je korisnik autorizirao za to.
- Aplikacija treba uključivati Javascript na sve stranice koji štiti od ugrađivanja na druge web stranice.
- Aplikacija treba ponovno autenticirati korisnika sa User.checkPassword() prije dozvoljavanja pristupa osjetljivim transkacijama.
- Poveznica i URL forme za sve transakcije bi trebali biti ažurirani sa metodom HTTPUtilities.addCSRFToken() kako bi se dodao CSRF značkom.
- Svi HTTP zahtjevi za transakcijom moraju biti verificirani koristeći metodu HTTPUtilities.verifyCSRFToken() kako bi se provjerilo da zahtjev nije krivotvoren.
- Funkcije kreiranja računa i registriranja bi trebale biti zaštićene protiv automatskih alata.
- Aplikacija bi trebala generirati jake lozinke za korisnike koristeći metodu Authenticator.generateStrongPassword().
- Aplikacija treba provjeriti jači svake dobivene lozinke koristeći metodu Authenticator.verifyPasswordStrength().
- Aplikacija treba provjeriti jačinu svakog naziva korisničkog računa sa metodom Authenticator.verifyAccountNameStrength().
- Aplikacija, nakon prijave, treba prikazati vrijeme zadnjeg uspješne (User.getLastLoginTime()) i neuspješne ((User.getLastFailedLoginTime()) prijave.
Upravljanje sesijama
- Jedino JSESSIONID bi se trebao koristiti kao identifikator sesije.
- Svaka stranica bi trebala sadržavati jasan link do funkcije za odjavu.
- JSESSIONID i bilo koji drugi identifikator sesije ne smije biti otkriveni u poveznici, HTML sadržaju, dnevniku i ostalim spremnicima.
- JSESSIONID i bilo koji drugi identifikator sesije ne smije nikada biti korišten kao identifikator za neku drugu svrhu.
- Prepisivanje URL-a nikada ne smije biti odobreno.
- Pozovi metodu ESAPI.authentiator().logoff() za završavanje korisničke sesije.
Kontrola pristupa
- Aplikacija treba pokrenuti metodu assertAuthorizedForURL() u svrhu autorizacije prije dozvoljavanja pristupa svakom URL-u.
- Aplikacija treba pokrenuti metodu assertAuthorizedForFunction() u svrhu autorizacije prije dozvoljavanja pristupa funkciji.
- Aplikacija treba pokrenuti metodu assertAuthorizedForFile() u svrhu autorizacije prije dozvoljavanja pristupa funkciji.
- Aplikacija treba pokrenuti metodu assertAuthorizedForData() u svrhu autorizacije prije dozvoljavanja pristupa podacima.
- Aplikacija treba pokrenuti metodu assertAuthorizedForService() u svrhu autorizacija prije dozvoljavanja pristupa svakom pozadinskom servisu.
- Aplikacija treba koristiti metodu isAuthorizedFor* u svrhu verifikacije prije uključivanja kontrola korisničkog sučelja u HTML ispisu.
- Aplikacija treba koristiti referencu AccessReferenceMap.getIndirectReference()za referenciranje svih objekta aplikacije, kao što su: nazivi datoteka, ključ za bazu, putanje mapa).
- Aplikacija treba zabraniti pristup svim resursima koji ne bi smjeli biti direktno pristupani od strane korisnika (XML, JSP, properties...).
- Aplikacija treba koristiti HTTPUtilities.sendSafeForward() za sva prosljeđivanja, kako bi osiguralo da prosljeđivanja nisu okolni put za izbjegavanje provjere pristupa.
- Aplikacija mora koristiti samo provjeren podatke u odlučivanju o davanju pristupa.
- Administrativne funkcije za aplikaciju bi trebale biti razvijane kao odvojena aplikacija sa jačim kontrolama autentikacije.
Validacija input-a
- Aplikacija treba izbjegavati korištenje skrivenih polja.
- Aplikacija treba izbjegavati korištenje prilagođenih kolčića i ostalih HTTP zaglavlja.
- Aplikacija bi trebala dodati sve prilagođene kolačiće sa funkcijama ESAPI.httpUtilities().safeAddCookie() ili ESAPI.httpUtilities().safeSetCookie() kako bi se osiguralo da su sigurni.
- Aplikacija bi trebala izvesti validaciju na samoj granici svih većih aplikacijskih komponenti.
- Svi inputi moraju biti ovjereni od uzoraka dozvoljenih unosa koristeći metode Validator.* prije korištenja istih.
- Aplikacija treba obraditi sve zahtjeve koji sadrže upload-ane datoteke sa HTTPUtilities.safeFileUpload() kako bi se sigurno izdvojile datoteke iz zahtjeva.
- Ako se moraju koristiti prilagođena zaglavlja, moraju se koristiti HttpUtilities.safeAddHeader() i .safeSetHeader() kako bi se sprječilo ubrizgavanje zaglavlja (header injection).
- Svi zahtjevi moraju biti validirani sa metodom HTTPUtilities.validateHTTPRequest() kako bi se osigurala validacija globanog skupa dozvoljenih znakova za sve dolazne HTTO zahtjeve.
- Treba osigurati da su svi inputi validirani na serveru, iako su već možda validirani na klijentskoj strani.
- Sva preusmjeravanja moraju koristiti HTTPUtilities.safeSendRedirect() kako bi se ovjerilo da je cilj preusmjeravanja dozvoljen skup ili uzorak za validnu destinaciju.
Enkodiranje
- Svi podaci poslani interpreterima ili vanjskim sustavima moraju biti enkodirani sa Encoder.encodeFor*() metodom da se sprječi ubrizgavanje (eng. injection)
Zaštita podataka
- Zahtjevi koji sadrže osjetljive podatke bi trebali koristiti POST metodu.
- Stranice koje sadrže osjetljive podatke trebaju pozvati funkciju HTTPUtilities.setCachingHeaders() kako bi se postavilo prihvatljivo caching zaglavlje.
- Koristi metodu Encryptor.encrypt() za enkripciju i metodu Encryptor.decrypt() za dekripciju osjetljivih informacija prije spremanja.
- Koristi metodu Encryptor.hash() za računanje sažetka u svrhu očuvanja integriteta.
- Podaci koji istiću nakon prođenog vremena bi trebali biti generirani sa Encryptor.seal() metodom i provjereni sa Encryptor.verifySeal() metodom.
- Obrazac sa osjetljivim podacima bi trebao uključivati "autocomplete=off" atribut na FORM oznaci isto kao i na individualnim elementima obrasca.
- Aplikacija treba koristiti EncryptedProperties za spremanje svih podataka relevantnih za sigurnost, kao što su lozinke, kodovi, adrese, itd...
Sigurno korištenje servisa
Trenutno nema podataka.
Upravljanje greškama
Trenutno nema podataka.
Pisanje dnevnika i detekcija upada
Trenutno nema podataka.
Sigurne postavke i razvoj
- Produkcijski kod ne smije sadržavati kod koji nije namijenjen za korištenje, kao kodovi za testiranje, debugiranje i kodovi koji se ne izvršavaju.
- Aplikacijski izvorni kod ne bi smio sadržavati tajne koje bi kompromitirale sigurnost ako bi se otkrile.
- Tim aplikacije bi trebao pokrenuti alate za provjeru kvalitete koda kao što su FindBugs and PMD da se pronađu problemi u kvaliteti.
Izbjegavanje specifičnih prijetnji
Cross site scripting (XSS)
Trenutno nema podataka.
Cross site request forgery (CSRF)
Trenutno nema podataka.
Problemi sa sigurnošću dretvi
- Aplikacija treba izbjegavati koristiti zajedničku memoriju, kao što su varijable klase, varijable instance i singleton-ovi, u višedretvenom kodu.
Denial of service (DoS)
Trenutno nema podataka.
Zaključak
OWASP ESAPI projekti su jako korisna stvar za svakog developera. Dosta je dobro da drugi isprogramiraju sigurne komponente koje onda programer samo uključi u svoju aplikaciju i ne mora voditi brigu o tome. O sigurnosti tih komponenti se i dalje brinu suradnici na OWASP ESAPI projektu koji rade na razvoju sigurnih komponenata za tu platformu.
Često je problem ugradnja sigurnosnih zahtjeva u aplikaciju jer programeri neki puta zanemare taj aspekt ili nemaju znanja o njemu. Pa se često dogodi da mnogo aplikacija bude hakirano ili srušeno.
Sigurnost je jako bitan dio aplikacija isto kao i sigurnost podataka korisnika aplikacije. OWASP ESAPI se upravo brine o tome da aplikacija ima implementirane sigurnosne mjere. ESAPI ima definirane komponente koje se trebaju isprogramirati za svaku platformu te je u tijeku izrada mjera protiv nekih specifičnih napada. Kod ovih projekata je jako bitno uzeti u obzir i korisničke priče ali i "hakerske" priče kako bi sam projekt bio uspješan. Nikako se ne smije oglušiti na prijave grešaka u radu od strane korisnika, jer one mogu nositi sigurnosne rupe i moguće buduće probleme.
Literatura
- Category:OWASP Enterprise Security API, https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API , pristupljeno 19.12.2015.
- Project Information: OWASP Enterprise Security API Project, https://www.owasp.org/index.php/Project_Information:_OWASP_Enterprise_Security_API_Project, pristupljeno 19.12.2015.
- ESAPI Specification, https://www.owasp.org/index.php/ESAPI_Specification, pristupljeno 20.12.2015.
- ESAPI Secure Coding Guideline, https://www.owasp.org/index.php/ESAPI_Secure_Coding_Guideline, pristupljeno 22.12.2015.
Danijel.sokac.2015 23:29, 18. prosinca 2015. (CET)