1c vgrajeno prelivanje sklada jezikov. Preobremenitev

  • 10.01.2022

14.04.2016 Verzija 3.22 Spremenjen je vmesnik, odpravljene napake pri prenosu registrov, spremenjen postopek prenosa organizacije in računovodske usmeritve. Platforma 8.3.7.2027 BP 3.0.43.174
17.03.2016 Različica 3.24 Opažene napake so bile popravljene. Platforma 8.3.8.1747 BP 3.0.43.241
16.06.2016 Različica 3.26 Opažene napake so popravljene. Platforma 8.3.8.2088 BP 3.0.44.123
16.10.2016 Verzija 4.0.1.2 Popravljen prenos hrambe vrednosti, spremenjen prenos računovodske usmeritve za izdaje 3.44.*. Platforma 8.3.9.1818 BP 3.0.44.164.
19.04.2017 Verzija 4.0.2.7 Spremenjen algoritem prenosa registrov povezanih z imeniki, popravljene opažene napake, popravljen prenos s prepisovanjem povezav.
29.05.2017 Verzija 4.0.4.5 Spremenjen prenos gibanj, dodan pregled gibanja prenesenih dokumentov, še nekaj...
30. 05. 2017 Različica 4.0.4.6 Odpravljena napaka pri izpolnjevanju seznama obstoječih imenikov v viru (hvala sramežljivo)
17.06.2017 Različica 4.0.5.1 Spremenjen algoritem za prenos gibov.
19.07.2017 Različica 4.0.5.4 Prenos CI iz BP 2.0 je bil spremenjen. Nepričakovano je prenos iz UT 10.3 izvedel Smilegm, v tej različici je bil prenos nekoliko popravljen za to situacijo)))
10.08.2017 Različica 4.0.5.5 Odpravljene napake pri prenosu iz BP 2.0
19.09.2017 Različica 4.4.5.7 Popravljeno preverjanje povezave za 3.0.52.*
28. 11. 2017 Različica 4.4.5.9 Popravljene prijavljene napake
12/06/2017 Različica 5.2.0.4 Algoritem za iskanje povezav je bil preoblikovan. Dodani so bili postopki prenosa iz BP 1.6; ni več stroge povezave z BP - preprosto ga lahko uporabite za prenos podatkov "skoraj" enakih konfiguracij. Poskušal bom takoj popraviti vse komentarje.
12/08/2017 Različica 5.2.1.3 Dodan algoritem za prenos izpisov plač iz BP.2.0 v BP 3.0. Vključene spremembe za skupno rabo med enakimi konfiguracijami.
19.12.2017 Verzija 5.2.2.2 Prilagojen je prenos samostojnih informacijskih registrov za imenike, ki so v dimenzijah teh registrov.

12/06/2017 Nova različica obdelave 5.2.0.4. Med pomembnimi spremembami je možnost prehoda z BP 1.6 na BP 3.0. Glavna sprememba je upravljanje iskanja povezav imenika - v prejšnjih različicah je bilo iskanje po GUID, v tej različici pa lahko omogočite iskanje "Po podrobnostih":

17.01.2018 Verzija 5.2.2.3 Odpravljene - opažene napake v podrejenih imenikih in registrih periodičnih informacij.

19.07.2018 Različica 5.2.2.8 Opažene napake so popravljene.

v katerem lahko nastavite podrobnosti iskanja za kateri koli imenik. Ta način je sam »nastal« na številne zahteve delavcev, za primere, ko je potrebna izmenjava v že obstoječo bazo podatkov, ki že vsebuje podatke (npr. za združitev računovodskih evidenc za dve organizaciji v eno bazo).

21.12.2015 Izdana je bila platforma 8.3.7.1805 oziroma BP 3.0.43.29 nova različica obdelava 3.1:-) (opis spodaj). Nova funkcionalnost - možnost primerjave stanj in prometa med dvema bazama BP (za vse konte, če se kontni načrti ujemajo, ali za posamezne ujemajoče se računovodske konte, z ali brez analitike).
03.01.2016 Verzija 3.5 - mehanizem povezovanja z izvorno bazo je spremenjen - usklajen z BSP 2.3.2.43. Odpravljene manjše napake. Platforma 8.3.7.1845, BP 3.0.43.50
16. 2. 2016 Različica 3.6 – Dodana je zastavica »Nastavi ročni popravek« za dokumente, prenesene s premiki. Fiksni prenos gibanj - dokumenti z datumom, krajšim od začetka obdobja, se prenašajo brez gibanj. Platforma 8.3.7.1917, BP 3.0.43.116
22.03.2016 Različica 3.10 - Dodana je zastavica "Vedno prepiši reference" za obvezno ponovno pisanje referenciranih objektov (hitrost prenosa je znatno zmanjšana, včasih pa je potrebna). Dodan je zavihek "Priprava", kjer lahko konfigurirate ujemanje izvornega in ciljnega kontnega načrta (na isti ravni kot kontne šifre) ter prenos konstant. Platforma 8.3.7.1970, BP 3.0.43.148

03.04.2016 Verzija 3.11 Spremenjeno je izpolnjevanje seznama dokumentov, ki obstajajo v viru: polnilo se je po gibanjih po kontnem načrtu, izvajalo se je preprosto po povezavah za obdobje, tako kot v // mesto/javno/509628/

Obdelava je namenjena prenosu podatkov za poljubno obdobje na enak način kot “Nalaganje MXL” z ITS, le brez uporabe XML, JSON in drugih vmesnih datotek - izmenjava iz baze v bazo preko COM. V različicah, starejših od 3.10, se povezava uporablja z algoritmom iz BSP, ki predvideva registracijo comcntr.dll (če OS to »dopušča«) ter različna sporočila, ko povezave ni mogoče vzpostaviti, npr. primer - "Informacijska baza je v procesu posodabljanja" itd. Dodano preverjanje izbire sprejemnika kot IS vira - izda se opozorilo.

Lahko se uporablja za:

1. Prenos regulativnih referenčnih informacij (RNI) od vira IS do cilja IS (prenos vseh referenčnih informacij se izvede na zahtevo uporabnika, potrebne referenčne knjige itd. Prenesejo se prek povezav med morebitnimi prenosi).

2. Prenos dokumentov za poljubno izbrano obdobje.

3. Prenos vseh informacij iz "pokvarjenega" informacijsko-varnostnega sistema, če je zagnan v načinu 1C:Enterprise in je nalaganje podatkov ali zagon konfiguratorja nemogoče.

Značilnost obdelave - informacijska varnost prejemnika in vira je lahko drugačna; prenos iz 2.0 na 3.0 - izdaje so različne, vendar prenos deluje!!! Neujemajoče se podrobnosti se prezrejo ali pa je treba zanje določiti algoritme prenosa.

komentar: Pretvorba podatkov se NE UPORABLJA! In ne sprašuj zakaj!!! Za tiste, ki so še posebej izbirčni - BP 3.0 se spreminja skoraj vsak dan, ni več moči, da bi posodabljali pravila prenosa - tukaj je vse preprostejše :-).

Druga značilnost obdelave je, da se sproži v informacijski varnosti sprejemnika (analogi, ki so najbližji po funkcionalnosti, delujejo obratno - od vira do sprejemnika).

Začetek - določiti morate obdobje obdelave, določiti organizacijo iz vira, prenesena bo na cilj.

Pri prenosu organizacije se prenesejo računovodske usmeritve in »povezani« registri informacij. Torej, ko prvič izberete organizacijo v viru, bo minilo nekaj časa, preden se bo pojavila v sprejemniku.

Kontni načrti izvora in cilja morajo biti enaki, nobeni različni konti v različici 2.* se ne prenašajo na cilj, predvideno je, da bo v prihodnje omogočeno prilagajanje ujemajočih se kontov in analitike. Računi se prenašajo s kodami, ki jih ni v sprejemniku NI MOGOČE USTVARITI!!!

Preostali objekti se prenašajo z notranjimi identifikatorji (GUID), zato bodite pozorni na nekatere ključne imenike, na primer - Valute.

Če nameravate zamenjati s "čisto" bazo podatkov, je bolje, da pred izmenjavo izbrišete imenike, ki ste jih izpolnili ob prvem zagonu. Zakaj obstaja stran v obdelavi, kjer lahko dobite te elemente imenika in jih izbrišete. Odstraniti morate vsaj valuto "rub". - Ker podvajanje je skoraj neizogibno (načeloma se to zlahka popravi po skupni rabi iskanja in zamenjave dvojnikov, vgrajenih v BP 3.0).

Obdelava predvideva klic strani za brisanje imenika, ko je odprt začetni obrazec za izpolnjevanje:

Ko odprete obdelavo, se prikaže stran za brisanje imenikov, ki so bili vneseni med začetnim polnjenjem:

Od različice 3.22 je vmesnik spremenjen, zdaj so vse pripravljalne operacije v zavihkih in vedno na voljo


Pomembno je preveriti ujemanje kontnega načrta vira in prejemnika ter obvezno navesti ujemanje računov.

Vnaprej določenih elementov imenika ni treba brisati – prenesejo se s konfiguracijskimi identifikatorji (ne GUID-ji).

Objekte za prenos lahko izberete z izbirnim obrazcem iz imenikov in dokumentov (informacijski registri, povezani s temi objekti, se bodo samodejno prenesli, zato jih ni treba posebej izbirati).Prenos vpisnikov, redukcija je začasno onemogočena - izdelati morate seznam vpisnikov za prenos - nekaj je treba prenesti, nekaj ne, v tej fazi je dovolj, kar se prenese v imenikih, seznam vpisnikov za prenos bo v predlogi v prihodnjih različicah.

Pri izmenjavi z 2.0 se nekatere podrobnosti (npr. Kontaktni podatki) se prenaša po algoritmu, vgrajenem v obdelavo, ker za 2.0 in 3.0 so shranjeni drugače. Podobno je s številnimi dokumenti (na primer Popravek dolga).

Seznam vrst predmetov lahko v različici 3.22 izpolnite drugače, ta je postavljen v podmeni, spremembe so prikazane na sliki:

Obstaja poenostavitev uporabe obdelave - ne morete izbrati imenikov za izmenjavo, ampak preprosto izpolnite seznam vrst v sprejemniku samo s tistimi vrstami imenikov, ki imajo vsaj en vnos v viru.

Obdelava ima vgrajeno postavitev, ki navaja imenike, ki jih ni treba prenesti iz vira v cilj (postavitev »Izključi iz prenosa«). V to postavitev lahko dodate (odstranite) poljubne imenike. Če vam ni treba prenesti vseh referenčnih podatkov, je dovolj, da prenesete dokumente, katerih seznam lahko dobite tudi brez izbire tipov, preprosto izpolnite vse izvorne dokumente, za katere obstajajo transakcije.

Zagotovljen je prenos dokumentov s premiki, pri izmenjavah 3.0 na 3.0 in korespondenci kontnih načrtov deluje ena proti ena, pri izmenjavi 2.0 na 3.0 so možne napake, zato je priporočljivo prenesti dokumente brez premikov, nato pa preprosto jih prenesite v sprejemnik. Pri prenosu dokumentov s premiki je nastavljena zastavica "Ročna prilagoditev".

Atribut »Postavljeno« je v prejemnih dokumentih nastavljen na enak način kot v izvoru, vendar se bodo premiki (če niso bili preneseni) pojavili šele, ko bodo dokumenti obdelani, na primer z uporabo obdelave, vgrajene v skupinsko knjiženje BP 3.0 dokumentov (priporočena možnost) ali iz te obdelave (tukaj je gumb »Objavi dokumente«).

Če je obdelava načrtovana za trajno izmenjavo, jo lahko registriramo v informacijski varnosti prejemnika (gumb »Registracija«). Za »enkratne« prenose ga lahko preprosto uporabite prek Datoteka - Odpri.

21.12.2015 - Verzija 3.1 platforma 8.3.7.1805 in napajalnik 3.0.43.29 (verzija 2.15 za 3.0.43.* ne deluje - konfiguracija je bila precej spremenjena).

Spremenjeno:

Pogovorno okno za izbiro možnosti povezave, zastavica odjemalec-strežnik je vedno na voljo, odvisno od njene nastavitve, izbira mape podatkovne baze datotek ali polje z imenom baze podatkov na strežniku in ime samega strežnika na voljo (napaka v pogovornem oknu različice 2.15 je bila odpravljena)

- NOVA FUNKCIONALNOST: Mehanizem za usklajevanje stanj in prometa med bazami podatkov izvora in prejemnika z različnimi stopnjami podrobnosti:


Mislim, da je izbira možnosti preverjanja jasna iz slike:


Obstajajo razlike v uporabi pri tankih in debelih odjemalcih - pri debelem odjemalcu se takoj prikaže okno za primerjavo datotek:


V tankem odjemalcu se nisem obremenjeval s programskim pritiskanjem gumbov, predlagam preprosto možnost za prikaz primerjalnega okna:


Primerjava v tankem odjemalcu, IMHO, je bolj priročna, ker ... ima navigacijske gumbe za razlike, kar je bolj priročno za velike tabele kot premikanje z miško:

22.03.2016 Različica 3.10 - Dodana je zastavica "Vedno prepiši reference" za obvezno ponovno pisanje referenciranih objektov (hitrost prenosa je znatno zmanjšana, včasih pa je potrebna). Dodan je zavihek "Priprava", kjer lahko konfigurirate ujemanje izvornega in ciljnega kontnega načrta (na isti ravni kot kontne šifre) ter prenos konstant. Platforma 8.3.7.1970, BP 3.0.43.148

- NOVA FUNKCIONALNOST: Pred prenosom dokumentov je priporočljivo preveriti skladnost kontnega načrta glede vira in cilja ter skladnost z vzpostavljenimi konstantami.

V ta namen je dodan zavihek »Priprava«, v katerem lahko nastavite te korespondence:


Algoritem za izpolnjevanje tabele ujemanja računov je preprost - promet, ki obstaja v viru, se analizira in za vsak tam najden račun se v prejemniku po kodi najde ujemanje; če ujemanje ni najdeno, se vrstica z računom v tabeli je prikazana koda, s katero morate izbrati račun prejemnika, ki bo uporabljen pri prenosu. Skladnost s Poke je vzpostavljena na ravni kode.

Za preverjanje in prenos ujemanja vzpostavljenih konstant se uporablja ustrezna tabela:

Izpolnimo in po potrebi prenesemo. Prenesejo se samo konstante, označene z zastavico ...

Programski sklad je posebno pomnilniško območje, organizirano po principu čakalne vrste LIFO (Last in, first out). Ime "sklad" izhaja iz analogije načela njegove konstrukcije s snopom plošč - plošče lahko postavite eno na drugo (metoda dodajanja na snop, "potisni", "potisni"), nato pa odvzemite jih, začenši od vrha (metoda pridobivanja vrednosti iz sklada, "popping", "pop"). Programski sklad se imenuje tudi klicni sklad, izvršilni sklad ali strojni sklad (da ga ne bi zamenjali s "skladom" - abstraktno podatkovno strukturo).

Čemu je sklad? Omogoča vam priročno organiziranje klica podprogramov. Ob klicu funkcija prejme nekaj argumentov; nekje mora shraniti tudi svoje lokalne spremenljivke. Poleg tega moramo upoštevati, da lahko ena funkcija kliče drugo funkcijo, ki mora prav tako posredovati parametre in shraniti svoje spremenljivke. Pri uporabi sklada morate pri podajanju parametrov le te postaviti na sklad, nato pa jih lahko klicana funkcija »izstreli« od tam in jih uporabi. Tam se lahko shranijo tudi lokalne spremenljivke – funkcija na začetku svoje kode dodeli del pomnilnika sklada, ko se nadzor vrne, pa ga počisti in sprosti. Programerji v jezikih na visoki ravni običajno ne razmišljajo o takih stvareh - prevajalnik ustvari vso potrebno rutinsko kodo zanje.

Posledice napake

Zdaj smo že skoraj blizu problema. Abstraktno je sklad neskončna trgovina, v katero je mogoče neskončno dodajati nove elemente. Na žalost je v našem svetu vse končno - in pomnilnik skladov ni izjema. Kaj se zgodi, če se konča, ko so argumenti funkcije potisnjeni na sklad? Ali pa funkcija dodeli pomnilnik svojim spremenljivkam?

Prišlo bo do napake, imenovane stack overflow. Ker je sklad potreben za organizacijo klicanja uporabniško definiranih funkcij (in skoraj vsi programi v sodobnih jezikih, vključno z objektno usmerjenimi, so tako ali drugače zgrajeni na podlagi funkcij), ne bodo več mogli biti poklican. Zato operacijski sistem prevzame nadzor, počisti sklad in prekine program. Tu lahko poudarimo razliko med stack overflow in stack overflow - v prvem primeru pride do napake pri dostopu do nepravilnega pomnilniškega področja in če na tej stopnji ni zaščite, se ta v tistem trenutku ne manifestira - z uspešno spletu okoliščin lahko program deluje normalno. Če je bil zaščiten le pomnilnik, do katerega se dostopa, . V primeru sklada se program zagotovo prekine.

Če smo povsem natančni, je treba poudariti, da takšen opis dogodkov velja samo za prevajalnike, ki prevajajo v izvorno kodo. V upravljanih jezikih ima navidezni stroj svoj sklad za upravljane programe, katerega stanje je veliko lažje spremljati in lahko si celo privoščite, da programu vržete izjemo, ko pride do prelivanja. V jezikih C in C++ ne morete računati na tako "luksuz".

Vzroki za napako

Kaj bi lahko privedlo do tako neprijetne situacije? Na podlagi zgoraj opisanega mehanizma je ena možnost, da je preveč ugnezdenih klicev funkcij. Ta scenarij je še posebej verjeten pri uporabi rekurzije. Neskončna rekurzija (v odsotnosti lenega mehanizma vrednotenja) je na ta način prekinjena v nasprotju z , ki ima včasih uporabne aplikacije. Z majhno količino pomnilnika, dodeljenega skladu (kar je na primer značilno za mikrokontrolerje), lahko zadostuje preprosto zaporedje klicev.

Druga možnost so lokalne spremenljivke, ki zahtevajo veliko pomnilnika. Imeti lokalno polje z milijoni elementov ali milijoni lokalnih spremenljivk (nikoli ne veš, kaj se zgodi) ni najboljša ideja. Tudi en klic tako pohlepne funkcije lahko zlahka povzroči prelivanje sklada. Za pridobivanje velikih količin podatkov je bolje uporabiti mehanizme dinamičnega pomnilnika, ki vam bodo omogočili obvladovanje napake njegovega pomanjkanja.

Vendar pa je dinamični pomnilnik precej počasen v smislu dodeljevanja in sprostitve (ker to ureja operacijski sistem), pri neposrednem dostopu pa ga morate ročno dodeliti in sprostiti. Pomnilnik na skladu se dodeli zelo hitro (pravzaprav morate spremeniti samo vrednost enega registra); poleg tega imajo objekti, dodeljeni na skladu, samodejno priklicane destruktorje, ko se vrne nadzor nad funkcijo in je sklad počiščen. Seveda se takoj pojavi želja po pridobivanju spomina iz sklada. Zato je tretji način prelivanja programerjeva lastna dodelitev pomnilnika na skladu. Knjižnica C nudi funkcijo alloca posebej za ta namen. Zanimivo je omeniti, da če ima funkcija za dodeljevanje dinamičnega pomnilnika malloc svojega "dvojčka" za sprostitev, free, potem ga funkcija alloca nima - pomnilnik se samodejno sprosti po vrnitvi nadzora nad funkcijo. Morda to samo zaplete situacijo - navsezadnje pomnilnika ne bo mogoče sprostiti pred izhodom iz funkcije. Čeprav je glede na stran priročnika "funkcija alloca odvisna od stroja in prevajalnika; v mnogih sistemih je njena izvedba problematična in hroščeča; njena uporaba je zelo lahkomiselna in je nenaklonjena" - se še vedno uporablja.

Primeri

Kot primer si poglejmo kodo za rekurzivno iskanje datotek, ki se nahaja na MSDN:

Void DirSearch(String* sDir) ( try ( // Poiščite podmape v mapi, ki je posredovana. String* d = Directory::GetDirectories(sDir); int numDirs = d->get_Length(); for (int i= 0;i< numDirs; i++) { // Find all the files in the subfolder. String* f = Directory::GetFiles(d[i],textBox1->besedilo); int numFiles = f->get_Length(); za (int j=0; j< numFiles; j++) { listBox1->Predmeti->Dodaj(f[j]); ) DirSearch(d[i]); ) ) catch (System::Exception* e) ( MessageBox::Show(e->Message); ) )

Ta funkcija pridobi seznam datotek v podanem imeniku in se nato pokliče za tiste elemente seznama, ki so imeniki. Skladno s tem z dovolj globokim drevesom datotečni sistem, dobimo naraven rezultat.

Primer drugega pristopa, vzetega iz vprašanja "Zakaj pride do prelivanja sklada?" s spletnega mesta z imenom Stack Overflow (mesto je zbirka vprašanj in odgovorov o kateri koli programski temi in ne samo o Stack Overflowu, kot se morda zdi):

#define W 1000 #define H 1000 #define MAX 100000 //... int main() ( int image; float dtr; initImg(image,dtr); return 0; )

Kot lahko vidite, glavna funkcija dodeli pomnilnik na skladu za polja tipa int in float, vsaka z milijonom elementov, kar skupaj daje nekaj manj kot 8 megabajtov. Če menite, da Visual C++ privzeto rezervira samo 1 megabajt za sklad, postane odgovor očiten.

In tukaj je primer, vzet iz repozitorija GitHub projekta Lightspark Flash Player:

DefineSoundTag::DefineSoundTag(/* ... */) ( // ... unsigned int soundDataLength = h.getLength()-7; unsigned char *tmp = (unsigned char *)alloca(soundDataLength); // .. .)

Upate lahko, da h.getLength()-7 ni preveliko število, da v naslednji vrstici ne bo prelivanja. Toda ali je čas, prihranjen pri dodeljevanju pomnilnika, vreden "morebitnega" zrušitve programa?

Spodnja črta

Stack overflow je usodna napaka, ki najpogosteje vpliva na programe, ki vsebujejo rekurzivne funkcije. Tudi če program ne vsebuje takih funkcij, je prelivanje še vedno možno zaradi velike velikosti lokalnih spremenljivk ali napake pri ročni dodelitvi pomnilnika na skladu. Vsa klasična pravila ostajajo v veljavi: če obstaja izbira, je bolje izbrati iteracijo namesto rekurzije in tudi ne delati ročnega dela namesto prevajalnika.

Bibliografija

  • E. Tanenbaum. Računalniška arhitektura.
  • Wikipedia. Preobremenitev.
  • Preobremenitev. Stack overflow C++.

Sklad je v tem kontekstu zadnji v prvem medpomnilniku, ki ga dodelite med izvajanjem vašega programa. Zadnji, prvi (LIFO) pomeni, da je zadnja stvar, ki jo vstavite, vedno prva stvar, ki jo vrnete nazaj – če izstopite 2 elementa na kupu, »A« in nato »B«, je prva stvar, ki jo izstopite iz kupa bo "B" in naslednja stvar bo "A".

Ko pokličete funkcijo v svoji kodi, se naslednji ukaz po klicu funkcije shrani v sklad in kateri koli pomnilniški prostor, ki ga lahko prepiše klic funkcije. Izbrana funkcija lahko uporablja več skladov za lastne lokalne spremenljivke. Ko je to storjeno, bo sprostil prostor lokalnih spremenljivk, ki ga je uporabljal, in se nato vrnil na prejšnjo funkcijo.

Preobremenitev

Presežek sklada je, ko ste v skladu uporabili več pomnilnika, kot ga je nameraval uporabiti vaš program. V vgrajenih sistemih imate morda le 256 bajtov za sklad in če vsaka funkcija zavzame 32 bajtov, potem imate lahko samo 8 funkcijskih klicev funkcije 2 z globoko funkcijo funkcije 1, ki kliče funkcijo 3, ki kliče funkcijo 4. ..kdo pokliče funkcijo 8, ki pokliče funkcijo 9, vendar funkcija 9 prepiše pomnilnik zunaj sklada. To lahko prepiše pomnilnik, kodo itd.

Mnogi programerji naredijo to napako tako, da pokličejo funkcijo A, ki nato pokliče funkcijo B, ta nato funkcijo C, ta pa nato funkcijo A. Morda večino časa deluje, vendar bo samo en napačen vnos povzročil, da bo za vedno krožil, dokler računalnik ne fails ugotovi, da je sklad poln.

Vzrok za to so tudi rekurzivne funkcije, vendar če pišete rekurzivno (tj. vaša funkcija kliče sama sebe), se morate tega zavedati in uporabiti statične/globalne spremenljivke, da preprečite neskončno rekurzijo.

Običajno operacijski sistem in programski jezik, ki ga uporabljate, upravljata sklad in ni v vaših rokah. Poglejte svoj graf klicev (drevesno strukturo, ki iz vaše glavne točke prikazuje, kaj vsaka funkcija kliče), da vidite, kako globoki so vaši funkcijski klici, in prepoznajte zanke in rekurzijo, ki niso predvidene. Namerne zanke in rekurzija morajo biti umetno preverjene zaradi napak, če se prevečkrat pokličejo.

Razen dobrih praks programiranja, statičnega in dinamičnega testiranja, v teh sistemih na visoki ravni ne morete narediti veliko.

Vgrajeni sistemi

V vgrajenem svetu, zlasti v kodi z visoko zanesljivostjo (avtomobilska industrija, vesoljska industrija, vesoljska industrija), izvajate obsežno testiranje in pregledovanje kode, vendar počnete tudi naslednje:

  • Onemogoči rekurzijo in zanke – skladnost s pravilnikom in testiranjem
  • Kodo in sklad imejte daleč narazen (koda v flashu, sklad v RAM-u in se nikoli ne ujemata med seboj)
  • Postavite varovalne palice okoli sklada - prazno območje pomnilnika, ki ga zapolnite s čarobno številko (običajno prekinitvena rutina, vendar je tukaj veliko različic) in sto ali tisočkrat na sekundo pogledate varovalne palice, da prepričani, da niso bili prepisani.
  • Uporabite zaščito pomnilnika (tj. ne izvajajte na skladu, ne berite in ne pišite neposredno za skladom)
  • Prekinitve ne kličejo sekundarnih funkcij - nastavijo zastavice, kopirajo podatke in pustijo, da aplikacija poskrbi za njihovo obdelavo (sicer bi lahko končali 8 globoko v svojem drevesu klicev funkcij, imeli prekinitev in nato imeli še nekaj funkcij znotraj prekinitveni izhod, ki povzroči met). Imate več dreves klicev - enega za glavne procese in enega za vsako prekinitev. Če lahko vaše prekinitve motijo ​​druga drugo ... no, obstajajo zmaji ...

Jeziki in sistemi na visoki ravni

Toda v jezikih visoke ravni, ki se izvajajo v operacijskih sistemih:

  • Zmanjšajte shranjevanje lokalnih spremenljivk (lokalne spremenljivke so shranjene na skladu), čeprav so prevajalniki glede tega precej pametni in bodo včasih na kup postavili velike kose, če je vaše drevo klicev plitvo)
  • Izogibajte se ali strogo omejite rekurzijo
  • Ne prekinjajte svojih programov preveč v vse manjše in manjše funkcije – tudi brez upoštevanja lokalnih spremenljivk vsak klic funkcije porabi do 64 bajtov na skladu (32-bitni procesor, prihranek polovice procesorskih registrov, zastavic itd.).
  • Drevo klicev naj bo plitvo (podobno zgornjemu opisu)

Spletni strežniki

Od peskovnika, ki ga imate, je odvisno, ali lahko nadzorujete ali celo vidite sklad. Verjetno lahko s spletnimi strežniki upravljate tako kot z vsemi drugimi jeziki in operacijskimi sistemi na visoki ravni - to večinoma ni v vaših rokah, vendar preverite jezik in strežniški sklad, ki ga uporabljate. Na primer, lahko razdelite sklad na vašem strežniku SQL.

Informix® DataBlade™ API programer's Guide je na voljo za prenos. Razdelek »Upravljanje prostora sklada« opisuje ustvarjanje uporabniško definiranih funkcij (UDR). Ta članek vsebuje dodatne informacije in nasvete za odpravljanje napak.

Naslednje informacije veljajo ne glede na to, ali se UDR izvaja na uporabniško definiranem navideznem procesorju (VP) ali na CPU VP. Sklad niti se lahko premakne v uporabniško definiran navidezni procesor neposredno pred izvedbo UDR.

Kakšna velikost sklada je dodeljena za UDR?

Velikost sklada, ki je na voljo za UDR, je odvisna od tega, kako je bil UDR ustvarjen:

    z uporabo modifikatorja STACK, ki UDR-ju omogoča uporabo svojega posebej dodeljenega sklada,

    brez modifikatorja STACK, kar pomeni, da bo UDR sklad, ki ga dodeli strežnik, delil z nitjo, ki zahteva. Velikost sklada bo v tem primeru določena z vrednostjo parametra STACKSIZE v konfiguracijski datoteki onconfig.

Modifikator STACK

Stavka CREATE PROCEDURE ali CREATE FUNCTION imata izbirni modifikator STACK, ki vam omogoča, da podate količino prostora sklada v bajtih, ki je potreben za izvedbo UDR.

Če pri ustvarjanju UDR uporabite modifikator STACK, bo strežnik dodelil in sprostil prostor sklada vsakič, ko se izvede UDR. Dejanska razpoložljiva velikost je enaka vrednosti STACK v bajtih minus nekaj dodatnih stroškov, odvisno od števila argumentov funkcije.

Če je vrednost STACK manjša od parametra STACKSIZE v datoteki onconfig (glejte naslednji razdelek), bo velikost sklada, dodeljena za UDR, samodejno zaokrožena navzgor na vrednost STACKSIZE.

Konfiguracijski parameter STACKSIZE

Konfiguracijska datoteka onconfig vključuje parameter STACKSIZE, ki določa privzeto velikost sklada za uporabniške niti.

Če pri ustvarjanju UDR ne podate STACK, strežnik ne dodeli dodatnega prostora sklada za izvedbo tega UDR. Namesto tega UDR uporabi prostor sklada, dodeljen za izvedbo zahteve. Razpoložljiva velikost sklada bo odvisna od stroškov izvajanja funkcije na ravni SQL.

Sklad na nit se dodeli enkrat za določeno nit, ki izvaja zahtevo. Zmogljivost je boljša, če si UDR deli en sklad z nitjo, saj strežnik ne zapravlja virov za dodeljevanje dodatnega sklada za vsak klic UDR. Po drugi strani pa lahko, če se velikost sklada, ki ga uporablja UDR, približa vrednosti STACKSIZE, povzroči prekoračitev sklada pri klicu funkcije kot dela kompleksne poizvedbe (v tem primeru bo za izvajanje UDR na voljo manj prostora v skladu).

Upoštevajte, da vrednosti STACKSIZE ne smete nastaviti previsoko, saj bo to vplivalo na vse uporabniške niti.

Kdaj je potrebno nadzorovati velikost sklada?

YMorate upravljati prostor sklada, če UDR izvaja rekurzivne klice ali če UDR zahteva več prostora sklada, kot je privzeto na voljo v skladu niti zahteve (STACKSIZE).

Obstajata dva načina za povečanje sklada za izvajanje UDR:

    Pri ustvarjanju UDR določite modifikator STACK.

    Uporabite mi_call() za izvajanje rekurzivnih klicev (za primer si oglejte Priročnik za programiranje Informix DataBlade API).

Če ne določite velikosti prek STACK-a in če ne uporabite mi_call() za povečanje trenutnega sklada in če UDR naredi nekaj, kar zahteva veliko prostora sklada, bo to povzročilo prelivanje sklada.

Upoštevajte, da nekatere funkcije mi_* dodajo nov segment sklada za lastno izvajanje. Ti segmenti se sprostijo, ko se vrnete na klicno funkcijo UDR.

Kaj storiti, če gre kaj narobe?

Spremljanje uporabe sklada

Namen nadzora je identificirati določen UDR, ki povzroča prekoračitev sklada, tako da lahko spremenite vrednost STACK posebej za ta določen UDR.

    Spremljanje uporabe sklada z ukazom "onstat -g sts".

    Spremljanje seje, ki izvaja poizvedbo SQL z uporabo "onstat -g ses session_id"

Ko identificirate poizvedbo SQL, ki se konča s prelivom sklada, morate določiti uporabo sklada z ločenim izvajanjem poizvedb UDR, ki so del izvirne poizvedbe.

Za UDR lahko dinamično nastavite vrednost STACK. Na primer:

spremeni funkcijo MyFoo (lvarchar,lvarchar) z (dodaj sklad=131072);

Ko spremenite vrednost STACK, preizkusite prvotno zahtevo, da zagotovite, da je zdaj stabilna.

Povečaj STACKSIZE

Druga možnost je, da poskusite povečati vrednost STACKSIZE. Preverite, ali to rešuje težavo. (Ne pozabite pozneje vrniti stare vrednosti).

Če povečanje STACKSIZE ne pomaga, je težava najverjetneje v okvari pomnilnika. Tukaj je nekaj predlogov:

    Omogoči čečkanje po pomnilniku in preverjanje pomnilniškega bazena. Razdelek »Težave z odpravljanjem napak« v članku Dodeljevanje pomnilnika za UDR-je pojasnjuje, kako to storiti.

    Ponovno razmislite o uporabi mi_lvarchar. Posebno pozornost je treba nameniti mestom, kjer se mi_lvarchar posreduje funkciji, ki pričakuje, da bo kot argument prejela niz z ničelnim zaključkom.

    Zmanjšajte število VP-jev CPE (ali uporabnika) na enega, da boste težavo hitreje reproducirali.

mi_print_stack() -- Solaris

Dinamični strežnik Informix za OS Solaris vključuje funkcijo mi_print_stack(), ki jo lahko pokličete v UDR. Ta funkcija privzeto shrani okvir sklada v naslednjo datoteko:

/tmp/default.stack

Imena izhodne datoteke ne morete spremeniti, lahko pa spremenite njeno lokacijo tako, da spremenite vrednost spremenljivke okolja DBTEMP. Prepričajte se, da lahko uporabnik informix piše v imenik $DBTEMP. Vse napake, odkrite med izvajanjem mi_print_stack(), so sporočene $MSGPATH.

Ta funkcija je na voljo samo za OC Solaris.

Glosar

Izrazi in okrajšave, uporabljeni v tem članku:

UDRUporabniško določena rutina
V.P.Virtualni procesor

Ta članek ponovno dokazuje, da mora vsak nabor varnostnih ukrepov zajemati vse faze izvajanja: razvoj, uvajanje, sistemsko upravljanje in seveda organizacijske ukrepe. V informacijskih sistemih je »človeški dejavnik« (vključno z uporabniki) glavna varnostna grožnja. Ta nabor ukrepov mora biti razumen in uravnotežen: ni smiseln in ni verjetno, da bo za organizacijo varovanja, ki presega stroške samih podatkov, namenjenih dovolj sredstev.

Uvod

1C:Enterprise je najpogostejši računovodski sistem v Rusiji, vendar so njegovi razvijalci do različice 8.0 posvečali zelo malo pozornosti varnostnim vprašanjem. V bistvu je to seveda narekovala cenovna niša izdelka in osredotočenost na mala podjetja, kjer ni usposobljenih IT strokovnjakov, morebitni stroški uvedbe in vzdrževanja varnega sistema pa bi bili za podjetje previsoki. Z izdajo različice 8.0 se je moral poudarek spremeniti: stroški rešitev so se močno povečali, sistem je postal veliko bolj razširljiv in prilagodljiv - zahteve so se bistveno spremenile. Ali je sistem postal dovolj zanesljiv in varen, je zelo individualno vprašanje. Glavni informacijski sistem sodobnega podjetja mora izpolnjevati vsaj naslednje varnostne zahteve:

  • Precej nizka verjetnost okvare sistema zaradi notranjih razlogov.
  • Zanesljiva avtorizacija uporabnikov in zaščita podatkov pred nepravilnimi dejanji.
  • Učinkovit sistem dodeljevanja uporabniških pravic.
  • Spletni sistem za varnostno kopiranje in obnovitev v primeru okvare.

Ali rešitve, ki temeljijo na 1C:Enterprise 8.0, izpolnjujejo te zahteve? Jasnega odgovora ni. Kljub bistvenim spremembam v sistemu nadzora dostopa ostaja veliko nerešenih vprašanj. Odvisno od tega, kako je sistem zasnovan in konfiguriran, vse te zahteve morda niso izpolnjene ali izpolnjene v zadostni meri za določeno izvedbo, vendar je vredno biti pozoren (in to je pomembna posledica "mladosti" platforme ), da je za popolno izpolnitev naštetih pogojev potrebno vložiti resnično herkulske napore.

Ta članek je namenjen razvijalcem in izvajalcem rešitev na platformi 1C:Enterprise ter sistemskim skrbnikom organizacij, kjer se uporablja 1C:Enterprise, in opisuje nekatere vidike razvoja in konfiguracije različice odjemalec-strežnik sistema od točke z vidika organizacije varnost informacij. Ta članek ne more biti uporabljen kot nadomestilo za dokumentacijo, ampak le opozarja na nekatere točke, ki v njem še niso bile odražene. In seveda niti ta članek niti vsa dokumentacija ne bodo mogli odražati kompleksnosti problema izgradnje varnega informacijskega sistema, ki mora hkrati zadostiti nasprotujočim si zahtevam varnosti, zmogljivosti, priročnosti in funkcionalnosti.

Klasifikacija in terminologija

Ključni predmet obravnavanja v članku so informacijske grožnje.

Informacijska grožnja– možnost situacije, ko bodo podatki nepooblaščeno prebrani, kopirani, spremenjeni ali blokirani.

In na podlagi te definicije članek informacijske grožnje razvršča na naslednji način:

  • Nepooblaščeno uničenje podatkov
  • Nepooblaščena sprememba podatkov
  • Nepooblaščeno kopiranje podatkov
  • Nepooblaščeno branje podatkov
  • Nedostopnost podatkov

Vse grožnje delimo na namerne in nenamerne. Realizirano informacijsko grožnjo bomo imenovali nezgoda. Lastnosti sistema so:

Ranljivosti– funkcije, ki vodijo do incidentov Zaščitni ukrepi– funkcije, ki blokirajo možnost incidenta

V bistvu se upoštevajo le tisti primeri, katerih verjetnost je posledica uporabe tehnološke platforme 1C: Enterprise 8.0 v različici odjemalec-strežnik (nadalje, v primerih, ko to ni v nasprotju s pomenom preprosto 1C ali 1C 8.0) . Določimo naslednje glavne vloge v zvezi z uporabo sistema:

  • Operaterji– uporabniki, ki imajo pravice do vpogleda in spreminjanja podatkov, omejene z vlogo aplikacije, vendar nimajo skrbniških funkcij
  • Sistemski skrbniki– uporabniki, ki imajo skrbniške pravice v sistemu, vključno s skrbniškimi pravicami v operacijskih sistemih aplikacijskega strežnika in strežnika MS SQL, skrbniške pravice v MS SQL itd.
  • Skrbniki za informacijsko varnost– uporabniki, na katere so prenesene nekatere administrativne funkcije v informacijski bazi 1C (kot so dodajanje uporabnikov, testiranje in popravljanje, varnostno kopiranje, nastavitev aplikativne rešitve itd.)
  • Razvijalci sistemov– uporabniki, ki razvijajo aplikativno rešitev. Na splošno morda nimajo dostopa do delovnega sistema.
  • Osebe, ki nimajo neposrednega dostopa do sistema– uporabniki, ki nimajo delegiranih pravic dostopa do 1C, vendar lahko tako ali drugače vplivajo na delovanje sistema (običajno so to vsi uporabniki iste domene Active Directory, v kateri je nameščen sistem). Ta kategorija se šteje predvsem za prepoznavanje potencialno nevarnih predmetov v sistemu.
  • Avtomatizirani administrativni skripti– programi, ki so jim dodeljene določene funkcije, zasnovane za samodejno izvajanje določenih dejanj (na primer uvoz-izvoz podatkov)

Pri tem je treba opozoriti na dve točki: prvič, ta klasifikacija je zelo groba in ne upošteva delitev znotraj posamezne skupine - takšna delitev bo ustvarjena za nekatere posebne primere, in drugič, predpostavlja se, da druge osebe ne morejo vplivati ​​na delovanje sistema, ki mora biti zagotovljen z zunanjimi sredstvi 1C.

Vsak varnostni sistem mora biti zasnovan ob upoštevanju izvedljivosti in stroškov lastništva. Na splošno je pri razvoju in implementaciji informacijskega sistema potrebno, da cena zaščite sistema ustreza:

  • vrednost varovanih informacij;
  • stroški ustvarjanja incidenta (v primeru namerne grožnje);
  • finančna tveganja v primeru incidenta

Nesmiselno in škodljivo je organizirati obrambo, ki je veliko dražja od ocene njene finančne učinkovitosti. Obstaja več metod za ocenjevanje tveganja izgube informacij, vendar niso obravnavane v tem članku. Drug pomemben vidik je ohranjanje ravnotežja med pogosto nasprotujočimi si zahtevami glede informacijske varnosti, zmogljivosti sistema, udobja in enostavnosti dela s sistemom, hitrosti razvoja in implementacije ter drugih zahtev za informacijske sisteme podjetij.

Glavne značilnosti mehanizma sistemske informacijske varnosti

1C:Enterprise 8.0 je na voljo v dveh različicah: datoteka in odjemalec-strežnik. Datotečne različice ni mogoče šteti za zagotavljanje informacijske varnosti sistema iz naslednjih razlogov:

  • Podatki in konfiguracija so shranjeni v datoteki, ki jo lahko berejo in zapisujejo vsi uporabniki sistema.
  • Kot bo prikazano spodaj, je avtorizacijo sistema zelo enostavno zaobiti.
  • Celovitost sistema zagotavlja samo jedro odjemalskega dela.

V različici odjemalec-strežnik se za shranjevanje informacij uporablja MS SQL Server, ki zagotavlja:

  • Bolj zanesljivo shranjevanje podatkov.
  • Izolacija datotek od neposrednega dostopa.
  • Naprednejši mehanizmi transakcij in zaklepanja.

Kljub bistvenim razlikam med datotečno in odjemalsko-strežniško različico sistema imata enotno shemo nadzora dostopa na nivoju aplikacijske rešitve, ki omogoča naslednje zmožnosti:

  • Avtorizacija uporabnika z geslom, določenim v 1C.
  • Avtorizacija uporabnika na podlagi trenutnega uporabnika sistema Windows.
  • Dodeljevanje vlog uporabnikom sistema.
  • Omejitev upravnih funkcij z vlogo.
  • Dodeljevanje razpoložljivih vmesnikov po vlogah.
  • Omejevanje dostopa do metapodatkovnih objektov glede na vlogo.
  • Omejevanje dostopa do podrobnosti objekta po vlogi.
  • Omejevanje dostopa do podatkovnih objektov z vlogami in parametri seje.
  • Omejitev interaktivnega dostopa do podatkov in izvršljivih modulov.
  • Nekatere omejitve izvajanja kode.

Na splošno je uporabljena shema dostopa do podatkov precej tipična za informacijske sisteme tega nivoja. Vendar pa v zvezi s to implementacijo trinivojske arhitekture odjemalec-strežnik obstaja več temeljnih vidikov, ki vodijo do relativno velikega števila ranljivosti:

  1. Veliko število stopenj obdelave podatkov in na vsaki stopnji lahko veljajo drugačna pravila za dostop do objektov.

    Nekoliko poenostavljen diagram faz obdelave podatkov, ki so pomembne z varnostnega vidika, je prikazan na sliki 1. Splošno pravilo za 1C je zmanjšati omejitve, ko se premikate navzdol po tej shemi, zato uporabite ranljivost na enem od zgornje ravni lahko motijo ​​sistem na vseh ravneh.

  2. Nezadostno vzpostavljeni postopki spremljanja posredovanih podatkov pri prehodu iz nivoja v nivo.

    Na žalost vsi notranji mehanizmi sistema niso popolnoma razhroščeni, še posebej neinteraktivni mehanizmi, katerih odpravljanje napak je po eni strani vedno bolj delovno intenzivno, po drugi strani pa bolj odgovorno. Ta "bolezen" ni težava izključno 1C; najdemo jo v številnih strežniških izdelkih večine prodajalcev. Šele v zadnjih letih se je pozornost tem problemom močno povečala.

  3. Nezadostno visoka povprečna kvalifikacija razvijalcev in sistemskih skrbnikov, podedovana iz prejšnje različice.

    Izdelki linije 1C:Enterprise so bili sprva osredotočeni na enostavnost razvoja in podpore ter na delo v majhnih organizacijah, zato ne preseneča, da se je skozi zgodovino razvilo, da pomemben del »razvijalcev« aplikativnih rešitev in »skrbnikov« sistemi nimajo dovolj znanja in veščin za delo z veliko bolj kompleksnim produktom, to je različica 8.0. Težavo še poslabšuje praksa franšizijskih podjetij, da poučujejo »v boju« na račun strank, ne da bi se tega vprašanja lotili sistematično. Treba je pokloniti podjetju 1C, da se je v zadnjih nekaj letih to stanje postopoma popravilo: resna franšizna podjetja so začela bolj odgovorno pristopati k problemu izbire in usposabljanja osebja, ravni podpore informacijske tehnologije od podjetje 1C se je znatno povečalo, pojavili so se certifikacijski programi, namenjeni visoki ravni storitev; vendar situacije ni mogoče takoj popraviti, zato je treba ta dejavnik upoštevati pri analizi varnosti sistema.

  4. Platforma je relativno mlada.

    Med izdelki podobne usmeritve in namenov uporabe je to ena najmlajših rešitev. Funkcionalnost platforme je bila bolj ali manj vzpostavljena pred slabim letom dni. Hkrati je vsaka izdaja platforme, začenši z 8.0.10 (v tej izdaji so bile implementirane skoraj vse trenutne zmogljivosti sistema), postala bistveno bolj stabilna od prejšnjih. Funkcionalnost standardnih aplikacijskih rešitev še vedno skokovito raste, čeprav je izkoriščena le polovica zmogljivosti platforme. Seveda lahko v takih razmerah govorimo o stabilnosti precej pogojno, a na splošno je treba priznati, da so rešitve na platformi 1C 8.0 v mnogih pogledih bistveno pred v funkcionalnosti in zmogljivosti (in pogosto v stabilnosti) podobnih rešitev na 1C. 7.7 platforma.

Torej je sistem (in po možnosti standardna aplikacijska rešitev) nameščen v podjetju in nameščen na računalnikih. Najprej je treba ustvariti okolje, v katerem je postavitev varnosti 1C smiselna, za to pa mora biti konfigurirana tako, da je izpolnjena predpostavka, da sistemske nastavitve pomembno vplivajo na varnost sistema.

Upoštevajte splošna pravila za nastavitev varnosti.

O kakršni koli informacijski varnosti sistema ne more biti govora, če niso upoštevana osnovna načela izdelave varnih sistemov. Prepričajte se, da so izpolnjeni vsaj naslednji pogoji:

  • Dostop do strežnikov je fizično omejen in zagotovljeno njihovo nemoteno delovanje:
    • strežniška oprema izpolnjuje zahteve glede zanesljivosti, prilagojena je zamenjava pokvarjene strežniške opreme, za posebej kritična področja se uporabljajo sheme s podvajanjem strojne opreme (RAID, napajanje iz več virov, več komunikacijskih kanalov itd.);
    • strežniki se nahajajo v zaklenjenem prostoru, ta prostor pa je odprt le za čas dela, ki ga ni mogoče opraviti na daljavo;
    • Samo ena ali dve osebi imata pravico odpreti strežniško sobo, v nujnih primerih je razvit sistem obveščanja odgovornih oseb;
    • je zagotovljeno neprekinjeno napajanje strežnikov
    • zagotovljeni so normalni klimatski pogoji delovanja opreme;
    • v strežniški sobi je požarni alarm, ni nevarnosti poplav (zlasti za prvo in zadnje nadstropje);
  • Nastavitve omrežne in informacijske infrastrukture podjetja so pravilno zaključene:
    • Požarni zidovi so nameščeni in konfigurirani na vseh strežnikih;
    • vsi uporabniki in računalniki so avtorizirani v omrežju, gesla so dovolj kompleksna, da jih ni mogoče uganiti;
    • sistemski operaterji imajo dovolj pravic za normalno delo z njim, vendar nimajo pravic do upravnih dejanj;
    • protivirusna orodja so nameščena in omogočena na vseh računalnikih v omrežju;
    • Zaželeno je, da uporabniki (razen skrbnikov omrežja) nimajo skrbniških pravic na odjemalskih delovnih postajah;
    • dostop do interneta in izmenljivih medijev za shranjevanje je treba urediti in omejiti;
    • mora biti konfiguriran sistemski nadzor varnostnih dogodkov;
  • Glavna organizacijska vprašanja so bila rešena:
    • uporabniki imajo zadostne kvalifikacije za delo z 1C in strojno opremo;
    • uporabniki so obveščeni o odgovornosti za kršitev pravil delovanja;
    • so za vsak materialni element informacijskega sistema imenovane finančno odgovorne osebe;
    • vse sistemske enote so zapečatene in zaprte;
    • Posebno pozornost posvetite inštruiranju in nadzoru čistilcev, gradbenih delavcev in električarjev. Te osebe lahko iz malomarnosti povzročijo škodo, ki ni primerljiva z namerno škodo, ki jo povzroči nevesten uporabnik sistema.

Pozor! Ta seznam ni izčrpen, ampak le opisuje, kaj se pogosto spregleda pri uvajanju katerega koli dokaj zapletenega in dragega informacijskega sistema!

  • MS SQL Server, aplikacijski strežnik in odjemalski del tečejo na različnih računalnikih, strežniške aplikacije tečejo pod pravicami posebej ustvarjenih Windows uporabnikov;
  • Za MS SQL Server
    • nastavljen je mešani avtorizacijski način
    • Uporabniki MS SQL, vključeni v vlogo skrbnika strežnika, ne sodelujejo pri delu 1C,
    • za vsak IB 1C je ustvarjen ločen uporabnik MS SQL, ki nima privilegiranega dostopa do strežnika,
    • MS SQL uporabnik enega IS nima dostopa do drugega IS;
  • Uporabniki nimajo neposrednega dostopa do aplikacijskega strežnika in datotek strežnika MS SQL
  • Operaterske delovne postaje so opremljene z operacijskim sistemom Windows 2000/XP (ne Windows 95/98/Me)

Ne zanemarjajte priporočil razvijalcev sistema in branja dokumentacije. Pomembna gradiva o postavitvi sistema so objavljena na diskih ITS v razdelku »Metodološka priporočila«. Posebno pozornost posvetite naslednjim člankom:

  1. Značilnosti aplikacij, ki delajo s strežnikom 1C:Enterprise
  2. Namestitev podatkov 1C:Enterprise 8.0
  3. Uporabniki posodobijo 1C:Enterprise 8.0 Microsoft Windows brez skrbniških pravic
  4. Urejanje seznama uporabnikov v imenu uporabnika, ki nima administratorskih pravic
  5. Konfiguriranje nastavitev požarnega zidu Windows XP SP2 za zagon SQL Server 2000 in SQL Server Desktop Engine (MSDE)
  6. Konfiguracija parametrov COM+ Windows XP SP2 za delovanje strežnika 1C:Enterprise 8.0
  7. Konfiguracija nastavitev požarnega zidu Windows XP SP2 za strežnik 1C:Enterprise 8.0
  8. Konfiguriranje nastavitev požarnega zidu Windows XP SP2 za HASP License Manager
  9. Ustvarjanje varnostne kopije informacijsko bazo z uporabo SQL Server 2000
  10. Težave pri namestitvi in ​​konfiguraciji 1C:Enterprise 8.0 v različici "odjemalec-strežnik".(eden najpomembnejših člankov)
  11. Posebnosti Nastavitve sistema Windows Server 2003 pri namestitvi strežnika 1C:Enterprise 8.0
  12. Ureditev uporabniškega dostopa do informacijske baze v različici odjemalec-strežnik(eden najpomembnejših člankov)
  13. Strežnik 1C: Enterprise in SQL strežnik
  14. Podroben postopek namestitve 1C:Enterprise 8.0 v različici "odjemalec-strežnik"(eden najpomembnejših člankov)
  15. Uporaba vgrajenega jezika na strežniku 1C:Enterprise

Toda pri branju dokumentacije bodite kritični do prejetih informacij, na primer članek »Težave pri namestitvi in ​​konfiguraciji 1C: Enterprise 8.0 v različici odjemalec-strežnik« ne opisuje natančno pravic, ki so potrebne za uporabnika USER1CV8SERVER. Na voljo bodo povezave do spodnjega seznama, na primer [ITS1] pomeni članek »Funkcije aplikacij, ki delujejo s strežnikom 1C:Enterprise«. Vse povezave do člankov so podane na zadnjo številko ITS v času pisanja (januar 2006)

Uporabite zmožnosti avtorizacije v kombinaciji z avtorizacijo Windows za uporabnike

Od dveh možnih načinov avtorizacije uporabnika: vgrajenega 1C in kombiniranega z avtorizacijo operacijskega sistema Windows, če je mogoče, izberite kombinirano avtorizacijo. To bo omogočilo, da se uporabniki med delom ne bodo zamenjali z več gesli, vendar ne bo zmanjšalo stopnje varnosti sistema. Vendar pa je tudi za uporabnike, ki uporabljajo samo pooblastilo za Windows, zelo priporočljivo, da pri ustvarjanju nastavite geslo in šele po tem onemogočite pooblastilo 1C za tega uporabnika. Za zagotovitev obnovitve sistema v primeru uničenja strukture imenika Active Directory je treba pustiti vsaj enega uporabnika, ki se lahko prijavi v sistem z avtorizacijo 1C.

Pri ustvarjanju vlog aplikacijske rešitve ne dodajajte pravic »v rezervi«

Vsaka vloga aplikacijske rešitve mora odražati minimalni zahtevani nabor pravic za izvajanje dejanj, opredeljenih s to vlogo. Vendar pa nekaterih vlog ni mogoče uporabiti neodvisno. Na primer za interaktivni zagon zunanje zdravljenje Ustvarite lahko ločeno vlogo in jo dodate vsem uporabnikom, ki morajo uporabljati zunanjo obdelavo.

Redno pregledujte dnevnike in protokole delovanja sistema

Če je mogoče, uredite in avtomatizirajte pregledovanje dnevnikov in protokolov delovanja sistema. S pravilno konfiguracijo in rednim pregledovanjem dnevnikov (filtriranje samo po pomembnih dogodkih) lahko nepooblaščena dejanja odkrijemo zgodaj ali jih celo preprečimo v pripravljalni fazi.

Nekatere funkcije različice odjemalec-strežnik

Ta razdelek opisuje nekatere operativne funkcije možnosti odjemalec-strežnik in njihov vpliv na varnost. Za lažje branje so uporabljeni naslednji zapisi:

Pozor! opis ranljivosti

Shranjevanje informacij, ki nadzorujejo dostop do sistema

Shranjevanje seznama uporabnikov informacijske varnosti

Vsi podatki o seznamu uporabnikov te informacijske varnosti in vlogah, ki so jim v njej na voljo, so shranjeni v tabeli Params v bazi podatkov MS SQL (glej [ITS2]). Če pogledamo strukturo in vsebino te tabele, postane očitno, da so vsi podatki o uporabniku shranjeni v zapisu z vrednostjo polja FileName »users.usr«.

Ker domnevamo, da uporabniki nimajo dostopa do podatkovne baze MS SQL, tega dejstva samo po sebi napadalec ne more uporabiti, če pa je možno izvajati kodo v MS SQL, to »odpira vrata« za pridobitev kakršnih koli (! ) dostop iz 1C . Enak mehanizem (z manjšimi spremembami) lahko uporabimo tudi v datotečni različici sistema, kar ob upoštevanju lastnosti datotečne različice popolnoma izključuje njegovo uporabnost pri gradnji varnih sistemov.

Priporočilo: Trenutno ni možnosti, da bi popolnoma zaščitili aplikacijo pred tovrstnimi spremembami, razen uporabe sprožilcev na ravni MS SQL Server, ki pa lahko povzroči težave pri posodabljanju različice platforme ali spreminjanju seznama uporabniki. Če želite slediti takšnim spremembam, lahko uporabite dnevnik 1C (bodite pozorni na "sumljive" prijave v načinu konfiguratorja, ne da bi navedli uporabnika) ali ohranite stalno delovanje SQL Profilerja (kar bo izjemno negativno vplivalo na delovanje sistema) ali konfigurirajte Opozorila mehanizem (najverjetneje skupaj z uporabo sprožilcev)

Shranjevanje informacij o seznamu IS na strežniku

Za vsak aplikacijski strežnik 1C so shranjene informacije o seznamu podatkovnih baz MS SQL, povezanih z njim. Vsaka informacijska baza za delovanje uporablja svoj povezovalni niz iz aplikacijskega strežnika in MS SQL strežnika. Podatki o informacijskih bazah, registriranih na aplikacijskem strežniku, so skupaj s povezovalnimi nizi shranjeni v datoteki srvrib.lst, ki se nahaja na strežniku v imeniku<Общие данные приложений>/1C/1Cv8 (na primer C:/Documents and Settings/All Users/Application Data/1C/1Cv8/srvrib.lst). Za vsak sistem informacijske varnosti je shranjen celoten povezovalni niz, vključno z uporabniškim geslom MS SQL pri uporabi mešanega avtorizacijskega modela MS SQL. Zaradi prisotnosti te datoteke se je mogoče bati nepooblaščenega dostopa do baze podatkov MS SQL in če se v nasprotju s priporočili za dostop do vsaj ene baze podatkov uporablja privilegiran uporabnik (na primer »sa«), potem v Poleg grožnje eni informacijski varnosti obstaja grožnja celotnemu sistemu z uporabo MS SQL.

Zanimivo je omeniti, da uporaba mešane avtorizacije in avtorizacije Windows na strežniku MS SQL vodi do različnih vrst težav pri pridobivanju dostopa do določene datoteke. Ključne negativne lastnosti avtorizacije sistema Windows bodo torej:

  • Delovanje celotne informacijske varnosti na aplikacijskem strežniku in na MS SQL strežniku pod enim nizom pravic (najverjetneje redundančnim)
  • Iz procesa aplikacijskega strežnika 1C (ali na splošno iz uporabnika USER1CV8SERVER ali njegovega enakovrednega) brez navedbe gesla se lahko preprosto povežete s katero koli informacijsko varnostjo, ne da bi navedli geslo

Po drugi strani pa je lahko za napadalca težje izvesti poljubno kodo iz konteksta uporabnika USER1CV8SERVER kot pridobiti navedeno datoteko. Mimogrede, prisotnost takšne datoteke je še en argument za distribucijo funkcij strežnika na različnih računalnikih.

Priporočilo: Datoteka srvrib.lst mora biti dostopna samo procesu strežnika. Ne pozabite konfigurirati nadzora, da spremenite to datoteko.

Na žalost privzeto ta datoteka skoraj ni zaščiten pred branjem, kar je treba upoštevati pri uvajanju sistema. Idealna možnost bi bila, da aplikacijski strežnik prepreči branje in pisanje te datoteke med delovanjem (vključno z branjem in pisanjem s povezavami uporabnikov, ki se izvajajo na tem strežniku).

Pomanjkanje avtorizacije pri ustvarjanju informacijske varnosti na strežniku

Pozor! Napaka pomanjkanja avtorizacije je bila odpravljena v različici 8.0.14 platforme 1C:Enterprise. V tej izdaji se je pojavil koncept »1C:Enterprise Server Administrator«, vendar dokler je na strežniku določen seznam skrbnikov, sistem deluje, kot je opisano spodaj, zato ne pozabite na to možno funkcijo.

Verjetno največja ranljivost iz tega razdelka je možnost skoraj neomejenega dodajanja informacijske varnosti aplikacijskemu strežniku, zaradi česar vsak uporabnik, ki pridobi dostop do povezave z aplikacijskim strežnikom, samodejno dobi možnost izvajanja poljubne kode na aplikacijskem strežniku. . Poglejmo si to s primerom.

Sistem je treba namestiti na naslednji način

  • MS SQL Server 2000 (na primer ime omrežja SRV1)
  • Server 1C:Enterprise 8.0 (omrežno ime SRV2)
  • Odjemalski del 1C:Enterprise 8.0 (ime omrežja WS)

Predpostavlja se, da ima uporabnik (v nadaljevanju UPORABNIK), ki dela na WS, vsaj minimalen dostop do enega izmed informacijskovarnostnih sistemov, registriranih na SRV2, nima pa privilegiranega dostopa do SRV1 in SRV2. Na splošno kombinacija funkcij naštetih računalnikov ne vpliva na situacijo. Sistem je bil konfiguriran ob upoštevanju priporočil v dokumentaciji in na ITS diskih. Stanje je prikazano na sl. 2.


  • konfigurirajte varnost COM+ na aplikacijskem strežniku, tako da imajo samo uporabniki 1C pravico do povezave s procesom aplikacijskega strežnika (več podrobnosti [ITS12]);
  • datoteka srvrib.lst mora biti samo za branje za uporabnika USER1CV8SERVER (za dodajanje nove informacijske varnosti strežniku začasno dovolite pisanje);
  • Za povezavo z MS SQL uporabite samo protokol TCP/IP, v tem primeru lahko:
    • omejite povezave s požarnim zidom;
    • konfigurirajte uporabo nestandardnih vrat TCP, kar bo otežilo povezavo "zunanjih" IB 1C;
    • uporabljati šifriranje prenesenih podatkov med aplikacijskim strežnikom in SQL strežnikom;
  • konfigurirajte požarni zid strežnika tako, da je uporaba strežnikov MS SQL tretjih oseb nemogoča;
  • uporabite intranetna varnostna orodja, da izključite možnost, da bi se nepooblaščen računalnik pojavil v lokalnem omrežju (IPSec, varnostne politike skupine, požarni zidovi itd.);
  • Uporabniku USER1CV8SERVER v nobenem primeru ne podelite skrbniških pravic na aplikacijskem strežniku.

Uporaba kode, ki se izvaja na strežniku

Pri uporabi različice odjemalec-strežnik 1C lahko razvijalec porazdeli izvajanje kode med odjemalcem in aplikacijskim strežnikom. Da bi se koda (postopek ali funkcija) izvajala samo na strežniku, jo je treba postaviti v splošni modul, za katerega je nastavljena lastnost »Server« in v primeru, ko je izvajanje modula dovoljeno ne le na strežnik, postavite kodo v omejeni razdelek »#If Server «:

#If Server Potem
Funkcija OnServer(Param1, Param2 = 0) Export // Ta funkcija se kljub svoji preprostosti izvaja na strežniku
Param1 = Param1 + 12;
Vrni Param1;
EndFunction
#EndIf

Pri uporabi kode, ki se izvaja na strežniku, morate upoštevati, da:

  • koda se izvaja s pravicami USER1CV8SERVER na aplikacijskem strežniku (na voljo so COM objekti in datoteke strežnika);
  • vse uporabniške seje izvaja en primerek storitve, tako da bo na primer prekoračitev sklada na strežniku povzročila prekinitev povezave vseh aktivnih uporabnikov;
  • razhroščevanje strežniških modulov je težko (na primer, ne morete nastaviti prekinitvene točke v razhroščevalniku), vendar ga je treba izvesti;
  • prenos nadzora od odjemalca do aplikacijskega strežnika in nazaj lahko zahteva znatna sredstva z velikimi količinami prenesenih parametrov;
  • uporaba interaktivnih orodij (obrazci, dokumenti s preglednicami, pogovorna okna), zunanja poročila in obdelava v kodi na aplikacijskem strežniku ni mogoča;
  • uporaba globalnih spremenljivk (spremenljivk aplikacijskega modula, deklariranih z navedbo "Izvoz") ni dovoljena;

Za več podrobnosti si oglejte [ITS15] in druge članke ITS.

Aplikacijski strežnik mora imeti posebne zahteve glede zanesljivosti. V pravilno zgrajenem sistemu odjemalec-strežnik morajo biti izpolnjeni naslednji pogoji:

  • nobeno dejanje odjemalske aplikacije ne sme prekiniti delovanja strežnika (razen administrativnih primerov);
  • strežnik ne more izvajati programske kode, prejete od odjemalca;
  • sredstva morajo biti »pravično« porazdeljena povezave s strankami, ki zagotavlja razpoložljivost strežnika ne glede na trenutno obremenitev;
  • če ni blokiranja podatkov, povezave odjemalcev ne smejo vplivati ​​na delo drug drugega;
  • ne na strežniku Uporabniški vmesnik, vendar je treba razviti orodja za spremljanje in beleženje;

Na splošno je sistem 1C zgrajen tako, da se približa tem zahtevam (na primer, na strežniku ni mogoče prisiliti zunanje obdelave), vendar še vedno obstaja več neprijetnih lastnosti, zato:

Priporočilo: Pri razvoju izvajalnega strežnika je priporočljivo upoštevati načelo minimalnega vmesnika. Tisti. število vstopov v strežniške module iz odjemalske aplikacije naj bo zelo omejeno, parametri pa strogo regulirani. Priporočilo: Pri prejemu parametrov procedur in funkcij na strežniku je potrebno parametre validirati (preveriti, ali parametri ustrezajo pričakovanemu tipu in območju vrednosti). Tega v standardnih rešitvah ni, je pa zelo zaželeno uvesti obvezno validacijo v lastnem razvoju. Priporočilo: Pri ustvarjanju besedila zahteve (in še posebej parametra ukaza Run) na strani strežnika ne uporabljajte nizov, prejetih iz odjemalske aplikacije.

Splošno priporočilo bi bilo, da se seznanite z načeli varne gradnje splet-aplikacije za baze podatkov in delujejo na podobnih principih. Podobnosti so res precejšnje: prvič, tako kot spletna aplikacija je aplikacijski strežnik vmesna plast med bazo podatkov in uporabniškim vmesnikom (razlika je predvsem v tem, da spletni strežnik tvori uporabniški vmesnik); drugič, z varnostnega vidika ne morete zaupati podatkom, prejetim od stranke, ker možen je zagon zunanjih poročil in obdelav.

Posredovanje parametrov

Posredovanje parametrov funkciji (postopku), ki se izvaja na strežniku, je precej občutljivo vprašanje. To je predvsem posledica potrebe po njihovem prenosu med aplikacijskim strežnikom in odjemalskimi procesi. Ko nadzor preide s strani odjemalca na stran strežnika, se vsi poslani parametri serializirajo, prenesejo na strežnik, kjer se “razpakirajo” in uporabijo. Pri prehodu s strani strežnika na stran odjemalca je postopek obraten. Tu je treba opozoriti, da ta shema pravilno obravnava podajanje parametrov po sklicu in po vrednosti. Pri podajanju parametrov veljajo naslednje omejitve:

  • Med odjemalcem in strežnikom (v obe smeri) je mogoče prenašati samo nespremenljive vrednosti (tj. vrednosti, katerih vrednosti ni mogoče spremeniti): primitivne tipe, reference, univerzalne zbirke, sistemske vrednosti oštevilčenja, shranjevanje vrednosti. Če poskušate posredovati nekaj drugega, se odjemalska aplikacija zruši (tudi če strežnik poskuša posredovati napačen parameter).
  • Pri posredovanju parametrov ni priporočljivo prenašati velikih količin podatkov (na primer nizov, daljših od 1 milijona znakov), kar lahko negativno vpliva na delovanje strežnika.
  • Parametrov, ki vsebujejo ciklično referenco, ne morete posredovati od strežnika do odjemalca in nazaj. Če poskusite posredovati tak parameter, se odjemalska aplikacija zruši (tudi če strežnik poskuša posredovati napačen parameter).
  • Zelo zapletenih zbirk podatkov ni priporočljivo prenašati. Ko poskušate posredovati parameter z zelo visoko stopnjo gnezdenja, se strežnik zruši (!).

Pozor! Najbolj moteča lastnost v tem trenutku je verjetno napaka pri podajanju kompleksnih zbirk vrednosti. Torej, na primer, koda: Stopnja gnezdenja = 1250;
M = nova matrika;
PassedParameter = M;
Za račun = 1 glede na raven cikla gnezdenja
MVInt = Nova matrika;
M.Dodaj(MVInt);
M = MVint;
EndCycle;
ServerFunction(PassedParameter);

Privede do zaustavitve strežnika v sili z odklopom vseh uporabnikov, in to se zgodi, preden se nadzor prenese na kodo v vgrajenem jeziku.

Uporaba nevarnih funkcij na strani strežnika.

Vseh vgrajenih jezikovnih orodij ni mogoče uporabiti v kodi, ki se izvaja na aplikacijskem strežniku, vendar je tudi med razpoložljivimi orodji veliko "problematičnih" konstruktov, ki jih je mogoče grobo razvrstiti na naslednji način:

  • sposoben zagotoviti možnost izvajanja kode, ki ni vsebovana v konfiguraciji (skupina "Izvajanje kode")
  • lahko odjemalski aplikaciji zagotovi informacije o datoteki in operacijski sistem uporabnik ali izvaja dejanja, ki niso povezana z delom s podatki (»Kršitev pravic«)
  • ki lahko povzročijo zrušitev strežnika ali uporabljajo zelo velike vire (skupina "Zrušitev strežnika")
  • lahko povzroči napako odjemalca (skupina odpovedi odjemalca) – ta vrsta se ne upošteva. Primer: posredovanje spremenljive vrednosti strežniku.
  • napake v programskih algoritmih (neskončne zanke, neomejena rekurzija itd.) (»programske napake«)

Glavne problematične zasnove, ki jih poznam (s primeri), so navedene spodaj:

Postopek Izvedi (<Строка>)

Izvajanje kode. Omogoča vam, da izvedete del kode, ki se mu posreduje kot vrednost niza. Pri uporabi na strežniku morate zagotoviti, da se podatki, prejeti od odjemalca, ne uporabljajo kot parameter. Naslednja uporaba na primer ni dovoljena:

#If Server Potem
Izvoz ProcedureOnServer(Param1).
Izvedi (Param1);
Konec postopka
#EndIf

Vnesite "COMObject" (konstruktor New COMObject(<Имя>, <Имя сервера>))

Ustvari objekt COM zunanje aplikacije s pravicami USER1CV8SERVER na aplikacijskem strežniku (ali drugem podanem računalniku). Pri uporabi na strežniku se prepričajte, da parametri niso posredovani iz odjemalske aplikacije. Vendar pa je na strani strežnika učinkovito uporabljati to funkcijo pri uvažanju/izvažanju, pošiljanju podatkov po internetu, izvajanju nestandardnih funkcij itd.

Funkcija GetCOMObject(<Имя файла>, <Имя класса COM>)
Kršitev pravic in izvajanje kode. Podobno kot pri prejšnjem, pridobivanje le predmeta COM, ki ustreza datoteki.
Postopki in funkcije ComputerName(), TemporaryFileDirectory(), ProgramDirectory(), WindowsUsers()
Kršitev pravic. Z njihovim izvajanjem na strežniku vam omogočajo, da ugotovite podrobnosti o organizaciji strežniškega podsistema. Pri uporabi na strežniku se prepričajte, da se podatki ne prenesejo na odjemalca ali da niso dostopni operaterjem brez ustreznega dovoljenja. Posebno pozornost posvetite dejstvu, da je podatke mogoče posredovati nazaj v parametru, posredovanem s sklicevanjem.
Postopki in funkcije za delo z datotekami (CopyFile, FindFiles, MergeFiles in mnoge druge), kot tudi vrste datotek.

Kršitev pravic. Z izvajanjem na strežniku omogočajo skupni dostop do lokalnih (in lociranih v omrežju) datotek, dostopnih pod uporabniškimi pravicami USER1CV8SERVER. Če se uporablja zavestno, je mogoče učinkovito izvajati naloge, kot je uvoz/izvoz podatkov na strežniku.

Pred uporabo teh funkcij preverite svoje uporabniške pravice 1C. Če želite preveriti uporabniške pravice, lahko uporabite naslednjo konstrukcijo v strežniškem modulu:

#If Server Potem
Postopek PerformWorkWithFile() Izvoz
RoleAdministrator = Metadata.Roles.Administrator;
Uporabnik = SessionParameters.CurrentUser;
Če User.Roles.Contains(RoleAdministrator) potem
//Tu se izvaja koda za delo z datotekami
endIf;
#EndIf

Ne pozabite preveriti parametrov, če uporabljate te postopke in funkcije, sicer obstaja nevarnost, da nenamerno ali zavestno povzročite nepopravljivo škodo aplikacijskemu strežniku 1C, na primer pri izvajanju naslednje kode na strežniku:

Pot = "C:\Dokumenti in nastavitve\Vsi uporabniki\Podatki aplikacije\1C\1Cv8\";
Premakni datoteko (Pot + "srvrib.lst", Pot + "Tu je, kam gre datoteka");

Po izvedbi takšne kode na strežniku, če ima uporabnik USER1CV8SERVER pravice, da jo spremeni, kot je opisano zgoraj, in po ponovnem zagonu strežniškega procesa (privzeto 3 minute po izstopu vseh uporabnikov), se bo pojavilo VELIKO vprašanje o zagonu strežnika . Možno pa je tudi popolnoma izbrisati datoteke ...

Vrste "XBase", "BinaryData", "XML Reader", "XML Writer", "XSL Transformation", "ZipFile Writer", "ZipFile Reader", "Text Reader", "Text Writer"
Kršitev pravic. Z izvajanjem na strežniku omogočajo dostop do lokalnih (in lociranih v omrežju) datotek določene vrste in branje/pisanje le-teh pod uporabniškimi pravicami USER1CV8SERVER. Ob zavestni uporabi je mogoče učinkovito izvajati naloge, kot so uvoz/izvoz podatkov na strežniku, beleženje delovanja določenih funkcij in reševanje administrativnih nalog. Na splošno priporočila sovpadajo s prejšnjim odstavkom, vendar morate razmisliti o možnosti prenosa podatkov iz teh datotek (ne pa predmetov vseh teh vrst) med odjemalcem in strežniškim delom.
Vnesite "Informacije o sistemu"
Kršitev pravic. Omogoča pridobivanje podatkov o aplikacijskem strežniku v primeru nepravilne uporabe in prenosa podatkov v odjemalski del aplikacije. Pri uporabi je priporočljivo omejiti pravico do uporabe.
Vrste "InternetConnection", "InternetMail", "InternetProxy", "HTTPConnection", "FTTPConnection"

Kršitev pravic. Ko se uporablja na strežniku, se poveže z oddaljenim računalnikom iz aplikacijskega strežnika pod pravicami USER1CV8SERVER. Priporočila:

  • Nadzor parametrov pri klicanju metod.
  • Nadzor uporabniških pravic 1C.
  • Resne omejitve pravic uporabnika USER1CV8SERVER za dostop do omrežja.
  • Pravilna nastavitev požarnega zidu na aplikacijskem strežniku 1C.

Ob pravilni uporabi je priročno organizirati na primer pošiljanje e-pošte s strežnika aplikacij.

Vrste "InformationBaseUserManager", "InformationBaseUser"

Kršitev pravic.Če se uporablja nepravilno (v privilegiranem modulu), je možno dodati uporabnike ali spremeniti avtorizacijske parametre obstoječih uporabnikov.

Oblika funkcije

Zrušitev strežnika. ja! Ta na videz neškodljiva funkcija, če njeni parametri niso nadzorovani in se ne izvajajo na strežniku, lahko povzroči zrušitev strežniške aplikacije. Napaka se pojavi pri oblikovanju števil in uporabi načina za prikaz začetnih ničel in velikega števila znakov, npr.

Oblika (1, "CHZ=999; CHVN=");

Upam, da bo ta napaka odpravljena v naslednjih izdajah platforme, medtem pa pri vseh klicih te funkcije, ki jih je mogoče izvesti na strežniku, preverite parametre klica.

Postopki in funkcije za shranjevanje vrednosti (ValueInRowInt, ValueInFile)
Zrušitev strežnika. Te funkcije ne obravnavajo krožnih referenc v zbirkah ali zelo globokega gnezdenja, zato se lahko v nekaterih zelo posebnih primerih zrušijo.

Napake v vrednostih meja in posebnih parametrov v funkcijah. Nadzor izvajanja.

Ena od težav, na katero lahko naletite pri uporabi strežnika, je velika "odgovornost" strežniških funkcij (možnost sesutja celotne strežniške aplikacije zaradi napake v eni povezavi in ​​uporaba enega "prostora virov" za vse povezave) . Zato je treba nadzorovati glavne parametre izvajalnega časa:

  • Za vgrajene jezikovne funkcije preverite njihove zagonske parametre (dober primer je funkcija »Oblika«)
  • Pri uporabi zank se prepričajte, da je pogoj za izhod iz zanke izpolnjen. Če je zanka potencialno neskončna, umetno omejite število ponovitev: MaximumIterationCounterValue = 1000000;
    Števec ponovitev = 1;
    adijo
    FunctionWhichMayNotReturnFalseValue()
    IN (Število ponovitev<МаксимальноеЗначениеСчетчикаИтераций) Цикл

    //.... Telo zanke
    Števec ponovitev = števec ponovitev + 1;
    EndCycle;
    Če števec ponovitev>Največja vrednost števca ponovitev Potem
    //.... obravnava dogodek predolge izvedbe zanke
    endIf;

  • Pri uporabi rekurzije omejite največjo raven gnezdenja.
  • Pri oblikovanju in izvajanju poizvedb poskusite preprečiti zelo dolge izbire in izbire velike količine informacij (na primer pri uporabi pogoja "V HIERARHIJI" ne uporabite prazne vrednosti)
  • Pri načrtovanju informacijske baze zagotovite dovolj veliko rezervo bitne globine za števila (sicer seštevanje in množenje postaneta nekomutativna in neasociativna, kar oteži odpravljanje napak)
  • V izvedljivih poizvedbah preverite logiko delovanja za prisotnost vrednosti NULL in pravilno delovanje pogojev poizvedbe in izrazov z uporabo NULL.
  • Pri uporabi zbirk nadzirajte zmožnost njihovega prenosa med aplikacijskim strežnikom in odjemalsko stranjo.

Uporaba terminalskega dostopa do strani odjemalca za omejitev dostopa

Pogosto lahko najdete priporočila za uporabo terminalskega dostopa za omejitev dostopa do podatkov in izboljšanje zmogljivosti z izvajanjem kode na strani odjemalca na terminalskem strežniku. Da, če je pravilno konfiguriran, lahko uporaba terminalskega dostopa res poveča splošno raven varnosti sistema, vendar se na žalost pogosto srečate z dejstvom, da se s praktično uporabo varnost sistema le zmanjša. Poskusimo ugotoviti, s čim je to povezano. Zdaj obstajata dva pogosta načina za organiziranje terminalskega dostopa, to sta Microsoft Terminal Services (protokol RDP) in Citrix Metaframe Server (protokol ICA). Na splošno orodja Citrix ponujajo veliko bolj prilagodljive možnosti upravljanja dostopa, vendar je cena teh rešitev veliko višja. Upoštevali bomo samo osnovne funkcije, skupne obema protokoloma, ki lahko zmanjšajo splošno raven varnosti. Pri uporabi terminalskega dostopa obstajajo le tri glavne nevarnosti:
  • Možnost blokiranja dela drugih uporabnikov z zasegom prevelikih količin virov
  • Dostop do podatkov drugih uporabnikov.
  • Nepooblaščeno kopiranje podatkov s terminalskega strežnika na uporabnikov računalnik

V vsakem primeru vam terminalske storitve omogočajo:

  • Povečanje zanesljivosti dela (če pride do okvare na terminalskem računalniku, lahko uporabnik naknadno nadaljuje delo z istega mesta)
  • Omejite dostop do odjemalske aplikacije in datotek, ki jih shranjuje.
  • Prenesite računalniško obremenitev z delovne postaje uporabnika na strežnik za terminalski dostop
  • Upravljajte sistemske nastavitve bolj centralizirano. Za uporabnike bodo shranjene nastavitve veljavne ne glede na to, s katerega računalnika so se prijavili v sistem.
  • V nekaterih primerih lahko za oddaljeni dostop do sistema uporabite terminalsko rešitev.

Potrebno je omejiti število možnih povezav na terminalski strežnik za enega uporabnika

Zaradi "požrešnosti" odjemalske aplikacije 1C glede virov je nujno omejiti največje število hkratnih povezav enega uporabnika (operaterja) s terminalskim strežnikom. Aktivno uporabljena povezava lahko uporablja do 300 MB pomnilnika s samo enim primerkom aplikacije. Poleg pomnilnika se aktivno uporablja procesorski čas, kar prav tako ne prispeva k stabilnosti uporabnikov tega strežnika. Hkrati s preprečevanjem prekomerne uporabe strežniških virov lahko taka omejitev prepreči uporabo sredstev nekoga drugega račun. Izvedeno s standardnimi nastavitvami terminalskega strežnika.

V eni povezavi ne smete dovoliti istočasnega izvajanja več kot ene ali dveh odjemalskih aplikacij 1C

Narekujejo isti razlogi kot v prejšnjem odstavku, a tehnično težje izvedljivo. Težava je v tem, da je skoraj nemogoče preprečiti ponovni zagon 1C z orodji terminalskega strežnika (zakaj, bo pojasnjeno v nadaljevanju), zato morate to funkcijo implementirati na ravni aplikacijske rešitve (kar tudi ni dobra rešitev, saj seje lahko nekaj časa ostanejo "viseče". Če je aplikacija nepravilno zaključena, je treba izboljšati rešitev aplikacije v modulu aplikacije in nekaterih referenčnih knjigah, kar bo otežilo uporabo posodobitev iz 1C). Zelo zaželeno je, da uporabniku pustimo možnost zagona 2 aplikacij, da bi lahko izvajal nekatera dejanja (na primer ustvarjanje poročil) v ozadju - odjemalska aplikacija je na žalost dejansko enonitna.

Ni priporočljivo dajati pravic dostopa do terminalskega strežnika uporabnikom, ki imajo pravico izvajati računalniške naloge, ki zahtevajo veliko virov v 1C, ali preprečiti tak zagon, medtem ko drugi uporabniki aktivno delajo.

Seveda je bolje, da dostop do terminalskega strežnika prepustite le uporabnikom, ki ne uporabljajo opravil, kot so podatkovno rudarjenje, geografski diagrami, uvoz/izvoz in drugih opravil, ki resno obremenjujejo odjemalski del aplikacije. Če je še vedno treba dovoliti tovrstna opravila, je potrebno: obvestiti uporabnika, da lahko ta opravila vplivajo na delovanje drugih uporabnikov, zabeležiti začetek in konec takega procesa v dnevnik, dovoliti izvajanje samo na reguliranem čas itd.

Zagotoviti je treba, da ima vsak uporabnik pravice pisanja le v strogo določene imenike na terminalskem strežniku in da drugi uporabniki do njih nimajo dostopa.

Prvič, če ne omejite možnosti pisanja v imenike v skupni rabi (kot je imenik, v katerem je nameščen 1C), lahko napadalec še vedno spremeni vedenje programa za vse uporabnike. Drugič, podatki enega uporabnika (začasne datoteke, datoteke za shranjevanje nastavitev poročil itd.) pod nobenim pogojem ne smejo biti dostopni drugemu uporabniku terminalskega strežnika - na splošno velja to pravilo pri normalni konfiguraciji. Tretjič, napadalec ima še vedno možnost "smeti" particijo, tako da na trdem disku ne ostane nič prostora. Vem, da mi bodo ugovarjali, da ima operacijski sistem Windows, začenši z Windows 2000, mehanizem kvot, vendar je to precej drag mehanizem in praktično nikoli nisem videl njegove prave uporabe.

Če so bila prejšnja vprašanja nastavitve dostopa na splošno precej enostavna za izvedbo, potem tako (na videz) preprosto opravilo, kot je urejanje uporabniškega dostopa do datotek, ni trivialno izvedeno. Prvič, če mehanizem kvote ni uporabljen, je mogoče shraniti velike datoteke. Drugič, sistem je zgrajen tako, da bo skoraj vedno mogoče datoteko shraniti tako, da bo na voljo drugemu uporabniku.

Glede na to, da je nalogo težko v celoti rešiti, je priporočljivo revidirati večino dogodkov v datoteki

Prepovedati je treba povezavo (preslikavo) diskovnih naprav, tiskalnikov in odložišča odjemalske delovne postaje.

V RDP in ICA je mogoče organizirati samodejno povezavo diskov, tiskalnikov, com portov odložišča terminalskega računalnika s strežnikom. Če ta priložnost obstaja, potem je skoraj nemogoče preprečiti zagon tuje kode na terminalskem strežniku in shranjevanje podatkov iz 1C na odjemalcu terminalskega dostopa. Dovolite te funkcije samo tistim s skrbniškimi pravicami.

Dostop do omrežnih datotek s terminalskega strežnika mora biti omejen.

Če tega ne stori, bo uporabnik spet lahko zagnal neželeno kodo ali shranil podatke. Ker običajni dnevnik ne sledi dogodkom v datotekah (mimogrede, dobra ideja za implementacijo s strani razvijalcev platforme) in je skoraj nemogoče nastaviti sistemsko revizijo v celotnem omrežju (ni dovolj sredstev za vzdrževanje), bolje je, da lahko uporabnik podatke pošlje v tisk ali po elektronski pošti. Posebno pozornost posvetite zagotovitvi, da terminalski strežnik ne deluje neposredno z izmenljivimi mediji uporabnikov.

V nobenem primeru ne pustite aplikacijskega strežnika na terminalskem strežniku, ko ustvarjate varen sistem.

Če se aplikacijski strežnik izvaja na istem računalniku kot odjemalske aplikacije, obstaja veliko možnosti za motnje njegovega običajnega delovanja. Če iz nekega razloga ni mogoče ločiti funkcij terminalskega strežnika in aplikacijskega strežnika, bodite posebno pozorni na uporabniški dostop do datotek, ki jih uporablja aplikacijski strežnik.

Na terminalskem strežniku je treba izključiti možnost izvajanja vseh aplikacij razen 1C:Enterprise.

To je ena najtežje uresničljivih želja. Začnimo z dejstvom, da morate pravilno konfigurirati politiko varnostne politike skupine v domeni. Vse skrbniške predloge in pravilniki o omejitvah programske opreme morajo biti pravilno konfigurirani. Če se želite preizkusiti, se prepričajte, da so blokirane vsaj naslednje funkcije:

Zapletenost izvajanja te zahteve pogosto vodi do možnosti zagona "dodatne" seje 1C na terminalskem strežniku (tudi če so druge aplikacije omejene, je načeloma nemogoče prepovedati zagon 1C z uporabo sistema Windows).

Upoštevajte omejitve običajnega dnevnika (vsi uporabniki uporabljajo program iz enega računalnika)

Očitno, ker uporabniki odprejo 1C v terminalskem načinu, bo terminalski strežnik zapisan v dnevniku. V dnevniku ni navedeno, iz katerega računalnika se je uporabnik povezal.

Terminalski strežnik – zaščita ali ranljivost?

Torej, po upoštevanju glavnih značilnosti terminala sever lahko rečemo, da lahko terminal sever potencialno pomaga pri avtomatizaciji za porazdelitev računalniške obremenitve, vendar je zgraditi varen sistem precej težko. Eden od primerov, ko je uporaba terminalskega strežnika najučinkovitejša, je zagon 1C brez Windows Explorerja v celozaslonskem načinu za uporabnike z omejeno funkcionalnostjo in specializiranim vmesnikom.

Delo naročnikovega dela

Uporaba Internet Explorerja (IE)

Eden od pogojev za normalno delovanje odjemalskega dela 1C je uporaba komponent internet Explorer. S temi komponentami morate biti zelo previdni.

Pozor! Prvič, če je modul vohunske ali oglaševalske programske opreme "pritrjen" na IE, se bo naložil, tudi če si ogledate katero koli datoteko HTML v 1C. Doslej nisem opazil nobene zavestne uporabe te funkcije, vendar sem v eni od organizacij videl naložen "vohunski" modul iz enega od pornografskih omrežij z delujočim 1C (protivirusni program ni bil posodobljen, simptomi so bili zaznani : pri nastavitvi požarnega zidu je bilo jasno, da se 1C poskuša prek vrat 80 povezati s pornografskim mestom). Pravzaprav je to še en argument v prid temu, da mora biti zaščita celovita

Pozor! Drugič, sistem 1C omogoča uporabo filmov Flash, objektov ActiveX, VBScript v prikazanih dokumentih HTML, pošiljanje podatkov v internet, celo odpiranje datotek PDF (!), čeprav v slednjem primeru vpraša "odpri ali shrani" ... Na splošno vse, kar vam srce poželi. Primer ne povsem razumne uporabe vgrajenih možnosti pregledovanja in urejanja HTML:

  • Ustvarite nov dokument HTML (Datoteka -> Novo -> Dokument HTML).
  • Pojdite na zavihek "Besedilo" praznega dokumenta.
  • Odstranite besedilo (v celoti).
  • Pojdite na zavihek "Pogled" tega dokumenta
  • S funkcijo povleci in spusti premakni datoteko s pripono SWF (to so filmske datoteke Flash) iz odprtega Raziskovalca v okno dokumenta, na primer iz predpomnilnika brskalnika, čeprav lahko za zabavo uporabiš tudi igračo FLASH.
  • Kako lepo! Na 1C lahko zaženete igračo!

Z vidika varnosti sistema je to popolnoma napačno. Doslej nisem zasledil posebnih napadov na 1C s to ranljivostjo, a najverjetneje bo to vprašanje časa in vrednosti vaših informacij.

Obstaja nekaj drugih manjših težav, ki se pojavijo pri delu s poljem dokumenta HTML, vendar sta glavni navedeni dve. Čeprav, če kreativno pristopite k tem funkcijam, lahko organizirate resnično neverjetne zmožnosti vmesnika za delo z 1C.

Uporaba zunanjih poročil in obdelava.

Pozor! Zunanja poročila in obdelave – na eni strani – priročen način uvedba dodatnih tiskanih obrazcev, regulatorna poročila, specializirana poročila, na drugi strani pa potencialni način za obhod številnih sistemskih varnostnih omejitev in motenj v delovanju aplikacijskega strežnika (za primer glej zgoraj v “Posredovanje parametrov”). V sistemu 1C obstaja poseben parameter v naboru pravic za vlogo "Interaktivno odpiranje zunanje obdelave", vendar to ne reši v celoti težave - za popolno rešitev je treba zožiti krog uporabnikov, ki lahko upravljajo zunanji tiskani obrazci, regulativna poročila in druge standardne zmogljivosti standardnih rešitev implementiranih z zunanjimi obdelavami. Na primer, privzeto v UPP imajo vse glavne uporabniške vloge možnost dela z imenikom dodatnih natisnjenih obrazcev, in to je pravzaprav možnost uporabe katere koli zunanje obdelave.

Uporaba standardnih mehanizmov za standardne rešitve in platforme (izmenjava podatkov)

Nekateri standardni mehanizmi so potencialno nevarni in na nepričakovane načine.

Tiskanje seznamov

Vsak seznam (na primer imenik ali informacijski register) v sistemu je mogoče natisniti ali shraniti v datoteko. Če želite to narediti, uporabite standardno funkcijo, ki je na voljo v kontekstnem meniju in meniju »Dejanja«:

Upoštevajte, da je skoraj vse, kar uporabnik vidi na seznamih, mogoče izpisati v zunanje datoteke. Edino, kar lahko svetujemo, je, da vodite dnevnik tiskanja dokumentov na tiskalnih strežnikih. Za posebno kritične obrazce je treba konfigurirati ploščo z dejanji, povezano z zaščitenim poljem tabele, tako da možnost prikaza seznama ni na voljo na tej plošči, in onemogočiti kontekstni meni (glejte sliko 6).

Izmenjava podatkov v porazdeljeni bazi podatkov

Oblika izmenjave podatkov je precej preprosta in je opisana v dokumentaciji. Če ima uporabnik možnost zamenjave več datotek, lahko nepooblaščeno spremeni sistem (čeprav je to precej delovno intenzivna naloga). Zmožnost ustvarjanja periferne baze podatkov pri uporabi načrtov izmenjave porazdeljene baze podatkov ne bi smela biti na voljo običajnim operaterjem.

Standardna izmenjava podatkov XML

Pri standardni izmenjavi podatkov, ki se uporablja za izmenjavo med standardnimi konfiguracijami (na primer »Trade Management« in »Enterprise Accounting«), je mogoče v pravilih izmenjave določiti obdelovalce dogodkov za nalaganje in razkladanje objektov. To se izvede s pridobivanjem upravljalnika iz datoteke in postopka “Run()” za standardno obdelavo nalaganja in odstranjevanja datoteke (procedura “Run()” se zažene na strani odjemalca). Očitno ni težko ustvariti takšne lažne izmenjave, ki bo izvajala zlonamerna dejanja. Za večino uporabniških vlog standardnih rešitev je skupna raba privzeto dovoljena.

Priporočilo: omejiti dostop do izmenjave XML za večino uporabnikov (prepustiti le skrbnikom za informacijsko varnost). Vodite dnevnike tekov te obdelave, shranite izmenjalno datoteko, na primer, jo pošljite po elektronski pošti skrbnika za informacijsko varnost pred prenosom.

Uporaba splošnih poročil, zlasti konzole za poročila

Druga težava je privzeti uporabniški dostop do splošnih poročil, zlasti do poročila Report Console. Za to poročilo je značilno, da vam omogoča, da izvedete skoraj vse zahteve za varnost informacij, in tudi če je sistem pravic 1C (vključno z RLS) konfiguriran precej strogo, uporabniku omogoča, da pridobi veliko "dodatnih" informacij. in prisili strežnik, da izvede zahtevo, ki bo porabila vse vire sistemov.

Uporaba celozaslonskega načina (namizni način)

Eden od učinkovitih načinov organiziranja specializiranih vmesnikov z omejenim dostopom do funkcionalnosti programa je celozaslonski način glavne (in po možnosti edine) oblike uporabljenega vmesnika. V tem primeru ni težav z dostopnostjo, na primer menija »Datoteka« in vsa dejanja uporabnika so omejena z zmožnostmi uporabljenega obrazca. Za več podrobnosti glejte "Funkcije izvajanja namiznega načina" na disku ITS.

Rezerva

Varnostno kopiranje za različico odjemalec-strežnik 1C je mogoče izvesti na dva načina: nalaganje podatkov v datoteko s pripono dt in ustvarjanje varnostnih kopij z uporabo SQL. Prva metoda ima številne pomanjkljivosti: potreben je izključni dostop, samo ustvarjanje kopije traja veliko dlje, v nekaterih primerih (če je kršena struktura informacijske varnosti) je ustvarjanje arhiva nemogoče, vendar obstaja ena prednost - najmanjša velikost arhiv. Za varnostno kopiranje SQL je ravno nasprotno: ustvarjanje kopije poteka v ozadju s pomočjo strežnika SQL, zaradi preproste strukture in pomanjkanja stiskanja – to je zelo hiter postopek in dokler je fizična celovitost SQL baza podatkov ni kršena, varnostno kopiranje se izvede, vendar velikost kopije sovpada z resnično velikostjo varnosti informacij v razširjenem stanju (stiskanje se ne izvaja). Zaradi dodatnih prednosti sistema za varnostno kopiranje MS SQL je bolj priporočljiva njegova uporaba (dovoljene so 3 vrste varnostnih kopij: polna, diferencialna, kopija dnevnika transakcij; možna je izdelava redno izvajanih opravil; varnostna kopija in varnostna kopija sistemi se hitro uvedejo, možno je predvideti velikost potrebnega diskovnega prostora itd.). Glavne točke organizacije varnostnega kopiranja z vidika varnosti sistema so:

  • Potreba po izbiri lokacije za shranjevanje varnostnih kopij, tako da niso dostopne uporabnikom.
  • Potreba po shranjevanju varnostnih kopij na fizični oddaljenosti od strežnika MS SQL (v primeru naravnih nesreč, požarov, napadov itd.)
  • Možnost podelitve pravic za zagon varnostnega kopiranja uporabniku, ki nima dostopa do varnostnih kopij.

Za več podrobnosti glejte dokumentacijo MS SQL.

Šifriranje podatkov

Za zaščito podatkov pred nepooblaščenim dostopom se pogosto uporabljajo različna kriptografska orodja (tako programska kot strojna), vendar je njihova izvedljivost v veliki meri odvisna od pravilne uporabe in celotne varnosti sistema. Ogledali si bomo šifriranje podatkov v različnih fazah prenosa in shranjevanja podatkov z najpogostejšimi sredstvi ter glavne napake pri načrtovanju sistema s kriptografskimi orodji.

Obstaja več glavnih stopenj obdelave informacij, ki jih je mogoče zaščititi:

  • Prenos podatkov med odjemalskim delom sistema in aplikacijskim strežnikom
  • Prenos podatkov med aplikacijskim strežnikom in MS SQL Server
  • Podatki shranjeni na MS SQL Server (podatkovne datoteke na fizičnem disku)
  • Šifriranje podatkov, shranjenih v informacijski varnosti
  • Zunanji podatki (v zvezi z informacijsko varnostjo)

Za podatke, shranjene na strani odjemalca in na aplikacijskem strežniku (shranjene uporabniške nastavitve, seznam informacijske varnosti itd.), je šifriranje upravičeno le v zelo redkih primerih in zato tukaj ni upoštevano. Pri uporabi kriptografskih orodij ne smemo pozabiti, da lahko njihova uporaba bistveno zmanjša delovanje sistema kot celote.

Splošne informacije o kriptografski zaščiti omrežnih povezav pri uporabi protokola TCP/IP.

Brez varnosti so vse omrežne povezave ranljive za nepooblaščen nadzor in dostop. Da jih zaščitite, lahko uporabite šifriranje podatkov na ravni omrežnega protokola. Za šifriranje podatkov, ki se prenašajo v lokalnem omrežju, se najpogosteje uporabljajo orodja IPSec, ki jih ponuja operacijski sistem.

Orodja IPSec zagotavljajo šifriranje prenesenih podatkov z uporabo algoritmov DES in 3DES ter preverjanje integritete z uporabo zgoščevalnih funkcij MD5 ali SHA1. IPSec lahko deluje v dveh načinih: transportni način in tunelski način. Način transporta je bolj primeren za zaščito povezav v lokalnem omrežju. Tunelski način se lahko uporablja za organiziranje povezav VPN med ločenimi segmenti omrežja ali zaščito oddaljene povezave z lokalnim omrežjem prek odprtih podatkovnih kanalov.

Glavne prednosti tega pristopa so:

  • Možnost centraliziranega upravljanja varnosti z uporabo orodij Active Directory.
  • Možnost izključitve nepooblaščenih povezav z aplikacijskim strežnikom in strežnikom MS SQL (možna je na primer zaščita pred nepooblaščenim dodajanjem informacijske varnosti na aplikacijskem strežniku).
  • Odprava "poslušanja" omrežnega prometa.
  • Obnašanja aplikacijskih programov (v tem primeru 1C) ni treba spreminjati.
  • Standardna narava takšne rešitve.

Vendar ima ta pristop omejitve in slabosti:

  • IPSec ne ščiti podatkov pred motnjami in prisluškovanjem neposredno na izvornem in ciljnem računalniku.
  • Količina prenesenih podatkov po omrežju je nekoliko večja kot brez uporabe IPSec.
  • Pri uporabi IPSec je obremenitev osrednjega procesorja nekoliko večja.

Podroben opis implementacije orodij IPSec presega obseg tega članka in zahteva razumevanje osnovnih principov delovanja protokola IP. Za pravilno konfiguracijo varnosti povezave preberite ustrezno dokumentacijo.

Ločeno je treba omeniti več vidikov licenčne pogodbe z 1C pri organizaciji povezav VPN. Dejstvo je, da je kljub odsotnosti tehničnih omejitev pri povezovanju več segmentov lokalnega omrežja ali oddaljenem dostopu posameznega računalnika v lokalno omrežje običajno potrebnih več osnovnih napajalnikov.

Šifriranje podatkov pri prenosu med odjemalskim delom sistema in aplikacijskim strežnikom.

Poleg šifriranja na nivoju omrežnega protokola je možno šifriranje podatkov na nivoju protokola COM+, kar je omenjeno v članku »Urejanje uporabniškega dostopa do informacijske baze v različici odjemalec-strežnik« ITS. Če ga želite implementirati, morate nastaviti raven avtentikacije za klice na "Packet Privacy" za aplikacijo 1CV8 v "Component Services". Ko je nastavljen na ta način, je paket overjen in šifriran, vključno s podatki ter identiteto in podpisom pošiljatelja.

Šifriranje podatkov pri prenosu med aplikacijskim strežnikom in MS SQL Server

MS SQL Server ponuja naslednja orodja za šifriranje podatkov:

  • Možna je uporaba Secure Sockets Layer (SSL) pri prenosu podatkov med aplikacijskim strežnikom in MS SQL Server.
  • Pri uporabi omrežne knjižnice Multiprotocol se šifriranje podatkov uporablja na ravni RPC. To je potencialno šibkejše šifriranje kot uporaba SSL.
  • Če je uporabljen protokol za izmenjavo skupnega pomnilnika (to se zgodi, če se aplikacijski strežnik in MS SQL Server nahajata na istem računalniku), se šifriranje v nobenem primeru ne uporablja.

Če želite ugotoviti potrebo po šifriranju vseh prenesenih podatkov za določen strežnik MS SQL, morate uporabiti pripomoček "Server Network Utility". Zaženite ga in na zavihku "Splošno" označite potrditveno polje "Vsilno šifriranje protokola". Metoda šifriranja je izbrana glede na tisto, ki jo uporablja odjemalska aplikacija (tj. aplikacijski strežnik 1C). Če želite uporabljati SSL, morate pravilno konfigurirati storitev potrdila v vašem omrežju.

Če želite nastaviti potrebo po šifriranju vseh prenesenih podatkov za določen aplikacijski strežnik, morate uporabiti pripomoček "Client Network Utility" (običajno se nahaja v "C:\WINNT\system32\cliconfg.exe"). Kot v prejšnjem primeru na zavihku »Splošno« potrdite potrditveno polje »Vsilno šifriranje protokola«.

Upoštevati je treba, da lahko uporaba šifriranja v tem primeru pomembno vpliva na delovanje sistema, zlasti pri uporabi poizvedb, ki vrnejo velike količine informacij.

Za popolnejšo zaščito povezave med aplikacijskim strežnikom in strežnikom MS SQL pri uporabi protokola TCP/IP lahko priporočamo več sprememb privzetih nastavitev.

Najprej lahko nastavite vrata, ki niso standardna (privzeto se uporabljajo vrata 1433). Če se odločite za uporabo nestandardnih vrat TCP za izmenjavo podatkov, upoštevajte naslednje:

  • Strežnik MS SQL in aplikacijski strežnik morata uporabljati ista vrata.
  • Pri uporabi požarnih zidov morajo biti ta vrata dovoljena.
  • Ne morete nastaviti vrat, ki jih lahko uporabljajo druge aplikacije na strežniku MS SQL. Za referenco lahko uporabite http://www.ise.edu/in-notes/iana/assignments/port-numbers (naslov je vzet iz SQL Server Books Online).
  • Ko uporabljate več primerkov storitve MS SQL Server, obvezno preberite dokumentacijo MS SQL za konfiguracijo (razdelek "Konfiguriranje omrežnih povezav").

Drugič, v nastavitvah protokola TCP/IP na strežniku MS SQL lahko nastavite zastavico "Skrij strežnik", ki prepoveduje odzive na zahteve za oddajanje za ta primerek storitve MS SQL Server.

Šifriranje podatkov MS SQL, shranjenih na disku

Obstaja dokaj velik izbor programske in strojne opreme za šifriranje podatkov, ki se nahajajo na lokalnem disku (to vključuje standardno možnost Windows za uporabo EFS, uporabo ključev eToken in programe tretjih oseb, kot sta Jetico Bestcrypt ali PGPDisk). Ena od glavnih nalog, ki jih opravljajo ta orodja, je zaščita podatkov v primeru izgube medija (na primer ob kraji strežnika). Posebej velja omeniti, da Microsoft ne priporoča shranjevanja baz podatkov MS SQL na šifrirane medije, kar je povsem upravičeno. Glavna težava v tem primeru je znaten padec produktivnosti in možne težave zanesljivost pred napakami. Drugi dejavnik, ki otežuje življenje skrbnika sistema, je potreba po zagotovitvi razpoložljivosti vseh datotek baze podatkov v trenutku, ko storitev MS SQL prvič dostopa do njih (tj. Zaželeno je, da so interaktivna dejanja izključena pri povezovanju šifriranega medija).

Da bi se izognili opaznemu padcu zmogljivosti sistema, lahko uporabite zmožnost MS SQL za ustvarjanje baz podatkov v več datotekah. Seveda v tem primeru baze podatkov MS SQL ne bi smel ustvariti strežnik 1C pri ustvarjanju informacijske baze, ampak jo je treba ustvariti ločeno. Spodaj je podan primer skripta TSQL s komentarji:

USE master
POJDI
-- Ustvari bazo podatkov SomeData,
USTVARITE PODATKOVNO BAZO SomeData
-- katerih podatki se v celoti nahajajo v datotečni skupini PRIMARY.
NA PRIMARJU
-- Glavna podatkovna datoteka se nahaja na šifriranem mediju (logični pogon E:)
-- in ima začetno velikost 100 MB, se lahko samodejno poveča na 200 MB z
-- v korakih po 20 MB
(IME = nekaj podatkov1,
IME DATOTEKE = "E:\SomeData1.mdf",
VELIKOST = 100MB,
MAXSIZE = 200,
RAST DATOTEKE = 2),
-- Druga podatkovna datoteka se nahaja na nešifriranem mediju (logični pogon C:)
-- in ima začetno velikost 100 MB, se lahko samodejno poveča do omejitve
-- prostor na disku v korakih po 5 % trenutne velikosti datoteke (zaokroženo na 64 KB)
(IME = NekajPodatkov2,
FILENAME = "c:\programske datoteke\microsoft sql server\mssql\data\SomeData2.ndf",
VELIKOST = 100MB,
MAXSIZE = NEOMEJENO,
RAST DATOTEKE = 5%)
PRIJAVI SE
-- Čeprav bi lahko dnevnik transakcij tudi razdelili na dele, tega ne bi smeli storiti,
-- Ker ta datoteka se spreminja veliko pogosteje in se redno čisti (na primer, ko
-- ustvarjanje varnostne kopije baze podatkov).
(NAME = SomeDatalog,
FILENAME = "c:\programske datoteke\microsoft sql server\mssql\data\SomeData.ldf",
VELIKOST = 10 MB,
MAXSIZE = NEOMEJENO,
RAST DATOTEKE = 10)
POJDI
-- Bolje je takoj dati lastništvo baze podatkov uporabniku, v imenu katerega
-- 1C se bo povezal. Da bi to naredili, moramo prijaviti trenutno bazo
- pravkar ustvarjen,
UPORABITE SomeData
POJDI
-- in izvedite sp_changedbowner
EXEC sp_changedbowner @loginame = "SomeData_dbowner"

Kratka digresija o samodejnem povečevanju velikosti podatkovne datoteke. Privzeto se velikosti datotek za nove baze podatkov povečujejo v korakih po 10 % trenutne velikosti datoteke. To je povsem sprejemljiva rešitev za majhne podatkovne baze, za velike pa ne preveč dobra: pri velikosti podatkovne baze na primer 20 GB bi se morala datoteka takoj povečati za 2 GB. Čeprav se bo ta dogodek zgodil precej redko, lahko traja več deset sekund (vse druge transakcije so v tem času dejansko v mirovanju), kar lahko, če se zgodi med aktivnim delom z bazo podatkov, povzroči nekaj napak. Druga negativna posledica sorazmernega povečanja, ki se pojavi, ko je prostor na disku skoraj popolnoma poln, je verjetnost prezgodnje okvare zaradi nezadostnega prostega prostora. Na primer, če je diskovna particija s kapaciteto 40 GB v celoti namenjena eni bazi podatkov (natančneje eni datoteki te baze podatkov), potem je kritična velikost datoteke baze podatkov, pri kateri je treba nujno (zelo nujno, do te mere, da prekine normalno delo uporabnikov) za reorganizacijo shranjevanja podatkov je podatkovna datoteka velikosti 35 GB. Z velikostjo prirastka, nastavljeno na 10–20 MB, lahko nadaljujete z delom, dokler ne dosežete 39 GB.

Zato, čeprav zgornji seznam določa povečanje velikosti ene od datotek baze podatkov v korakih po 5 %, je za velike velikosti baze podatkov bolje nastaviti fiksno povečanje 10–20 MB. Pri nastavljanju vrednosti prirastka za rast velikosti datoteke baze podatkov je treba upoštevati, da dokler ena od datotek v skupini datotek ne doseže največje velikosti, velja pravilo: datoteke v eni skupini datotek se povečujejo hkrati čas, ko so vse popolnoma zapolnjene. Ko torej v zgornjem primeru datoteka SomeData1.mdf doseže največjo velikost 200 MB, bo datoteka SomeData2.ndf velika približno 1,1 GB.

Po ustvarjanju takšne baze podatkov, tudi če njeni nezaščiteni datoteki SomeData2.ndf in SomeData.ldf postaneta dostopni napadalcu, bo zelo težko obnoviti pravo stanje baze podatkov - podatke (vključno z informacijami o logični strukturi baze podatkov). ) bodo razpršene po več datotekah, ključne informacije (o tem, na primer, katere datoteke sestavljajo to bazo podatkov) pa bodo v šifrirani datoteki.

Seveda, če se uporablja shranjevanje datotek baze podatkov s kriptografskimi sredstvi, potem varnostno kopiranje (vsaj teh datotek) ne bi smelo biti izvedeno na nešifriranem mediju. Za varnostno kopiranje posameznih datotek baze podatkov uporabite ustrezno sintakso ukaza BACKUP DATABASE. Upoštevajte, da čeprav je varnostno kopijo baze podatkov mogoče zaščititi z geslom (možnosti "PASSWORD = " in "MEDIAPASSWORD = " ukaza "BACKUP DATABASE"), takšna varnostna kopija ne postane šifrirana!

Šifriranje aplikacijskega strežnika in podatkov odjemalcev, shranjenih na diskih

V večini primerov se zaradi nerazumno visokih stroškov ne more šteti za upravičeno shranjevanje datotek, ki jih uporablja 1C:Enterprise (odjemalski del in aplikacijski strežnik), na šifrirane medije, vendar, če takšna potreba obstaja, upoštevajte, da aplikacijski strežnik in odjemalski del aplikacije zelo pogosto ustvarijo začasne datoteke. Pogosto lahko te datoteke ostanejo po tem, ko je aplikacija končana, in skoraj nemogoče je zagotoviti njihovo odstranitev z orodji 1C. Tako postane potrebno šifrirati imenik, ki se uporablja za začasne datoteke v 1C, ali ga ne shraniti na disk z uporabo pogona RAM (slednja možnost ni vedno mogoča zaradi velikosti ustvarjenih datotek in zahtev RAM-a 1C:Enterprise). sama aplikacija).

Šifriranje podatkov z vgrajenimi orodji 1C.

Standardne zmogljivosti za uporabo šifriranja v 1C se zmanjšajo na uporabo predmetov za delo z datotekami Zip s parametri šifriranja. Na voljo so naslednji načini šifriranja: algoritem AES s ključem 128, 192 ali 256 bitov in zastarel algoritem, ki je bil prvotno uporabljen v arhivarju Zip. Številni arhivatorji (WinRAR, 7zip) ne berejo datotek zip, šifriranih z AES. Če želite ustvariti datoteko, ki vsebuje šifrirane podatke, morate določiti geslo in algoritem šifriranja. Najenostavnejši primer funkcij šifriranja in dešifriranja, ki temeljijo na tej funkciji, je podan spodaj:

Funkcija EncryptData(podatki, geslo, način šifriranja = Nedefinirano) Izvoz

// Zapišite podatke v začasno datoteko. Pravzaprav vseh podatkov ni mogoče shraniti na ta način.
VrednostVDatoteki(ImeZačasneDatoteke, Podatki);

// Zapisovanje začasnih podatkov v arhiv
Zip = New ZipFileRecord(TemporaryArchiveFileName, Password, EncryptionMethod);
Zip.Add(TemporaryFileName);
Zip.Write();

// Branje podatkov iz prejetega arhiva v Oven
EncryptedData = NewValueStorage(NewBinaryData(ArchiveTemporaryFileName));

// Začasne datoteke - izbriši

Izvoz funkcije EndFunctions DecryptData(EncryptedData, Password).

// Pozor! Pravilnost posredovanih parametrov se ne spremlja

// Zapišite posredovano vrednost v datoteko
ArchiveTemporaryFileName = GetTemporaryFileName("zip");
BinaryArchiveData = EncryptedData.Get();
BinaryArchiveData.Write(ArchiveTemporaryFileName);

// Ekstrahirajte prvo datoteko pravkar zapisanega arhiva
ImeZačasneDatoteke = GetTemporaryFileName();
Zip = New ReadZipFile(TemporaryArchiveFileName, Password);
Zip.Extract(Zip.Items, TemporaryFileName, ZIPFilePathRecoveryMode.Do NotRecover);

// Preberi napisano datoteko
Podatki = ValueFromFile(TemporaryFileName + "\" + Zip.Items.Name);

//Izbriši začasne datoteke
DeleteFiles(TemporaryFileName);
DeleteFiles(ArchiveTemporaryFileName);

Povratni podatki;

EndFunction

Seveda te metode ne moremo imenovati idealne - podatki so zapisani v začasno mapo v čistem besedilu, zmogljivost metode, odkrito povedano, je slabša kot kdaj koli prej, shranjevanje v bazi podatkov zahteva izjemno veliko prostora, vendar to je edina metoda, ki temelji samo na vgrajenih mehanizmih platforme. Poleg tega ima prednost pred številnimi drugimi metodami - ta metoda hkrati pakira podatke skupaj s šifriranjem. Če želite implementirati šifriranje brez pomanjkljivosti, ki jih ima ta metoda, jih morate implementirati v zunanji komponenti ali pa se obrniti na obstoječe knjižnice z ustvarjanjem objektov COM, na primer z uporabo Microsoft CryptoAPI. Kot primer bomo navedli funkcije šifriranja/dešifriranja niza na podlagi prejetega gesla.

Funkcija EncryptStringDES(UnencryptedString, Password)

CAPICOM_ENCRYPTION_ALGORITHM_DES = 2; // Ta konstanta je iz CryptoAPI


EncryptionMechanism.Content = UnencryptedString;
Encryption Engine.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_DES;
EncryptedString = EncryptionMechanism.Encrypt();

vrni EncryptedString;

EndFunction // EncryptStringDES()

Funkcija DecryptStringDES(EncryptedString, Password)

//Pozor! Parametri niso preverjeni!

Encryption Engine = New COMObject("CAPICOM.EncryptedData");
EncryptionMechanism.SetSecret(Password);
Poskus
EncryptionMechanism.Decrypt(EncryptedString);
Izjema
// Napačno geslo!;
Vrni Nedefinirano;
EndAttempt;

ReturnEncryptionMechanism.Content;

EndFunction // DecryptStringDES()

Upoštevajte, da pri prenosu prazna vrednost vnos niza ali gesla v te funkcije bo ustvaril sporočilo o napaki. Niz, pridobljen s tem postopkom šifriranja, je nekoliko daljši od izvirnika. Posebnost tega šifriranja je, da če dvakrat šifrirate niz, dobljeni nizi NE bodo enaki.

Osnovne napake pri uporabi kriptografskih orodij.

Pri uporabi kriptografskih orodij se pogosto delajo iste napake:

Podcenjevanje slabše zmogljivosti pri uporabi kriptografije.

Kriptografija je naloga, ki zahteva precej veliko število izračunov (predvsem za algoritme, kot so DES, 3DES, GOST, PGP). In tudi pri uporabi visoko zmogljivih in optimiziranih algoritmov (RC5, RC6, AES) ni ubežati nepotrebnemu prenosu podatkov v pomnilniku in računalniški obdelavi. In to skoraj izniči zmogljivosti številnih strežniških komponent (matrike RAID, omrežni adapterji). Pri uporabi šifriranja strojne opreme ali izpeljave šifrirnega ključa iz strojne opreme obstaja dodatno možno ozko grlo pri delovanju: hitrost prenosa podatkov med dodatno napravo in pomnilnikom (kjer zmogljivost takšne naprave morda ni kritična). Pri uporabi šifriranja majhnih količin podatkov (na primer e-poštno sporočilo) povečanje računalniške obremenitve sistema ni tako opazno, v primeru popolnega šifriranja vsega pa lahko to močno vpliva na delovanje sistema. kot celota.

Podcenjevanje sodobnih zmožnosti izbire gesel in ključev.

Trenutno so zmožnosti tehnologije takšne, da lahko ključ dolžine 40-48 bitov izbere majhna organizacija, ključ dolžine 56-64 bitov pa velika organizacija. Tisti. uporabiti je treba algoritme, ki uporabljajo vsaj 96- ali 128-bitni ključ. Toda večina ključev se ustvari z algoritmi zgoščevanja (SHA-1 itd.) na podlagi gesel, ki jih vnese uporabnik. V tem primeru ključ z dolžino 1024 bitov morda ne bo pomagal. Prvič, pogosto se uporablja geslo, ki ga je enostavno uganiti. Dejavniki, ki olajšajo izbiro, so: uporaba samo ene velike črke; uporaba besed, imen in izrazov v geslih; uporaba znanih datumov, rojstnih dni itd.; uporaba "vzorcev" pri generiranju gesel (na primer 3 črke, nato 2 številki, nato 3 črke v celotni organizaciji). Dobro geslo mora biti dokaj naključno zaporedje velikih črk, številk in ločil. Gesla, vnesena s tipkovnico, dolga do 7-8 znakov, je tudi ob upoštevanju teh pravil mogoče uganiti v razumnem času, zato je bolje, da je geslo dolgo vsaj 11-13 znakov. Idealna rešitev je izogibanje generiranju ključa z geslom, na primer z uporabo različnih pametnih kartic ipd., vendar je v tem primeru treba predvideti možnost zaščite pred izgubo nosilca šifrirnega ključa.

Nevarno shranjevanje ključev in gesel.

Pogosti primeri te napake so:

  • dolga in zapletena gesla, zapisana na samolepilnih lističih, prilepljenih na uporabnikov monitor.
  • shranjevanje vseh gesel v datoteko, ki ni zaščitena (ali je zaščitena veliko šibkeje kot sam sistem)
  • shranjevanje elektronskih ključev v javni domeni.
  • pogosto prenašanje elektronskih ključev med uporabniki.

Zakaj delati blindirana vrata, če je ključ do njih pod predpražnikom?

Prenos prvotno šifriranih podatkov v nevarno okolje.

Ko postavljate varnostni sistem, se prepričajte, da opravlja svoje delo. Na primer, naletel sem na situacijo (ki ni povezana z 1C), ko je bila prvotno šifrirana datoteka, ko je program deloval v čisti obliki, postavljena v začasno mapo, od koder jo je bilo mogoče varno prebrati. Pogosto se varnostne kopije šifriranih podatkov v čisti obliki nahajajo nekje »nedaleč« od teh podatkov.

Uporaba kriptografskih orodij za druge namene

S šifriranjem podatkov med prenosom ne morete pričakovati, da bodo podatki nedostopni tam, kjer se uporabljajo. Storitve IPSec na primer nikakor ne preprečujejo aplikacijskemu strežniku, da "voha" omrežni promet na ravni aplikacije.

Da bi se torej izognili napakam pri izvajanju kriptografskih sistemov, morate (vsaj) narediti naslednje, preden ga uvedete.

  • Ugotovite:
    • Kaj je treba zaščititi?
    • Katero metodo zaščite uporabiti?
    • Katere dele sistema je treba zavarovati?
    • Kdo bo nadzoroval dostop?
    • Ali bo šifriranje delovalo na vseh pravih področjih?
  • Določite, kje so informacije shranjene, kako bodo poslane po omrežju in računalnike, iz katerih se bo do informacij dostopalo. To bo zagotovilo informacije o hitrosti omrežja, zmogljivosti in uporabi pred implementacijo sistema, kar je uporabno za optimizacijo delovanja.
  • Ocenite ranljivost sistema za različne vrste napadov.
  • Razvijte in dokumentirajte varnostni načrt sistema.
  • Ocenite ekonomsko učinkovitost (upravičenost) uporabe sistema.

Zaključek

Seveda je v hitrem pregledu nemogoče navesti vse vidike, povezane z varnostjo v 1C, vendar si dovolimo narediti nekaj predhodnih zaključkov. Seveda te platforme ne moremo imenovati idealne - tako kot mnoge druge ima svoje težave pri organizaciji varnega sistema. A to nikakor ne pomeni, da se tem problemom ne da izogniti, nasprotno, skoraj vse pomanjkljivosti je mogoče odpraviti s pravilnim razvojem, implementacijo in uporabo sistema. Največ težav nastane zaradi nezadostne razvitosti posamezne aplikativne rešitve in njenega izvajalnega okolja. Na primer, standardne rešitve brez bistvenih sprememb preprosto ne pomenijo ustvarjanja dovolj varnega sistema.

Ta članek ponovno dokazuje, da mora vsak nabor varnostnih ukrepov zajemati vse faze izvajanja: razvoj, uvajanje, sistemsko upravljanje in seveda organizacijske ukrepe. V informacijskih sistemih je »človeški dejavnik« (vključno z uporabniki) glavna varnostna grožnja. Ta nabor ukrepov mora biti razumen in uravnotežen: ni smiseln in ni verjetno, da bo za organizacijo varovanja, ki presega stroške samih podatkov, namenjenih dovolj sredstev.

Podjetje je edinstvena storitev za kupce, razvijalce, trgovce in pridružene partnerje. Poleg tega je to ena najboljših spletnih trgovin s programsko opremo v Rusiji, Ukrajini in Kazahstanu, ki strankam ponuja široko paleto izdelkov, številne načine plačila, hitro (pogosto takojšnjo) obdelavo naročil in spremljanje postopka naročila v osebnem razdelku .