Programavimas

„Java“ saugumo architektūra

Šio mėnesio skiltis „Po gaubtu“ yra pirmoji iš keturių dalių serijos apie „Java“ saugos modelį. Keturiuose straipsniuose daugiausia dėmesio bus skiriama „Java“ virtualioje mašinoje (JVM) įmontuotai saugos infrastruktūrai ir „java.lang“ bibliotekai. Šiame pirmajame straipsnyje apžvelgiamas saugos modelis ir aprašomos JVM saugos funkcijos.

Kodėl saugumas?

„Java“ saugos modelis yra viena iš pagrindinių kalbos architektūros savybių, dėl kurios ji yra tinkama technologija tinklinėms aplinkoms. Saugumas yra svarbus, nes tinklai suteikia galimybę atakuoti bet kurį prie jų prijungtą kompiuterį. Šis susirūpinimas tampa ypač stiprus aplinkoje, kurioje programinė įranga yra atsisiųsta visame tinkle ir vykdoma vietoje, kaip tai daroma, pavyzdžiui, naudojant „Java“ programėles. Kadangi programėlės klasės failai automatiškai atsisiunčiami, kai vartotojas naršyklėje eina į turinį tinklalapį, tikėtina, kad vartotojas susidurs su nepatikimų šaltinių programėlėmis. Be jokio saugumo tai būtų patogus būdas platinti virusus. Taigi „Java“ saugumo mechanizmai padeda „Java“ tinklams pritaikyti, nes jie sukuria reikiamą pasitikėjimą tinklo-mobiliojo kodo saugumu.

„Java“ saugos modelis yra orientuotas į vartotojų apsaugą nuo priešiškų programų, atsisiunčiamų iš nepatikimų šaltinių visame tinkle. Šiam tikslui pasiekti „Java“ pateikia pritaikomą „smėlio dėžę“, kurioje veikia „Java“ programos. „Java“ programa turi būti leidžiama tik jos smėlio dėžėje. Savo smėlio dėžės ribose jis gali padaryti bet ką, tačiau už šių ribų negali imtis jokių veiksmų. Pavyzdžiui, nepatikimų „Java“ programėlių smėlio dėžė draudžia daugybę veiklų, įskaitant:

  • Skaitymas ar rašymas į vietinį diską
  • Užmegzti tinklo ryšį su bet kuriuo kompiuteriu, išskyrus pagrindinį kompiuterį, iš kurio atsirado programėlė
  • Naujo proceso kūrimas
  • Įkeliama nauja dinaminė biblioteka ir tiesiogiai iškviečiamas savasis metodas

Padarydamas neįmanoma, kad atsisiųstas kodas galėtų atlikti tam tikrus veiksmus, „Java“ saugos modelis apsaugo vartotoją nuo priešiško kodo grėsmės.

Apibrėžta smėlio dėžė

Tradiciškai prieš paleidžiant turėjote pasitikėti programine įranga. Saugumą pasiekėte atsargiai naudodami tik patikimų šaltinių programinę įrangą ir reguliariai tikrindami virusus, kad įsitikintumėte, jog viskas yra saugu. Kai tik programinė įranga gavo prieigą prie jūsų sistemos, ji turėjo visas galimybes. Jei tai buvo kenkėjiška, tai gali padaryti daug žalos jūsų sistemai, nes jūsų programinės įrangos aplinka neapribojo programinės įrangos. Taigi, naudodamiesi tradicine saugumo schema, jūs bandėte užkirsti kelią kenksmingam kodui niekada nepasiekti prieigos prie jūsų kompiuterio.

„Sandbox“ saugos modelis palengvina darbą su programine įranga, gaunama iš šaltinių, kuriais visiškai nepasitikite. Užuot užtikrinęs saugumą reikalaudamas, kad bet koks nepatikimas kodas niekada nepatektų į jūsų kompiuterį, smėlio dėžės modelis leidžia pasveikinti kodą iš bet kurio šaltinio. Tačiau veikiant smėlio dėžė neleidžia nepatikimų šaltinių kodui atlikti jokių veiksmų, kurie galėtų pakenkti jūsų sistemai. Privalumas yra tas, kad nereikia išsiaiškinti, kokiu kodu galite pasitikėti ir kokiu, o jums nereikia ieškoti virusų. Pati „smėlio dėžė“ apsaugo nuo bet kokių virusų ar kitų kenksmingų kodų, kuriuos galite pakviesti į savo kompiuterį, žalos padaryti.

Smėlio dėžė yra persmelkta

Jei turite pakankamai skeptišką protą, turėsite įsitikinti, kad smėlio dėžėje nėra nuotėkio, prieš patikėdami, kad ji jus apsaugos. Norėdami įsitikinti, kad smėlio dėžėje nėra nuotėkių, „Java“ saugos modelis apima visus jos architektūros aspektus. Jei „Java“ architektūroje buvo sričių, kuriose saugumas buvo silpnas, kenkėjiškas programuotojas („krekeris“) potencialiai galėtų panaudoti tas sritis „apeinant“ smėlio dėžę. Todėl, norėdami suprasti smėlio dėžę, turite pažvelgti į keletą skirtingų „Java“ architektūros dalių ir suprasti, kaip jos veikia kartu.

Pagrindiniai komponentai, atsakingi už „Java“ smėlio dėžę, yra šie:

  • „Java“ virtualioje mašinoje (ir kalboje) įdiegtos saugos funkcijos
  • Klasės krautuvo architektūra
  • Klasės failų tikrintuvas
  • Saugos vadybininkas ir „Java“ API
$config[zx-auto] not found$config[zx-overlay] not found