Puhastekst · Muutelugu · Täiendus?

Mittefunktsionaalsed nõuded v 4.1

· meta · vorming · litsents · moodulstruktuur · keel · testimine · koodi kvaliteet · frontend · kasutatavus · URL-id · teated · koodisüsteemid · autentimine · rollihaldus · väljumine · andmebaas · logimine · ehitamine · paigaldamine · infoturve · krüpto · andmekaitse · käideldavus · monitooring

Nõuetekogum on mõeldud kasutamiseks: 1) RIA arhitektidele, toote- ja projektijuhtidele tarkvara kavandamisel ja arendustööde tellimisel ning kontrollimisel; 2) arendajatele arenduslepingute täitmisel.

Nõuded on sõnastatud RIA arendusprojektide pikaajalise kogemuse põhjal ja markeerivad valdkondi ning küsimusi, mis vajavad erilist tähelepanu. Praktiliselt iga nõude taga on kellelgi ettetulnud probleem. Kogemusest lähtudes on üritatud sõnastada abstraktne reegel. Nõuete eesmärk on probleemide taasesinemist vältida.

Kui käesolev nõuetekogum on lisatud arendustööde hankedokumenti või arenduslepingusse, siis on kogumi kõigi nõuete täitmine kohustuslik (kui hankedokumendis või arenduslepingus ei määrata teisiti).

Siinsete nõuete rakendamisel peab olema paindlik ja arvestama konkreetse tarkvarasüsteemi eripära. Nõuded, mida tarkvarasüsteemi eripära tõttu ei saa täita või ei ole mõistlik täita või on mõistlik täita osaliselt või oluliselt erineval viisil, tuleb välja selgitada ja määrata nende erikäsitlus. Erisused (mitte- või osaline rakendamine, kui nii on otstarbekas) on lubatud tellija nõusolekul. Vt ka nõue 1.1.

Arvestama peab ka, et nõuetekogum ei ole kattev ega täielik. Konkreetse toote jaoks tuleb tavaliselt nõudeid täiendada ja konkretiseerida.

Nõuded on kooskõlas digiriigi ristfunktsionaalsete nõuetega (vt https://koodivaramu.eesti.ee/e-gov/cfr).

Üksikule nõudele saab viidata kohaleviiva URL-ga: https://e-gov.github.io/MFN/#6.1. Lühiviitena on soovitatav kuju MFN 6.1.

Tundlikku teavet sisaldavad nõuded tehakse lepingulistele arendajatele kättesaadavaks eraldi.

Keskkonnanõuded (op-süsteem, süsteemitarkvara) antakse RIA IT profiilis.

Nõuded

kategooria nr nõude sõnastus nõude selgitus
meta 1.1

Nõuete rakendamisel arvestada konkreetse tarkvara eripära.

Rakenduvad ainult need nõuded, mida konkreetse tarkvara iseloomu, ülesehituse ja kasutatavate komponentide kontekstis on mõistlik rakendada.

meta 1.2

Nõudeid rakendada hierarhia põhimõttel.

RIA MFN-i nõudeid tuleb rakendada kõigis RIA infosüsteemides. Valdkonna MFN määratleb valdkonna tarkvara spetsiifilised nõuded. Hanke MFN-i nõuded täpsustavad ja täiendavad asutuse või valdkonna nõudeid. X-tee tuumtarkvara arendatakse ühiselt Soome riigiga. Vastavalt on ka MFN inglise keeles ja avaldatud Soome partnerasutuse GitHub-repos: X-Road Non-Functional Requirements. RIHA nõuded asuvad arhitektuuriteatmikus.

vorming 2.1

Andmebaasides ja rakendustes kasutada UTF-8 kodeeringut.

vorming 2.2

Ühe faili piires kasutada alati sama reavahetuse kodeeringut - kas Windowsi (CR+LF; 0x0D0A; U+000D U+000A) või Linux/Unix standardile vastavat (LF; 0x0A; U+000A).

vorming 2.3

Aja esitamisel andmevahetusprotokollides kasutada Internet Date/Time vorminguid (RFC 3339 Date and Time on the Internet: Timestamps). Aja esitamisel inimkasutajale lähtuda vastava keele reeglitest (eesti keele puhul Eesti õigekeelsuskäsiraamat 2019, ptk “Arvukirjutus”).

Nt: “1961-07-12T10:05:00Z”, “2020-02-18T09:31:20.463+02:00”. Märkus. Mõned standardid nõuavad aja esitamist Unix epoch vormingus, nt: 1) nt OpenID Connect ja 2) W3C veebiliidesed.

litsents 3.1

Tarkvara markeerida litsentsiga.

Teose autoriõigused tuleb selgelt välja tuua. Standardseks vahendiks selleks on litsents. Litsents esitatakse ühel või mõlemal alljärgnevatest viisidest: 1) LICENCE-fail repos; 2) litsentsi tekst iga faili päises. RIA põhimõte on arendada tarkvara avatult ja avaldada tarkvara vaba litsentsiga. Erandid turva- jm õigusega pandud piirangute korral. Soovitatav on kasutada MIT litsentsi - nii tagatakse paremini tarkvarade litsentsiline ühtesobivus. Alternatiiv on EUPL.

litsents 3.2

Tarkvara arendamisel lähtutakse avatuse ja vaba lähtekoodi põhimõttest.

Välja arvatud õigusest tulenevad piirangud (turvameetmed, andmekaitse, ärisaladuses).

moodulstruktuur 4.1

Rakenduse välissõltuvused peavad olema ilmutatult, selgelt välja toodud.

moodulstruktuur 4.2

Rakendus peab olema väliste süsteemide tõrgete suhtes vastupanuvõimeline (resilient).

Välise süsteemi tõrge tohib mõjutada ainult sellest otseselt sõltuvate kasutuslugude toimimist.

moodulstruktuur 4.3

Rakendus peab olema tehniliselt tükeldatud vastavalt loogilisele jaotusele. Saadud osised peavad olema eraldi versioneeritavad ja paigaldatavad. Muuhulgas peab andmebaas olema rakendusest eraldi paigaldatav.

Näiteks, kui rakendusel on eraldi turvakontekstidega liidesed ametnikule ja kodanikule, peab rakendus olema jaotatud kaheks eraldi liidesekomponendiks ning nende mõlema poolt kasutatavaks andmebaasiks.

moodulstruktuur 4.4

Rakenduse funktsionaalsuses tuleb selgelt eraldada avaliku teenuse liides muudest mitteavalikest, sisemistest, konfigureerimis jms. liidestest.

moodulstruktuur 4.5

Kõik liidesed rakenduse eri osade vahel peavad olema vajadusel kaitstavad kahepoolset tuvastamist ja krüpteerimist võimaldava protokolliga.

moodulstruktuur 4.6

Rakenduse pakutav(ad) HTTP REST masinliidesed (API-d) kirjeldatakse masinloetavas OpenAPI vormingus.

Masinloetav kirjeldus ei välista täiendavat, paremini inimloetavat vabavormilist kirjeldust.

keel 5.1

Lähtekoodi dokumentatsioon, lähtekood ise ning logiteated peavad olema inglisekeelsed.

keel 5.2

Rakendustes kasutatud eestikeelsetele tekstidele kehtivad infotehnoloogia reeglid Eesti keele ja kultuuri keskkonnas EVS 8:2008.

testimine 6.1

Lähtekood peab olema varustatud ühiktestidega.

testimine 6.2

Tarkvara peab olema enne toodangusse paigaldamist läbinud turvatestimise.

testimine 6.3

Alates integratsioonitasemest peavad automaattestid olema parameteriseeritud.

Millist probleemi see lahendab? Testides on vahel koodikordusi; samuti testandmed ja testiloogika on läbisegi
testimine 6.4

Automaattestid peavad raporteerima tulemusi inim- ja masinloetaval kujul (näiteks JUnit XML ja HTML).

testimine 6.5

Automaatteste käivitatakse RIA CI vahendi Jenkins vahendusel.

koodi kvaliteet 7.1

Lõplik kood peab olema läbinud staatilise koodianalüüsi.

Kasutada otstarbekat tööriista: Java puhul Checkstyle, PMD, SonarQube vms; Javascripti puhul ESLint. Samuti kasutada arendusredaktoritesse sisseehitatud kontrollijaid.

frontend 8.1

Stiiliteave asetada CSS-failidesse.

Stiile ei tohiks sisse kirjutada HTML-teksti, ei style-taagide vahelise tekstina ega style-atribuutidena.

frontend 8.2

Mahukate laadilehtede puhul kaaluda Sass-i kasutamist.

Sass võib suurendada laadilehtede loetavust ja hallatavust.

frontend 8.3

Järgida ajakohaseid veebistandardeid.

HTML5, CSS3 jms.

frontend 8.4

Rakendus peab töötama veebisirvijates, mis toetavad eID baastarkvara kaht viimast versiooni.

Vt sirvikute loetelu ID-tarkvara abikeskuse lehel ID-tarkvara paigaldamine.

frontend 8.5

Veebisirvija toe puudumisel andku rakendus veateate.

Kui kasutajaliides, mille poole kasutaja pöördub, ei ole ühilduv kasutatava veebisirvijaga, peab rakendus arusaadaval ja juhendaval viisil sellest kasutajat teavitama.

kasutatavus 9.1

Veebirakenduse kasutajaliides peab olema juurdepääsetav. Tuleb täita WCAG 2.2 taseme AA nõuded.

Vt: Web Content Accessibility Guidelines (WCAG) 2.2. (Eestikeelne tõlge on olemas v2.0 kohta: Veebi sisu juurdepääsetavussuunised (WCAG) 2.0). Vt ka: 1) EL standard EN 301 549 Accessibility requirements for ICT products and services; 2) ettevõtlus- ja infotehnoloogiaministri määrus Veebilehe ja mobiilirakenduse ligipääsetavuse nõuded ning ligipääsetavust kirjeldava teabe avaldamise kord.

URL-id 10.1

Kasutada selge, ühtse mustriga, inimloetavaid veebiaadresse (URL-e).

URL-id 10.2

Igal lehel peab olema unikaalne veebiaadress.

URL-id 10.3

URL ei tohi sisaldada isikuandmeid.

Võimalikud on erandid, kui isikuandmete kaitseks on rakendatud asjakohaseid tehnilisi ja organisatsioonilisi meetmeid. Meetmetega peab tagama kaitse vähemalt järgmiste riskide vastu: isikuandmete lekkimine sirviku ajaloost, HTTP seansi pealtkuulamine, isikuandmete lekkimine vahendusserveri (proxy) logist, isikuandmete lekkimine serveri logist.

URL-id 10.4

URL ei tohi sisaldada sessioonivõtit.

teated 11.1

Vea- jm teated peavad oleva arusaadavad.

Muuhulgas peab rakendus asendama vaikimisi veateate (404 vms) lehekülje, kuid säilitama algse HTTP vastuskoodi.

teated 11.2

Veasituatsioonid tuleb varustada veakoodidega. Kasutajale tuleb esitada koos veateatega ka veakood.

teated 11.3

Veateated tuleb logida.

koodisüsteemid 12.1

Objektid identifitseerida registrikoodide abil.

Riiklikesse registritesse kantavad objektid (isikud, katastriüksused jne) kantakse andmebaasi nende registrikoodiga, mida täiendab riigiprefiks vastavalt ISO3166-1 Alpha 2 standardile. Näiteks isikute sidumiseks süsteemi kasutajakontoga peab kasutama isikukoodi rahvastikuregistrist.
Eesti Vabariigi kodanik identifitseeritakse Eesti Vabariigi poolt väljastatud eIDga. Igasuguse muu identifitseerimisevahendi kasutamine peab olema selgelt põhjendatud.
Mittekodanike isikuidentifikaator saadakse järgmisel viisil: riigikood + sookood + sünniaeg + [ dok_nr | id_riigis ], kus
riigikood - kolmekohaline ISO 3166-1 Alpha-3 standardile vastav riigi kood
sookood - soo identifikaator nii nagu Eesti Vabariigi isikukoodis
sünniaeg - sünniaeg formaadis YYYYMMDD
id_riigis - kui see on olemas, tuleb kasutada isiku koduriigi isikuidentifikaatorit. 16 kohta, 0-polsterdatud vasakult
dok_nr - kui isiku koduriigis isikuidentifikaatorit ei ole, siis kasutatakse isiku dokumendi numbrit. Dokumendi number, 16 kohta, 0-polsterdatud vasakult.

koodisüsteemid 12.2

Rakendus ei tohi luua uut identiteedisüsteemi. Tuleb tugineda olemasolevatele riiklikele (ID-kaart) või põhiliste op-süsteemide süsteemidele (Kerberos jms).

koodisüsteemid 12.3

Rakendada aadressiandmete süsteemi nõudeid.

Eesti aadressiandmete sisestamisel, kuvamisel ja hoidmisel lähtuda Vabariigi Valitsuse 8. oktoobri 2015. a määrusest nr 103 „Aadressiandmete süsteem“.

koodisüsteemid 12.4

Rakendada klassifikaatorite süsteemi nõudeid.

Eesti tegevusalade andmete sisestamisel, kuvamisel ja hoidmisel lähtuda Vabariigi Valitsuse 10. jaanuari 2008. a määrusest nr 11 „Klassifikaatorite süsteem“ ja kasutada EMTAK infosüsteemis kehtivat klassifikaatorit.

koodisüsteemid 12.5

Telefoninumbrite käsitlemisel taodelda koosvõimelisust.

Kui telefoninumbrite kasutamise ja talletamise meetodid ei ole infosüsteemides standardiseeritud, siis see võib põhjustada probleeme süsteemide koostalitluses ja ka telefoninumbrite kasutamises kasutajaliidestes. Edaspidistes arendustes lähtuda infosüsteemides telefoninumbrite esitlusse, salvestusse ja API kaudu pakkumisse ühetaoliselt: 1) API otspunktist peab telefoninumber olema tarbitav nii, et rahvusvaheline suunakood (ilma plussita) ja number ise on eri väljadel; 2) kasutajaliideses on suunakood dropdown valikuga; telefoninumber on eraldi väljal; 3) andmebaasis hoitakse suunakoodi ja telefoninumbrit eraldi väljadel, numbriliste väärtustena.

autentimine 13.1

Väliste kasutajate, so. Eesti Vabariigi residentide ja EL teiste liikmesriikide residentide autentimislahenduse loomisel lähtuda dokumendist Autentimislahendustele kehtivad nõuded.

autentimine 13.2

ID-kaardiga autentimisel ei kasutata serdi edastamise päises side- (-) ega alakriipse (_).

Millist probleemi see lahendab? Erinevad rakendusserverid võivad tõlgendada neid sümboleid erinevalt.
rollihaldus 14.1

Rakenduse mitteavalike osade kasutajate rollid asuvad rakendusevälises LDAP serveris või muus autentimislahenduses. Süsteem ei tohi realiseerida omaenda rollide haldamist.

väljumine 15.1

Süsteemist väljumine peab toimuma sõnaselgelt, kasutajale arusaadaval ja turvalisel viisil.

Kasutaja saab süsteemist väljuda kahel viisil: tema sessioon on pikem, kui sessiooni pikkuse seadistatav piirväärtus (eraldi määratletavad piirangud kogu sessioonile ning tegevuseta perioodile sessioonis) või kasutaja lõpetab sessiooni enda algatusel.

väljumine 15.2

Juhul kui rakenduse turvanõuded näevad seda ette, peab olema võimalus koheselt lõpetada kasutaja sessiooni nii, et kasutaja saaks arusaadava ja põhjendatud teate sessiooni lõpetamise kohta.

andmebaas 16.1

Andmebaasi kasutaval rakendusel on vähemalt kaks andmebaasikasutajat:
<rakendus> nimeline andmebaasi skeem kuulub andmebaasi kasutajale <rakendus> (roll db owner, skeemid ja seal paiknevad objektid kuuluvad sellele kasutajale).
<rakendus> nimelises andmebaasi skeemis on defineeritud <rakendus>_app nimeline kasutaja, kes omab ligipääsu (SELECT, INSERT, UPDATE, DELETE) ainult rakenduse käitamiseks vajalikele tabelitele, protseduuridele või funktsioonidele.

Nõue tuleneb eelkõige sellest, et vahel kasutame andmebaaside ““koosmajutamist” s.t erinevate süsteemide või ka ühe süsteemi erinevate komponentide (mikroteenuste) andmebaase hoiame ühes PostgreSQL instantsis. Sellisel juhul on vaja tagada eristatus: iga andmebaas peab olema eraldi skeemis; rakendus ei tohi teise rakenduse skeemile ligi pääseda (suheldakse API-de kaudu); rakendus ei tohi ise skeeme moodustada s.t skeemi tohib moodustada ainult paigaldusprotsess. Ka siis, kui koosmajutust hetkel ei kasutata, on eristamine hea praktika.

andmebaas 16.2

Ühest andmetabelist teise viitamisel tuleb kasutada välisvõtmeid (foreign key). Kõik välisvõtmed peavad olema indekseeritud mitteunikaalse indeksiga ja välisvõtmetena kirjeldatud.

andmebaas 16.3

Kõigis andmebaasi tabelites peab olema defineeritud integer-tüüpi või UUID-tüüpi primaarvõti, mis on surrogaatvõti. Primaarvõtmena ei tohi kasutada reaalse eluga seotud andmevälju.

andmebaas 16.4

Kõik primaarvõtmed (primary key) peavad olema indekseeritud unikaalse indeksiga.

andmebaas 16.5

Kui andmebaasis olevate andmete ISKE tervikluse klass on 2 (E-ITS rakendamisel IS) või kõrgem, siis tuleb kõik klass 2 infot sisaldavad andmebaasi kirjed versioneerida.

andmebaas 16.6

Andmebaasi väljade pikkused tuleb andmekirjelduskeeles (DDL-is) kirjeldada sümbolites, mitte baitides.

andmebaas 16.7

Päringulaused ei tohi sisaldada konstantidena sisse kirjutatud päringutingimuse võrdlusväärtusi.

Kasutada päringumuutujaid (variable binding).

andmebaas 16.8

Andmebaasi objektide nimetused peavad olema inglisekeelsed. Nimetused tohivad sisaldada ainult Latin1 (ISO8859-1) kodeeringu tähti a-z; A-Z, numbreid 0-9, ning alakriipsu _. Objektide nimetused ei tohi alata numbritega. Andmebaasiobjektide nimed peavad olema semantilised st. objekti tähendust avavad.

andmebaas 16.9

Rakendus peab olema tabelite partitsioneerimise suhtes agnostiline st. tabelite partitsioneerimisstruktuuride muutmine ei tohi mõjutada rakenduse tööd.

andmebaas 16.10

Rakendusserveri, nt Tomcat kasutamisel, tuleks võimalusel kasutada rakendusserverit ka andmebaasiühenduste (JDBC) halduseks.

Rakendus ei puuli ise, vaid küsib JNDI abil rakendusserveri puuli aadressi. Nõude eesmärk on jõudluse parem hallatavus.

logimine 17.1

Rakenduse logimine peab olema organiseeritud kasutades selleks ettenähtud standardseid vahendeid viisil, mis võimaldab rakenduse administraatoril määratleda ja muuta logide väljundit (vähemalt fail, andmebaas, syslogd), logimise taset ja logimise formaati.

logimine 17.2

Java rakenduste korral logitakse SLF4J raamistiku abil.

Ühtlustatud selleks, et rakendusi saaks seadistada ühtemoodi.

logimine 17.3

Logid kirjutatakse inglise keeles (välja arvatud kasutajale näidatud teated).

logimine 17.4

Turvalisuse seisukohalt kriitilised sündmused (sisenemine, väljumine, rolli muut(u)mine) ning tegevused, mis toovad kaasa rahalisi või juriidilisi tagajärgi, logitakse eraldi konfigureeritavasse turvalogisse.

logimine 17.5

Telemeetria.

Infosüsteemi arendustes tuleb juhul, kui otsustatakse rakendada kasutaja teekonna (ja muu telemeetria) kogumist, juhinduda CNCF OpenTelemetry spetsifikatsioonidest. Vt: https://opentelemetry.io ja https://github.com/open-telemetry/opentelemetry-specification.

ehitamine 18.1

Rakenduse (RIA poolt hallatavasse serverisse) pakendamine, paigaldamine, uuendamine, muudatuse taastamine ja testide käivitamine peavad olema automatiseeritud standardse üldkasutatava vahendi abil.

Kasutusel on Maven ja Jenkins.

ehitamine 18.2

Ehitatud paki nimi peab sisaldama projekti nime ja paki versiooni ning tohib sisaldada ainult tähemärke [a-z;0-9] ja - (miinus) ja _ (alakriips) (nt projektinimi-1_0_23).

Pakk peab olema keskkonnaagnostiline s.t arendus-, toodangu- jm keskkondade jaoks normaalselt ei tehta eraldi pakke. Tarkvara muutub konkreetse keskkonna osaks pärast keskkonda paigaldamist ja keskkonnas seadistamist.

ehitamine 18.3

Rakendused ehitatakse ja paigaldatakse ainult lähtekoodihoidlast, selle üheselt viidatud harust.

ehitamine 18.4

Kood tarnitakse RIA taristus olevasse reposse. Koodi võib tarnida GitHubi, juhul kui on seadistatud GitHubi repo peegeldamine RIA sisereposse. Kumba meetodit kasutatakse, määrab RIA.

ehitamine 18.5

Lähtekoodi kompileerimine peab olema teostatav ka välisvõrguühenduse puudumise korral. Selle nõude täitmise võimaldamiseks on RIAs kasutusel sisemised tarkvarakomponentide repod.

Vt täpsemalt sisenõuete dokumendist.

ehitamine 18.6

(kehtetu)

ehitamine 18.7

Java rakenduse tööks vajalikud teegid peavad olema rakenduse osa. Kui Java rakenduse käitamiseks on kasutatud mõnd rakendusserverit (näiteks Tomcat), siis võivad selle tööks vajalikud üldteegid olla rakendusserveri lib kaustas.

Näide: JNDI konfiguratsioon eeldab, et andmebaasiohjur oleks rakendusserveri sees (nt. Tomcat), mitte rakenduse WAR failis. Juhul kui andmebaasiohjur on osa WAR failist, võib andmebaasiühenduste probleemide tekkimisel kohe tekkida ka probleem rakendusserveri (taas)käivitamisega.

ehitamine 18.8

Fondid, laadilehed ja Javascripti failid serveerida rakendusest endast.

ehitamine 18.9

Pakendatavas tarkvaras peavad sõltuvuste versioonid olema fikseeritud

Nõude eesmärgiks on tagada tarkvara ehitamise korratavus (ingl repeatable build) ja tagada võimalikult hea ülevaade kasutatavatest tarkvarakomponentidest (tarkvara koostenimekiri, ingl software bill of materials, SBOM). Nõue on täidetud, kui on tagatud võimekus korrata tarkvara ehitusprotsessi lähtekoodist, saavutades igakordselt sama lõpptulemuse.

paigaldamine 19.1

Rakendus saadab e-kirju RIA SMTP edastusteenuse kaudu.

Täpsemad nõuded vt SMTP edastusteenuse kirjeldusest.

paigaldamine 19.2

Rakendus peab olema loodud sõltumatuna rakendusserveri tarkvarast.

Rakendust peab olema võimalik konfiguratsioonimuudatuste abil paigaldada teisele samatüübilisele rakendusserverile. Kui see ei ole võimalik tuleb rakendusele luua sobituspaketid põhiliselt kasutatavate rakendusserverite jaoks.

paigaldamine 19.3

Kõik rakenduse versiooniuuendused (sealhulgas muudatused andmebaasi struktuuris ja koodis) peavad kuni järgmise versiooniuuenduseni olema täielikult tagasi pööratavad st. koos versiooni uuendusega peavad olema loodud vahendid ja kirjeldatud protseduurid versiooniuuenduse tagasi võtmiseks.

paigaldamine 19.4

Rakendus ei tohi eeldada paigalduskeskkonna turvalisust.

paigaldamine 19.5

Rakendusservereid peab olema võimalik lisada teenust pakkuvasse klastrisse ja sealt eemaldada vastavalt vajadusele.

paigaldamine 19.6

Rakendus ei tohi kasutada konfigureerimata viiteid failidele või välistele süsteemidele st. kõik viited peavad olema programmikoodi välised.

paigaldamine 19.7

Kõik andmebaasiühendused tuleb kirjeldada täispika URI abil. Java rakendustes kasutatakse JNDI ühendusi.

paigaldamine 19.8

Andmebaasi JNDI objekti Datasource-i nimetamisel tuleb kasutada prefiksit jdbc ning ühesõnaliste lühendite korral väiketähti. Nt: jdbc/system1, jdbc/system2 jne.

paigaldamine 19.9

Rakenduse andmebaasi või andmeskeemi paigaldamine ei tohi nõuda punktis erilisi kasutajaõigusi.

infoturve 20.1

Kui ei ole määratud teisiti, peab rakendus olema kasutatav ISKE klassile K2T2S2 (E-ITS rakendamisel - samaväärsele turbetasemele) vastavate süsteemide loomisel.

Turvameetmetega tutvu ISKE portaalis, E-ITS rakendamisel - E-ITS portaalis.

infoturve 20.2

Süsteem ei tohi võimaldada kasutajale ligipääsu süsteemi toimimise informatsioonile, nagu failide täisnimed, kutsepinud (stack trace) jms.

infoturve 20.3

Kaitsmata avalik võrguliiklus ei ole lubatud. Igasugune avalik võrguliiklus on krüpteeritud. TLS keskkonna parameetrid on administraatori, mitte arendaja kontrolli all. Erandjuhul, kui edastatav informatsioon ei sisalda konfidentsiaalseid andmeid ega isikuandmeid, on lubatud andmete edastamine krüpteerimata kujul, kuid viisil, mis võimaldab andmete vastu võtjal veenduda saadetise tervikluses st. allkirjastatult või ajatembeldatult (X-tee turvaserveri seadistuse edastamise näide).

infoturve 20.4

Vastavalt rakenduse olemusele ja riskianalüüsile rakendada meetmed OWASP ohuedetabelites (Top 10) jm tekstides antud soovituste järgimiseks.

vt OWASP ja OWASP Application Security Verification Standard (ASVS).

infoturve 20.5

Kaitsta seansiküpsiseid (secure ja http only parameetrid).

infoturve 20.6

Rakendada päringuvõltsimise (CSRF) vastast kaitset.

infoturve 20.7

Sisendite kontroll nii front- kui ka backend-is.

Olulised sisendid tuleb kontrollida (puhastada) (ka) serveri poolel.

infoturve 20.8

Veebirakendustes määratleda ja rakendada sisuturbepoliitika.

Vt Content Security Policy (CSP).

infoturve 20.9

Eraldipaigaldatavate komponentide vahelistel liidestel peab olema TLS võimekus (vastastikune autentimine sertide abil). Vastavad konfigureerimisjuhised peavad sisalduma rakenduse paigaldusjuhendis.

infoturve 20.10

Minimaalne võrgupääs.

Infosüsteemi komponentide pääs avalikku võrku peab olema reguleeritud vähima juurdepääsu printsiibil - infosüsteem tohib pääseda ainult sinna, kuhu pääs on teenuse toimimiseks hädavajalik. Pääsukontroll peaks eelistatult toimima dünaamiliselt ning toetama automatiseerimisvahendeid. Standardlahendusena tuleb eelistada pääsukontrolli välisvõrku rakendusest sõltumatult toimiva lüüsi abil.

krüpto 21.1

Krüptograafiliste algoritmide ja meetodite valimisel lähtuda kehtivast RIA tellitud krüptograafiliste algoritmide elutsükli uuringust.

krüpto 21.2

Krüptoalgoritme peab olema võimalik väikeste muudatustega vahetada

krüpto 21.3

Võtmete kaitsele tähelepanu!

Juhtida tähelepanu ja rakendada meetmeid vältimaks võtmete lubamatut avalikukstulekut. Näiteid ohupraktikatest (mitteammendav loetelu): 1) võtme hoidmine versioonihalduse (git) all olevas koodirepos -> oht: push-takse avalikusse reposse -> kaitsemeede: .gitignore või võtmete hoidmine üldse eraldi; 2) võtmete seisundi ja omaduste ebaselgus -> võtmete segiminek, sellest tulenev kompromiteerumine või kaitse langus -> kaitsemeede: läbimõeldud võtmehalduse protseduur; 3) näite-seadistusfailides ei markeerita näitevõtmeid -> oht: näitevõtmed jõuavad toodangusse. Võtmeid tuleb reeglina kaitsta juba test- ja arenduskeskkondades. Ligipääs võtmetele korraldada teadmisvajaduse (need to know) põhimõttel. Võtmed, mida enam ei vajata, koheselt hävitada. Kirjandus: NIST SP-800-57 Key Management Guidelines; European Payments Council (2017) Guidelines on cryptographic algorithms usage and key management.

andmekaitse 22.1

Rakendustes tuleb tagada isikuandmete kaitse nõuded.

Eriti isiku õigus olla unustatud ja meie kohustus seejärel kustutada kõik isikuandmed, mida me ei vaja tööks või mida me ei pea seaduse alusel töötlema. Vt isikuandmete kaitse üldmäärus. Samuti peame alati olema valmis vastama isiku nõudmisele välja anda IKS § 24 sätestatud teave.

andmekaitse 22.2

Rakendus ei tohi kasutada RIA taristu väliseid kasutaja tegevust analüüsivaid teenuseid (nt Google Analytics).

Andmekaitse ja turvalisuse kaalutlustel.

käideldavus 23.1

Rakendus peab sirvikusse laaduma kiiresti.

Sirvikuühendusi tuleb efektiivselt kasutada. Vajadusel kasutada laadimisaja optimeerimistehnikaid (pakkimine, minimeerimine, profileerimine jm).

Millist probleemi see lahendab? Rakenduse laadimine sirvikusse võib olla liiga aeglane
käideldavus 23.2

Kõrgkäideldavuse võimekus. Kui ei lepita kokku eraldi, peab iga eraldipaigaldatav tarkvarakomponent olema paigaldatav mitmes eksemplaris.

käideldavus 23.3

Kõrgkäideldavate rakenduste puhul tuleb seansihalduse lahendus kokku leppida kohe arendusprojekti algul. Seansi hoidmine jagatud failisüsteemis (nt. NFS) ei ole lubatud.

monitooring 24.1

Süsteemi iga eraldi paigaldatav osa peab väljastama RIA monitooringusüsteemile (näiteks aadressilt heartbeat.json) masinloetaval kujul oma nime ja versiooninumbri, oluliste väliste süsteemide oleku, viimase käivitamise aja, pakendamise aja ning serveriaja.

96 nõuet.

https://github.com/e-gov/MFN