1c ugrađeni jezični stek overflow. Stack Overflow

  • 10.01.2022

14.04.2016 Verzija 3.22 Promijenjen interfejs, ispravljene greške pri prenosu registara, promenjen redosled prenosa organizacije i računovodstvene politike. Platforma 8.3.7.2027 BP 3.0.43.174
17.03.2016. Verzija 3.24 Ispravljene greške. Platforma 8.3.8.1747 BP 3.0.43.241
16.06.2016. Verzija 3.26 Ispravljene greške. Platforma 8.3.8.2088 BP 3.0.44.123
16.10.2016. Verzija 4.0.1.2 Popravljen prijenos skladišta vrijednosti, promijenjen prijenos računovodstvene politike za izdanja 3.44.*. Platforma 8.3.9.1818 BP 3.0.44.164.
19.04.2017 Verzija 4.0.2.7 Promijenjen algoritam za prijenos registara povezanih sa direktorijima, ispravljene greške, ispravljen prijenos sa prepisivanjem linkova.
29.05.2017 Verzija 4.0.4.5 Promijenjen prijenos kretanja, dodat pregled kretanja prenesenih dokumenata, nešto drugo....
30.05.2017 Verzija 4.0.4.6 Ispravljena greška prilikom popunjavanja liste direktorijuma koji postoje u izvoru (hvala shoy)
17.06.2017 Verzija 4.0.5.1 Promijenjen algoritam prijenosa pokreta.
19.07.2017. Verzija 4.0.5.4 Promijenjen prijenos CI sa BP 2.0. Neočekivano, došlo je do prijenosa sa Smilegm UT 10.3, u ovoj verziji prijenos je malo ispravljen za ovu situaciju)))
08/10/2017 Verzija 4.0.5.5 Ispravljene greške prilikom migracije sa BP 2.0
19.09.2017. Verzija 4.4.5.7 Provjera fiksne veze za 3.0.52.*
28.11.2017. Verzija 4.4.5.9 Ispravljene greške
12/06/2017 Verzija 5.2.0.4 Algoritam za traženje linkova je redizajniran. Dodane su procedure prijenosa iz BP 1.6, nema više rigidnog vezivanja za BP - možete ga sigurno koristiti za prijenos podataka "skoro" identičnih konfiguracija. Pokušaću da ispravim sve komentare što je pre moguće.
12/08/2017 Verzija 5.2.1.3 Dodan algoritam za prijenos obračuna platnog spiska sa BP.2.0 na BP 3.0. Uključene promjene za dijeljenje između istih konfiguracija.
19.12.2017 Verzija 5.2.2.2 Ispravljen prenos nezavisnih registara informacija za referentne knjige koje su u dimenzijama ovih registara.

12/06/2017 Nova verzija obrade 5.2.0.4. Od značajnih promjena je mogućnost prelaska sa BP 1.6 na BP 3.0. Glavna promjena je upravljanje pretragom za linkove direktorija - u prethodnim verzijama pretraga je bila po GUID-u, au ovoj verziji možete omogućiti pretragu "Po detaljima":

17.01.2018 Verzija 5.2.2.3 Ispravljeno - uočene greške u podređenim imenicima i registrima periodičnih informacija.

19.07.2018 Verzija 5.2.2.8 Ispravljene greške.

gdje možete postaviti detalje pretraživanja za bilo koji direktorij. Sam ovaj mod je „nastao“ na brojne zahtjeve radnika, za slučaj kada je potrebna razmjena u već postojećoj bazi podataka u kojoj već postoje podaci (npr. za spajanje računovodstva za dvije organizacije u jednu bazu podataka).

21.12.2015. Objavljene su platforma 8.3.7.1805 i BP 3.0.43.29, kao i nova verzija za obradu 3.1 :-) (opis ispod). Nova funkcionalnost - mogućnost poređenja stanja i prometa između dvije baze podataka BP (za sve račune, ako se kontni planovi poklapaju, ili za pojedinačne računske račune koji se podudaraju, sa ili bez analitike).
01/03/2016 Verzija 3.5 - mehanizam za povezivanje sa izvornom bazom podataka je promenjen - usklađena sa BSP 2.3.2.43. Ispravljene manje greške. Platforma 8.3.7.1845, BP 3.0.43.50
16.02.2016. Verzija 3.6 - Dodata oznaka "Postavi ručnu korekciju" za dokumente koji se prenose pokretima. Prenos kretanja fiksno - dokumenti sa datumom manjim od početka perioda prenose se bez kretanja. Platforma 8.3.7.1917, BP 3.0.43.116
22.03.2016. Verzija 3.10 - Dodata zastavica "Uvijek prepiši veze" za obavezno ponovno upisivanje referentnih objekata (brzina prijenosa je značajno smanjena, ali ponekad neophodna). Dodata je kartica "Priprema" u kojoj možete podesiti korespondenciju između izvornog i odredišnog kontnog plana (na istom nivou kao kod konta) i prenosa konstanti. Platforma 8.3.7.1970, BP 3.0.43.148

03.04.2016 Verzija 3.11 Promijenjeno popunjavanje liste dokumenata koja postoji u izvoru: popunjavana je prema kretanju po kontnom planu, jednostavno putem linkova za period, kao na //site/public/ 509628/

Obrada je dizajnirana za prijenos podataka za bilo koji period sličan "Upload MXL upload-u" sa ITS-om, ali bez upotrebe XML, JSON, itd međufajlova - razmjena iz baze podataka u bazu podataka preko COM-a. U verzijama starijim od 3.10 koristi se veza prema algoritmu iz BSP-a koji omogućava registraciju comcntr.dll (ako to OS "dozvoli"), kao i razne poruke kada je nemoguće uspostaviti vezu , na primjer - "Infobaza je u procesu ažuriranja" itd. . Dodata potvrda izbora prijemnika kao izvora informacione sigurnosti - izdaje se upozorenje.

Može se koristiti za:

1. Prijenos regulatornih i referentnih informacija (RMI) od izvora IS do IS prijemnika (prijenos cjelokupnog RMI se vrši na zahtjev korisnika, potrebni imenici itd. se prenose putem linkova prilikom svakog prijenosa).

2. Prijenos dokumenata za bilo koji odabrani period.

3. Prijenos svih informacija iz "pokvarenog" IB-a ako je pokrenut u 1C:Enterprise modu, a učitavanje podataka ili pokretanje konfiguratora nije moguće.

Mogućnost obrade - IS prijemnika i izvora mogu biti različiti prijenos od 2.0 do 3.0 - izdanja su različita, ali prijenos radi !!! Neusklađeni atributi se zanemaruju ili se za njih moraju specificirati algoritmi prijenosa.

komentar: Konverzija podataka se NE KORISTI! I ne pitajte zašto!!! Za one koji su posebno korozivni - BP 3.0 se mijenja skoro svaki dan, nema snage da se pravila prenosa ažuriraju - ovdje je sve jednostavnije :-).

Još jedna karakteristika obrade je da se pokreće u IS prijemnika (analozi najbliži po funkcionalnosti rade obrnuto - od izvora do prijemnika).

Početak - morate navesti period obrade, navesti organizaciju iz izvora, ona će biti prebačena na odredište.

Prilikom prenosa organizacije prenosi se računovodstvena politika i "prateći" registri informacija. Stoga, kada prvi put odaberete organizaciju u izvoru, proći će neko vrijeme prije nego što se pojavi u prijemniku.

Planovi naloga izvora i primaoca moraju biti isti, ne postoje različiti računi u verzijama 2. * se prenose na prijemnik, planirano je da se u budućnosti uključi postavka za podudaranje naloga i analitike. Računi se prenose kodovima koji se ne nalaze u prijemniku. NISU KREIRANI!!!

Ostali objekti se prenose internim identifikatorima (GUID), pa treba obratiti pažnju na neke ključne reference, na primjer - Valute.

Ako planirate razmjenu sa "čistom" bazom podataka, onda je bolje da obrišete direktorije popunjene pri prvom pokretanju prije razmjene. U tu svrhu je u obradi predviđena stranica na kojoj možete dobiti ove elemente direktorija i obrisati ih. U najmanju ruku, morate ukloniti valutu "rub". - jer dupliranje je gotovo neizbježno (u principu, to se lako ispravlja nakon razmjene pretraživanja i zamjene duplikata ugrađenih u BP 3.0).

Obrada omogućava pozivanje stranice za brisanje imenika, sa otvorenim početnim formularom za popunjavanje:

Kada se obrada otvori, prikazaće se stranica za brisanje imenika popunjenih prilikom početnog popunjavanja:

Od verzije 3.22, sučelje je promijenjeno, sada su sve pripremne operacije označene i uvijek dostupne


Važno je provjeriti korespondenciju kontnog plana izvora i primaoca i obavezno naznačiti korespondenciju računa.

Ne morate brisati unaprijed definirane elemente direktorija - oni se prenose pomoću konfiguracijskih identifikatora (ne GUID).

Možete odabrati objekte za prijenos pomoću obrasca za izbor iz imenika i dokumenata (informacijski registri povezani sa ovim objektom će se automatski prenijeti, tako da ih ne morate posebno birati).Prijenos registara je privremeno onemogućen - potrebno je izraditi listu registara za prijenos - nešto treba prenijeti, nešto ne, u ovoj fazi je dovoljno da se prenese u referentne knjige, lista registara za prijenos će biti u šablonu, u budućim verzijama.

Prilikom razmjene sa 2.0, neki od detalja (npr. Kontakt informacije) se prenosi prema algoritmu ugrađenom u obradu, jer za 2.0 i 3.0 pohranjuju se drugačije. Slična je situacija i sa brojnim dokumentima (na primjer, ispravak duga).

Spisak tipova objekata se može drugačije popunjavati u verziji 3.22, nalazi se u podmeniju, promene su prikazane na slici:

Postoji pojednostavljenje upotrebe obrade - ne možete odabrati direktorije za razmjenu, već jednostavno popunite listu tipova u prijemniku samo onim tipovima direktorija koji imaju barem jedan unos u izvoru.

U obradu je ugrađen raspored koji navodi direktorije koje nije potrebno prenijeti od izvora do odredišta (izgled "Isključi iz prijenosa"). Možete dodati (ukloniti) bilo koji direktorij ovom izgledu. Ukoliko ne treba da prenosite ceo NSI, dovoljno je preneti dokumente, možete dobiti i listu kojih bez biranja vrsta, samo popunite sve izvorne dokumente za koje postoje transakcije.

Prenos dokumenata sa kretanjima je obezbeđen, za razmjene 3.0 do 3.0 i prema kontnim planovima radi jedan na jedan, pri razmjeni 2.0 do 3.0 moguće su greške, stoga je preporučljivo prenijeti dokumente bez kretanja, a zatim ih jednostavno ponovo poslati u prijemnik. Prilikom prijenosa dokumenata s pokretima postavlja se zastavica "Ručno podešavanje".

Atribut "Postavljeno" se postavlja u dokumentima primaoca isto kao i u izvoru, ali će se kretanja (ako nisu prenijeti) pojaviti tek nakon što se dokumenti knjiže, na primjer, korištenjem paketnog knjiženja dokumenata ugrađenog u BP 3.0 (preporučena opcija), ili iz ove obrade (dugme "Pošalji dokumente" je ovdje).

Ukoliko je obrada planirana za trajnu razmjenu, može se registrovati u IB primaoca (dugme "Registriraj se"). Za "jednokratne" prijenose, možete ga jednostavno koristiti kroz File - Open.

21.12.2015. - Verzija 3.1 platforma 8.3.7.1805 i BP 3.0.43.29 (verzija 2.15 za 3.0.43.* ne radi - konfiguracija se dosta promijenila).

Promijenjeno:

Dijalog za izbor opcije povezivanja, zastavica Klijent-Server je uvijek dostupna, ovisno o njenoj postavci, dostupan je ili izbor foldera baze datoteka ili polja sa imenom baze podataka na serveru i imenom sam server (ispravljena greška u dijalogu verzija 2.15)

- NOVA FUNKCIONALNOST: Mehanizam za usaglašavanje stanja i prometa između izvorne i prijemne baze podataka u različitom stepenu detalja:


Mislim da je izbor opcija pomirenja jasan sa slike:


Postoje razlike u upotrebi kod tankog i debelog klijenta - u debelom klijentu se odmah prikazuje prozor za poređenje datoteka:


U tankom klijentu nisam perverzirao programskim pritiskom na dugme, predlažem jednostavnu opciju za prikaz prozora za poređenje:


Poređenje u tankom klijentu, IMHO, je zgodnije, jer. ima navigacijske tipke za razlike, što je pogodnije za velike količine tabela nego pomicanje mišem:

22.03.2016. Verzija 3.10 - Dodata zastavica "Uvijek prepiši veze" za obavezno ponovno upisivanje referentnih objekata (brzina prijenosa je značajno smanjena, ali ponekad neophodna). Dodata je kartica "Priprema" u kojoj možete podesiti korespondenciju između izvornog i odredišnog kontnog plana (na istom nivou kao kod konta) i prenosa konstanti. Platforma 8.3.7.1970, BP 3.0.43.148

- NOVA FUNKCIONALNOST: Pre prenosa dokumenata, preporučljivo je proveriti kontni plan za korespondenciju u izvoru i destinaciji, kao i korespondenciju zadatih konstanti.

Da biste to učinili, dodana je kartica "Priprema" u kojoj možete postaviti ove korespondencije:


Algoritam za popunjavanje tabele korespondencije računa je jednostavan - analiziraju se prometi koji postoje u izvoru, a svaki račun koji se tamo nađe traži se podudaranje po kodu u prijemniku, ako nije pronađeno, red sa računom kod je prikazan u tabeli, po kojoj treba da izaberete račun primaoca, koristiće se prilikom prenosa. Pook podudarnost se uspostavlja na nivou koda.

Za provjeru i prijenos korespondencije postavljenih konstanti koristi se odgovarajuća tabela:

Popunjavamo, po potrebi - prenosimo. Migriraju se samo označene konstante...

Programski stog je posebna memorijska oblast organizovana prema LIFO (Last in, first out) principu reda čekanja. Naziv "slagač" je proizašao iz analogije njegovog principa konstrukcije sa hrpom ploča - možete staviti ploče jednu na drugu (metoda dodavanja u hrpu, "guranje", "guranje"), a zatim ih birati gore, počevši od vrha (metoda dobijanja vrijednosti iz steka, "popping", "pop"). Programski stog se takođe naziva stek poziva, stek za izvršavanje, stog mašina (ne treba ga brkati sa "stekom" - apstraktnom strukturom podataka).

Čemu služi stek? Omogućava vam da jednostavno organizirate poziv potprograma. Kada se pozove, funkcija prima neke argumente; također mora negdje pohraniti svoje lokalne varijable. Osim toga, moramo uzeti u obzir da jedna funkcija može pozvati drugu funkciju, koja također treba proći parametre i pohraniti vlastite varijable. Koristeći stek, prilikom prosljeđivanja parametara, samo ih trebate staviti na stek, a zatim ih pozvana funkcija može "pop" odatle i koristiti. Lokalne varijable se također mogu pohraniti tamo - na početku svog koda, funkcija dodjeljuje dio memorije steka, a kada se kontrola vrati, briše je i oslobađa. Programeri na jezicima visokog nivoa obično ne razmišljaju o takvim stvarima - kompajler generiše sav potreban rutinski kod za njih.

Posljedice greške

Sada smo se približili problemu. U svom apstraktnom obliku, stek je beskonačno skladište u koje se novi elementi mogu dodavati neograničeno. Nažalost, sve je konačno u našem svijetu - i memorija steka nije izuzetak. Šta se događa ako se završi kada se argumenti funkcije gurnu u stog? Ili funkcija dodjeljuje memoriju za svoje varijable?

Doći će do greške koja se zove prelijevanje steka. Budući da je stog neophodan za organiziranje poziva korisnički definiranih funkcija (a gotovo svi programi na modernim jezicima, uključujući i objektno orijentirane, na ovaj ili onaj način izgrađeni su na bazi funkcija), više se ne mogu pozvati. Dakle, operativni sistem preuzima kontrolu, briše stek i prekida program. Ovdje možete naglasiti razliku između i prekoračenja steka - u prvom slučaju dolazi do greške prilikom pristupa pogrešnom memorijskom području, a ako nema zaštite u ovoj fazi, ona se u ovom trenutku ne manifestira - ako su okolnosti uspješne , program može normalno raditi. Ako je zaštićena samo memorija kojoj se pristupa, . U slučaju steka, program će se sigurno prekinuti.

Da budemo potpuno precizni, treba napomenuti da je takav opis događaja istinit samo za kompajlere koji kompajliraju u "nativni" (native) kod. U upravljanim jezicima, virtuelna mašina ima sopstveni stog za upravljane programe, koji je mnogo lakše pratiti, a možete čak i priuštiti da izbacite izuzetak u program kada dođe do prekoračenja. U jezicima C i C++ ne može se računati na takav "luksuz".

Razlozi za grešku

Šta može dovesti do ovako neprijatne situacije? Na osnovu gore opisanog mehanizma, jedna od opcija je previše ugniježđenih poziva funkcija. Ovaj scenario je posebno verovatan kada se koristi rekurzija. Beskonačna rekurzija (u nedostatku mehanizma lijene evaluacije) se prekida na ovaj način, za razliku od , koji ponekad ima korisnu upotrebu. Međutim, s malom količinom memorije dodijeljene za stog (što je, na primjer, tipično za mikrokontrolere), jednostavan niz poziva može biti dovoljan.

Druga opcija su lokalne varijable, koje zahtijevaju puno memorije. Pokretanje lokalnog niza od milion elemenata, ili milion lokalnih varijabli (nikad ne znate šta se dešava) nije najbolja ideja. Čak i jedan poziv takve "pohlepne" funkcije može lako uzrokovati prelijevanje steka. Da biste dobili velike količine podataka, bolje je koristiti mehanizme dinamičke memorije, koji će vam omogućiti da obradite grešku njenog nedostatka.

Međutim, dinamička memorija je dosta spora u smislu alokacije i oslobađanja (jer se operativni sistem brine o njoj), osim toga, uz direktan pristup, morate je ručno dodijeliti i osloboditi. Memorija na steku se dodeljuje veoma brzo (u stvari, potrebno je da promenite samo vrednost jednog registra), osim toga, destruktori se automatski pozivaju za objekte dodeljene steku kada se funkcija vrati i stek se obriše. Naravno, odmah postoji želja da se memorija dobije iz steka. Stoga, treći način prelivanja je samododjela memorije na steku od strane programera. C biblioteka pruža funkciju alloca posebno za ovu svrhu. Zanimljivo je primijetiti da ako malloc funkcija za dodjelu dinamičke memorije ima svog "blizanca" za oslobađanje, onda ga funkcija aloka nema - memorija se automatski oslobađa nakon što funkcija vrati kontrolu. Možda to samo komplikuje situaciju - uostalom, prije nego što funkcija izađe, neće biti moguće osloboditi memoriju. Iako prema man stranici "funkcija alloca zavisi od mašine i kompajlera; njena implementacija je problematična i ima grešaka na mnogim sistemima; njena upotreba je vrlo neozbiljna i mrštena" - i dalje se koristi.

Primjeri

Kao primjer, uzmite u obzir kod za rekurzivno pretraživanje datoteka koji se nalazi na MSDN-u:

Void DirSearch(String* sDir) ( pokušajte ( // Pronađite podmape u folderu koji je proslijeđen. 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->tekst); int numFiles = f->get_Length(); za (int j=0; j< numFiles; j++) { listBox1->Stavke->Dodaj(f[j]); ) DirSearch(d[i]); ) ) catch (System::Exception* e) ( MessageBox::Show(e->Message); ) )

Ova funkcija dobiva listu datoteka u navedenom direktoriju, a zatim poziva sebe za one elemente liste za koje se pokazalo da su direktoriji. Shodno tome, za dovoljno duboko drvo sistem podataka, dobijamo tačan rezultat.

Primjer drugog pristupa, preuzet iz pitanja "Zašto dolazi do prelijevanja steka?" sa stranice pod nazivom Stack Overflow (stranica je zbirka pitanja i odgovora o bilo kojoj temi programiranja, a ne samo Stack Overflow, kako se može činiti):

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

Kao što vidite, u glavnoj funkciji, memorija se dodjeljuje na steku za nizove tipova int i float od po milion elemenata, što ukupno daje nešto manje od 8 megabajta. Uzimajući u obzir da Visual C++ podrazumevano rezerviše samo 1 megabajt za stog, odgovor postaje očigledan.

A evo primjera preuzetog iz GitHub repozitorija projekta Lightspark Flash Player:

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

Nadamo se da h.getLength()-7 nije prevelik, tako da se sljedeći red ne prelije. Ali da li je vrijeme ušteđeno na dodjeli memorije vrijedno "potencijalnog" pada programa?

Ishod

Stack overflow je fatalna greška koju najčešće trpe programi koji sadrže rekurzivne funkcije. Međutim, čak i ako program ne sadrži takve funkcije, prelivanje je i dalje moguće zbog velikog volumena lokalnih varijabli ili greške u ručnoj dodjeli memorije na stogu. Sva klasična pravila ostaju na snazi: ako postoji izbor, bolje je preferirati iteraciju umjesto rekurzije, a također ne raditi ručni rad umjesto kompajlera.

Bibliografska lista

  • E. Tanenbaum. Arhitektura računara.
  • Wikipedia. stek overflow.
  • stek overflow. stack overflow C++.

Stog je, u ovom kontekstu, posljednji u prvom baferu koji dodijelite tokom izvršavanja vašeg programa. Last, First (LIFO) znači da je posljednja stvar koju stavite uvijek prva stvar koju vratite - ako gurnete 2 stavke na hrpu, "A", a zatim "B", tada bi prva stvar koju iskočite iz hrpe bila "B" i sljedeća stvar bi bila "A".

Kada pozovete funkciju u svom kodu, sljedeća instrukcija nakon poziva funkcije pohranjuje se na stog i bilo koji memorijski prostor koji može biti prepisan pozivom funkcije. Odabrana funkcija može koristiti više steka za vlastite lokalne varijable. Kada se završi, oslobodit će prostor lokalne varijable koji je koristio i zatim se vratiti na prethodnu funkciju.

Stack Overflow

Prelijevanje steka je kada ste iskoristili više memorije za stog nego što je vaš program trebao koristiti. U ugrađenim sistemima, možete imati samo 256 bajtova za stog, a ako svaka funkcija zauzima 32 bajta, tada možete imati samo pozive funkcije 8 funkcije 2 s funkcijom dubinske funkcije 1 koja poziva funkciju 3 koja poziva funkciju 4... .who poziva funkciju 8, koja poziva funkciju 9, ali funkcija 9 prepisuje memoriju izvan steka. Ovo može prepisati memoriju, kod, itd.

Mnogi programeri prave ovu grešku pozivajući funkciju A, koja zatim poziva funkciju B, koja zatim poziva funkciju C, koja zatim poziva funkciju A. Možda će raditi većinu vremena, ali samo jedan pogrešan unos će uzrokovati da će zauvijek kružiti dok računar saznaje da je stog pun.

Rekurzivne funkcije također uzrokuju ovo, ali ako pišete rekurzivno (tj. vaša funkcija poziva samu sebe) onda morate biti svjesni toga i koristiti statičke/globalne varijable da spriječite beskonačnu rekurziju.

Tipično, OS i programski jezik koji koristite upravljaju stekom, a to je izvan vaših ruku. Trebalo bi da pogledate svoj graf poziva (strukturu stabla koja od vaše glavne tačke pokazuje šta svaka funkcija poziva) da vidite koliko su duboki pozivi vaših funkcija i da identifikujete petlje i rekurzije koje nisu predviđene. Namjerne petlje i rekurzija moraju se umjetno provjeriti greškom ako se međusobno pozivaju previše puta.

Osim dobrih praksi programiranja, statičkog i dinamičkog testiranja, ne možete mnogo učiniti u ovim sistemima visokog nivoa.

Embedded Systems

U ugrađenom svijetu, posebno u kodu visoke pouzdanosti (automobilska, avijacija, svemir), obavljate opsežne provjere i validaciju koda, ali također radite sljedeće:

  • Onemogućite rekurziju i petlje - nametnite politiku i testiranje
  • Držite kod i stek daleko jedan od drugog (kod u flashu, stog u RAM-u i nikada se neće podudarati)
  • Postavite zaštitne trake oko hrpe - praznu oblast memorije koju popunite magičnim brojem (obično program za prekid, ali ovdje postoji mnogo opcija) i stotine ili hiljade puta u sekundi gledate u zaštitne trake kako biste bili sigurni da su nisu prepisane.
  • Koristite zaštitu memorije (tj. nemojte izvršavati na steku, nemojte čitati ili pisati direktno iza steka)
  • Prekidi ne pozivaju sekundarne funkcije - postavljaju zastavice, kopiraju podatke i puštaju aplikaciju da se pobrine za njihovu obradu (inače biste mogli ući 8 duboko u stablo poziva funkcija, imati prekid, a zatim izaći iz još nekoliko funkcija unutar prekid koji uzrokuje bacanje). Imate više stabala poziva - jedno za glavne procese i jedno za svaki prekid. Ako vaši prekidi mogu jedni druge da prekidaju... pa, postoje zmajevi...

Jezici i sistemi visokog nivoa

Ali na jezicima visokog nivoa koji rade na operativnim sistemima:

  • Smanjite pohranu lokalnih varijabli (lokalne varijable se pohranjuju na stog, iako su prevodioci prilično pametni u vezi s tim i ponekad stavljaju velike komade na hrpu ako je vaše stablo poziva malo)
  • Izbjegavajte ili strogo ograničite rekurziju
  • Ne razbijajte svoje programe previše na sve manje i manje funkcije - čak i bez uzimanja u obzir lokalnih varijabli, svaki poziv funkcije troši do 64 bajta na stogu (32-bitni procesor, spremanje polovine procesorskih registara, zastavice, itd.).
  • Držite stablo poziva plitko (slično kao u gornjem opisu)

Web serveri

Zavisi od sandboxa koji imate, da li možete kontrolirati ili čak vidjeti stek. Šanse su da možete rukovati web serverima kao i svaki drugi jezik i operativni sistem visokog nivoa - prilično je na vama, ali provjerite jezik i serverski stog koji koristite. Na primjer, možete razbiti stog na vašem SQL serveru.

"Informix® DataBlade™ API vodič za programere" dostupan je za preuzimanje na . Odjeljak "Upravljanje prostorom steka" opisuje kreiranje korisnički definiranih funkcija (UDR). Ovaj članak pruža dodatne informacije i savjete za otklanjanje grešaka.

Sljedeće informacije su važeće bez obzira da li se UDR izvodi na korisnički definiranom virtualnom procesoru (VP) ili na VP CPU-u. Stog niti se može premjestiti u korisnički definirani virtualni procesor neposredno prije nego što se UDR izvrši.

Koja veličina steka je dodijeljena za UDR?

Veličina steka dostupna za UDR ovisi o tome kako je UDR kreiran:

    sa STACK modifikatorom, koji omogućava UDR-u da koristi svoj namjenski stek,

    bez STACK modifikatora, što znači da će UDR dijeliti stog koji je dodijelio serveru sa niti koja zahtijeva. Veličina steka u ovom slučaju će biti određena vrijednošću parametra STACKSIZE u onconfig konfiguracijskoj datoteci.

STACK modifikator

Izrazi CREATE PROCEDURE ili CREATE FUNCTION imaju opcijski STACK modifikator koji vam omogućava da specificirate količinu prostora steka, u bajtovima, koja je potrebna za izvršenje UDR-a.

Ako koristite STACK modifikator kada kreirate UDR, server će dodijeliti i osloboditi prostor steka svaki put kada se UDR izvrši. Stvarna dostupna veličina je STACK vrijednost u bajtovima umanjena za nešto dodatnog opterećenja ovisno o broju argumenata funkcije.

Ako je vrijednost STACK manja od vrijednosti parametra STACKSIZE u onconfig datoteci (pogledajte sljedeći odjeljak), tada će veličina steka dodijeljenog za UDR automatski biti zaokružena na vrijednost STACKSIZE.

STACKSIZE konfiguracijski parametar

Konfiguracijska datoteka onconfig uključuje opciju STACKSIZE koja specificira zadanu veličinu steka za korisničke niti.

Ako ne navedete STACK prilikom kreiranja UDR-a, poslužitelj ne dodjeljuje dodatni prostor steka za izvršenje tog UDR-a. Umjesto toga, UDR koristi prostor steka dodijeljen za izvršavanje zahtjeva. Dostupna veličina steka ovisit će o troškovima izvršavanja funkcije na SQL razini.

Stog za nit se dodjeljuje jednom za određenu nit koja izvršava zahtjev. Performanse su bolje kada UDR dijeli jedan stek s niti, jer server ne troši resurse na dodjeljivanje dodatnog steka za svaki poziv UDR-u. S druge strane, ako se stek koji koristi UDR približi STACKSIZE, to može uzrokovati prelijevanje steka prilikom pozivanja funkcije kao dijela složenog upita (u tom slučaju će manje prostora steka biti dostupno za UDR za izvršenje).

Imajte na umu da ne biste trebali postaviti STACKSIZE previsoko, jer će to utjecati na sve korisničke niti.

Kada trebate upravljati veličinom steka?

Y Morate upravljati prostorom steka ako UDR vrši rekurzivne pozive ili ako UDR zahtijeva više prostora steka nego što je dostupno prema zadanim postavkama na steku niti zahtjeva (STACKSIZE).

Postoje dva načina za povećanje steka za izvođenje UDR-a:

    Navedite STACK modifikator kada kreirate UDR.

    Koristite mi_call() za rekurzivne pozive (pogledajte Informix DataBlade API Vodič za programere za primjer).

Ako ne navedete veličinu preko STACK-a, i ako ne koristite mi_call() za povećanje trenutnog steka, i ako UDR radi nešto što zahtijeva puno prostora na steku, onda će to uzrokovati prelijevanje steka.

Imajte na umu da neke funkcije poput mi_* dodaju novi segment steka za vlastito izvršenje. Ovi segmenti se oslobađaju kada se vraćaju pozivaocu UDR funkcije.

Šta učiniti ako nešto krene po zlu?

Nadgledanje korištenja steka

Svrha promatranja je identificirati određeni UDR koji uzrokuje prelijevanje steka tako da možete promijeniti vrijednost STACK posebno za taj određeni UDR.

    Pratite upotrebu steka pomoću "onstat -g sts"

    Nadgledajte sesiju koja pokreće SQL upit sa "onstat -g ses session_id"

Nakon što identificirate SQL upit koji završava prekoračenjem steka, trebali biste odrediti upotrebu steka odvojenim izvršavanjem UDR upita koji su dio originalnog upita.

Možete dinamički postaviti STACK vrijednost za UDR. Na primjer:

alter funkciju MyFoo (lvarchar,lvarchar) sa (dodaj stack=131072);

Nakon promjene vrijednosti STACK, trebali biste testirati originalni zahtjev da biste bili sigurni da je sada stabilan.

Povećanje STACKSIZE

Alternativno, pokušajte povećati vrijednost STACKSIZE. Provjerite je li ovo riješilo problem. (Ne zaboravite vratiti staru vrijednost kasnije).

Ako povećanje STACKSIZE ne pomogne, problem je najvjerovatnije oštećenje memorije. Evo nekoliko prijedloga:

    Omogućite pisanje memorije i provjerite memorijska spremišta. Odjeljak "Problemi s otklanjanjem grešaka" u članku Dodjela memorije za UDR-ove objašnjava kako to učiniti.

    Razmislite o korištenju mi_lvarchar . Posebnu pažnju treba obratiti na mjesta gdje se mi_lvarchar prosljeđuje funkciji koja očekuje string sa nultom završetkom kao argument.

    Smanjite broj CPU (ili korisnika) VP-a na jedan da biste brže reprodukovali problem.

mi_print_stack() -- Solaris

Informix Dynamic Server za OC Solaris uključuje funkciju mi_print_stack() koja se može pozvati u UDR-u. Prema zadanim postavkama, ova funkcija sprema okvir steka u sljedeću datoteku:

/tmp/default.stack

Ne možete promijeniti ime izlazne datoteke, ali možete promijeniti njenu lokaciju promjenom vrijednosti DBTEMP varijable okruženja. Uvjerite se da korisnik informix može pisati u direktorij $DBTEMP. Sve greške koje se pojave tokom izvršavanja mi_print_stack() se štampaju na $MSGPATH.

Ova funkcija je dostupna samo za OC Solaris.

Glossary

Termini i skraćenice korišteni u ovom članku:

UDRKorisnički definirana rutina
VPVirtuelni procesor

Ovaj članak još jednom pokazuje da bilo koji set sigurnosnih mjera treba da pokrije sve faze implementacije: razvoj, implementaciju, administraciju sistema i, naravno, organizacione mjere. U informacionim sistemima je „ljudski faktor“ (uključujući korisnike) glavna bezbednosna pretnja. Ovaj skup mjera treba da bude razuman i izbalansiran: nema smisla i malo je vjerovatno da će se izdvojiti dovoljna sredstva za organizaciju zaštite, koja premašuje troškove samih podataka.

Uvod

1C:Enterprise je najčešći računovodstveni sistem u Rusiji, ali uprkos tome, prije verzije 8.0, njegovi programeri su posvećivali vrlo malo pažnje sigurnosnim pitanjima. U osnovi, naravno, ovo je diktirano nišom cijena proizvoda i fokusom na mala preduzeća u kojima nema kvalifikovanih IT stručnjaka, a mogući troškovi postavljanja i održavanja sigurnog sistema bili bi previsoki skupi za preduzeće. Sa izdavanjem verzije 8.0, naglasak se morao promijeniti: cijena rješenja je značajno porasla, sistem je postao mnogo skalabilniji i fleksibilniji - zahtjevi su se značajno promijenili. Da li je sistem postao dovoljno pouzdan i siguran, pitanje je vrlo individualno. Glavni informacioni sistem modernog preduzeća mora ispunjavati najmanje sledeće bezbednosne zahteve:

  • Dovoljno mala vjerovatnoća kvara sistema zbog internih razloga.
  • Pouzdana autorizacija korisnika i zaštita podataka od pogrešnih radnji.
  • Efikasan sistem za dodjelu korisničkih prava.
  • Online backup i sistem oporavka u slučaju kvara.

Da li rješenja zasnovana na 1C:Enterprise 8.0 ispunjavaju ove zahtjeve? Ne postoji jedinstven odgovor. Uprkos značajnim promjenama u sistemu kontrole pristupa, ostaje mnogo neriješenih pitanja. U zavisnosti od toga kako je sistem dizajniran i konfigurisan, svi ovi zahtevi možda neće biti ispunjeni ili mogu biti ispunjeni u dovoljnoj meri za ovu implementaciju, međutim, vredi obratiti pažnju (a to je značajna posledica „mladosti“ platforma) da da biste u potpunosti ispunili navedene uslove, morate uložiti zaista titanske napore.

Ovaj članak je namijenjen programerima i implementatorima rješenja baziranih na platformi 1C:Enterprise, kao i sistem administratorima organizacija u kojima se 1C:Enterprise koristi, a opisuje neke aspekte razvoja i konfigurisanja klijent-server verzije sistema iz sa stanovišta organizacije informacione bezbednosti. Ovaj članak se ne može koristiti kao zamjena za dokumentaciju, već samo ukazuje na neke točke koje još nisu u njemu odražene. I, naravno, ni ovaj članak, ni sva dokumentacija neće moći odraziti složenost problema izgradnje sigurnog informacioni sistem, koji istovremeno mora zadovoljiti konfliktne zahtjeve sigurnosti, performansi, pogodnosti i funkcionalnosti.

Klasifikacija i terminologija

Informacijske prijetnje su ključni predmet razmatranja u članku.

Informacijska prijetnja– mogućnost situacije u kojoj se podaci neovlašteno čitaju, kopiraju, mijenjaju ili blokiraju.

I, na osnovu ove definicije, u članku su informacijske prijetnje klasificirane na sljedeći način:

  • Neovlašteno uništavanje podataka
  • Neovlaštena izmjena podataka
  • Neovlašteno kopiranje podataka
  • Neovlašteno čitanje podataka
  • Nepristupačnost podataka

Sve prijetnje se dijele na namjerne i nenamjerne. Ostvarena informacijska prijetnja će biti pozvana incident. Karakteristike sistema su:

Ranjivosti– karakteristike koje dovode do incidenata Zaštitne mjere– karakteristike koje blokiraju mogućnost incidenta

U osnovi, razmatraju se samo oni slučajevi čija je vjerovatnoća zbog upotrebe tehnološke platforme 1C:Enterprise 8.0 u verziji klijent-server (u daljem tekstu, u slučajevima kada to nije u suprotnosti sa značenjem jednostavno 1C ili 1C 8.0) . Definiramo sljedeće glavne uloge u odnosu na korištenje sistema:

  • Operateri– korisnici koji imaju ograničena prava uloge aplikacije za pregled i modificiranje podataka, ali nemaju administrativne funkcije
  • Sistem administratori– korisnici koji imaju administrativna prava u sistemu, uključujući administrativna prava u operativnim sistemima servera aplikacija i MS SQL servera, administrativna prava u MS SQL-u itd.
  • Administratori za sigurnost informacija- korisnici kojima su delegirane određene administrativne funkcije u 1C infobazi (kao što su dodavanje korisnika, testiranje i popravljanje, sigurnosna kopija, postavljanje aplikativnog rješenja itd.)
  • Sistemski programeri- korisnici koji razvijaju aplikativno rješenje. Općenito, možda nemaju pristup radnom sistemu.
  • Osobe bez direktnog pristupa sistemu- korisnici kojima nisu delegirana prava pristupa 1C, ali koji mogu utjecati na rad sistema u jednoj ili drugoj mjeri (obično su to svi korisnici istog domena Active Directory u kojem je sistem instaliran). Ova kategorija se prvenstveno smatra za identifikaciju potencijalno opasnih entiteta u sistemu.
  • Automatizirane administrativne skripte– programi kojima su delegirane određene funkcije, dizajnirani da automatski izvršavaju određene radnje (na primjer, uvoz-izvoz podataka)

Ovdje treba napomenuti dvije stvari: prvo, ova klasifikacija je vrlo gruba i ne uzima u obzir podjele unutar svake grupe – takva podjela će se napraviti za neke specifične slučajeve, i drugo, pretpostavlja se da druge osobe ne mogu utjecati na rad sistem, koji treba da bude obezbeđen sredstvima van 1C.

Svaki sigurnosni sistem mora biti dizajniran imajući na umu izvodljivost i cijenu vlasništva. Generalno, prilikom razvoja i implementacije informacionog sistema potrebno je da cijena zaštite sistema odgovara:

  • vrijednost zaštićenih informacija;
  • trošak stvaranja incidenta (u slučaju namjerne prijetnje);
  • finansijski rizici u slučaju incidenta

Besmisleno je i štetno organizovati zaštitu mnogo skuplje od procjene njene finansijske efikasnosti. Postoji nekoliko metoda za procjenu rizika od gubitka informacija, ali one se ne razmatraju u ovom članku. Drugi važan aspekt je održavanje ravnoteže između često suprotstavljenih zahtjeva za sigurnost informacija, performanse sistema, pogodnost i lakoću korištenja sistema, brzinu razvoja i implementacije i druge zahtjeve za informacione sisteme preduzeća.

Glavne karakteristike mehanizma informacione sigurnosti sistema

1C:Enterprise 8.0 dolazi u dvije verzije: datoteka i klijent-server. Verzija fajla se ne može smatrati pružanjem informacione sigurnosti sistema iz sledećih razloga:

  • Podaci i konfiguracija se pohranjuju u datoteku koja je dostupna za čitanje i pisanje svim korisnicima sistema.
  • Kao što će biti prikazano u nastavku, autorizaciju sistema je vrlo lako zaobići.
  • Integritet sistema osigurava samo jezgro klijentskog dijela.

U verziji klijent-server, MS SQL Server se koristi za pohranjivanje informacija, što pruža:

  • Sigurnije skladištenje podataka.
  • Izolirajte datoteke od direktnog pristupa.
  • Napredniji mehanizmi transakcija i zaključavanja.

Uprkos značajnim razlikama između fajl i klijent-server verzija sistema, oni imaju jedinstvenu šemu kontrole pristupa na nivou aplikativnog rešenja, koja obezbeđuje sledeće karakteristike:

  • Autorizacija korisnika lozinkom navedenom u 1C.
  • Autorizacija korisnika od strane trenutnog korisnika Windowsa.
  • Dodjela uloga korisnicima sistema.
  • Ograničenje izvršavanja administrativnih funkcija po ulogama.
  • Dodjela dostupnih interfejsa po ulogama.
  • Ograničavanje pristupa objektima metapodataka po ulogama.
  • Ograničavanje pristupa detaljima objekata po ulogama.
  • Ograničavanje pristupa objektima podataka po ulogama i parametrima sesije.
  • Ograničenje interaktivnog pristupa podacima i izvršnim modulima.
  • Neka ograničenja izvršavanja koda.

Općenito, korištena šema pristupa podacima je prilično tipična za informacione sisteme ovog nivoa. Međutim, u vezi sa ovom implementacijom troslojne klijent-server arhitekture, postoji nekoliko fundamentalnih aspekata koji dovode do relativno velikog broja ranjivosti:

  1. Veliki broj faza obrade podataka, au svakoj fazi mogu se primijeniti različita pravila za pristup objektima.

    Donekle pojednostavljeni dijagram koraka obrade podataka koji su značajni sa stanovišta sigurnosti prikazan je na slici 1. Opšte pravilo za 1C je da smanji ograničenja dok se krećete niz ovu šemu, dakle, iskorištavanje ranjivosti na jednom od gornji nivoi može poremetiti sistem na svim nivoima.

  2. Nedovoljno otklonjene procedure za kontrolu prenetih podataka tokom prelaska sa nivoa na nivo.

    Nažalost, daleko od toga da su svi unutrašnji mehanizmi sistema idealno otklonjeni, posebno za neinteraktivne mehanizme, čije je otklanjanje grešaka s jedne strane uvijek dugotrajnije, ali odgovornije s druge. Ova "bolest" nije problem isključivo 1C, nalazi se u mnogim serverskim proizvodima većine proizvođača. Tek posljednjih godina pažnja na ove probleme značajno je porasla.

  3. Nedovoljno visoka prosječna kvalifikacija programera i sistem administratora, naslijeđena iz prethodne verzije.

    Proizvodi linije 1C:Enterprise prvobitno su bili fokusirani na jednostavnost razvoja i podrške i na rad u malim organizacijama, pa nije iznenađujuće da istorijski, značajan dio „programera“ primijenjenih rješenja i „administratora“ sistema ne imati dovoljno znanja i vještina za rad sa mnogo složenijim proizvodom, a to je verzija 8.0. Problem se pogoršava praksom usvojenom u kompanijama primaocima franšize da se obučavaju "u borbi" na račun kupaca, bez sistematskog pristupa ovom pitanju. Neophodno je odati priznanje 1C za činjenicu da se u posljednjih nekoliko godina ova situacija postupno poboljšava: ozbiljni primatelji franšize postali su odgovorniji u pristupu problemu zapošljavanja i obuke osoblja, nivou informatičke podrške 1C. značajno se povećao, programi sertifikacije su se pojavili fokusirani na visok nivo usluge; ali situacija se ne može odmah ispraviti, pa ovaj faktor treba uzeti u obzir prilikom analize sigurnosti sistema.

  4. Relativno mala starost platforme.

    Među proizvodima slične orijentacije i namjene upotrebe, ovo je jedno od najmlađih rješenja. Funkcionalnost platforme je manje-više sređena prije manje od godinu dana. Istovremeno, svako izdanje platforme, počevši od 8.0.10 (u ovom izdanju su implementirane skoro sve trenutne karakteristike sistema) postalo je mnogo stabilnije od prethodnih. Funkcionalnost standardno primijenjenih rješenja i dalje raste skokovima i granicama, iako se koristi samo polovina mogućnosti platforme. Naravno, u takvim uslovima priča o stabilnosti može biti prilično proizvoljna, ali generalno se mora priznati da su rešenja zasnovana na platformi 1C 8.0 po mnogo čemu prednjače u pogledu funkcionalnosti i performansi (a često i po pitanju performansi). stabilnost) slična rješenja na platformi 1C 7.7.

Dakle, sistem (i, moguće, tipično aplikativno rešenje) je raspoređen u preduzeću i instaliran na računarima. Prije svega, potrebno je stvoriti okruženje u kojem će sigurnosna postavka 1C imati smisla, a za to mora biti konfigurirana na način da se ispuni pretpostavka da postavke sistema značajno utiču na sigurnost sistema.

Pridržavajte se općih pravila za postavljanje sigurnosti.

Ne može biti govora ni o kakvoj informacionoj sigurnosti sistema ako se ne poštuju osnovni principi kreiranja sigurnih sistema. Uvjerite se da su ispunjeni barem sljedeći uslovi:

  • Pristup serverima je fizički ograničen i njihov nesmetan rad je osiguran:
    • serverski hardver zadovoljava zahtjeve pouzdanosti, otklonjena je zamjena neispravnog serverskog hardvera, koriste se šeme sa dupliranjem hardvera za posebno kritična područja (RAID, napajanje iz više izvora, više kanala komunikacije itd.);
    • serveri se nalaze u zaključanoj prostoriji, a ova prostorija je otvorena samo za vrijeme trajanja radova koji se ne mogu obavljati na daljinu;
    • samo jedna ili dvije osobe imaju pravo da otvore server sobu, u hitnim slučajevima razvijen je sistem za uzbunjivanje odgovornih lica;
    • osigurano neprekidno napajanje servera
    • osiguran je normalan klimatski način rada opreme;
    • postoji protivpožarni alarm u serverskoj prostoriji, ne postoji mogućnost poplave (posebno za prvi i zadnji sprat);
  • Postavke mreže i informacione infrastrukture preduzeća su ispravne:
    • firewall su instalirani i konfigurisani na svim serverima;
    • svi korisnici i računari su autorizovani na mreži, lozinke su dovoljno složene da se ne mogu pogoditi;
    • operatori sistema imaju dovoljno prava da normalno rade s njim, ali nemaju prava na administrativne radnje;
    • svi računari na mreži imaju instalirane i omogućene antivirusne alate;
    • poželjno je da korisnici (osim mrežnih administratora) nemaju administrativna prava na radnim stanicama klijenata;
    • pristup Internetu i prenosivim medijima za skladištenje treba da bude regulisan i ograničen;
    • mora biti konfigurisana revizija sistema sigurnosnih događaja;
  • Rešena su glavna organizaciona pitanja:
    • korisnici su kvalifikovani za rad sa 1C i hardverom;
    • korisnici se informišu o odgovornosti za kršenje pravila rada;
    • finansijski odgovoran za svaki materijalni element informacionog sistema;
    • svi sistemski blokovi su zapečaćeni i zatvoreni;
    • obratite posebnu pažnju na upute i nadzor čistača prostorija, građevinara i električara. Ove osobe mogu nehotice prouzročiti štetu koja nije uporediva sa namjernom štetom koju prouzrokuje nesavjesni korisnik sistema.

Pažnja! Ova lista nije konačna, već samo opisuje ono što se često zanemaruje prilikom postavljanja bilo kojeg prilično složenog i skupog informacionog sistema!

  • MS SQL Server, aplikacijski server i klijentski dio rade na različitim računarima, serverske aplikacije rade pod pravima posebno kreiranih Windows korisnika;
  • Za MS SQL Server
    • mješoviti način autorizacije je postavljen
    • Korisnici MS SQL-a uključeni u ulogu administratora servera ne učestvuju u 1C,
    • za svaki IB 1C kreiran je poseban MS SQL korisnik koji nema privilegirani pristup serveru,
    • MS SQL korisnik jednog IB-a nema pristup drugim IB-ovima;
  • Korisnici nemaju direktan pristup datotekama servera aplikacija i MS SQL servera
  • Radne stanice operatera opremljene su Windows 2000/XP (ne Windows 95/98/Me)

Nemojte zanemariti preporuke programera sistema i čitanje dokumentacije. Važni materijali o postavljanju sistema objavljeni su na ITS diskovima u odjeljku "Smjernice". Obratite posebnu pažnju na sljedeće članke:

  1. Značajke rada aplikacija sa serverom 1C: Enterprise
  2. Plasman podataka 1C:Enterprise 8.0
  3. Ažurirajte 1C:Enterprise 8.0 od strane korisnika Microsoft Windows bez administratorskih prava
  4. Uređivanje liste korisnika u ime korisnika koji nema administrativna prava
  5. Konfiguriranje postavki Windows XP SP2 zaštitnog zida za SQL Server 2000 i SQL Server Desktop Engine (MSDE)
  6. Konfiguriranje COM+ Windows XP SP2 parametara za rad 1C:Enterprise 8.0 servera
  7. Konfigurisanje postavki Windows XP SP2 zaštitnog zida za rad servera 1C:Enterprise 8.0
  8. Konfigurisanje postavki Windows XP SP2 zaštitnog zida za HASP License Manager
  9. Napravite rezervnu kopiju baza informacija koristeći SQL Server 2000
  10. Problemi instalacije i konfiguracije 1C: Enterprise 8.0 u verziji "klijent-server"(jedan od najvažnijih članaka)
  11. Posebnosti windows postavke Server 2003 prilikom instaliranja servera 1C:Enterprise 8.0
  12. Regulacija pristupa korisnika infobazi u verziji klijent-server(jedan od najvažnijih članaka)
  13. Server 1C: Enterprise i SQL Server
  14. Detaljan postupak instalacije za 1C:Enterprise 8.0 u verziji "klijent-server"(jedan od najvažnijih članaka)
  15. Korištenje ugrađenog jezika na serveru 1C:Enterprise

Ali, kada čitate dokumentaciju, budite kritični prema primljenim informacijama, na primjer, u članku "Problemi instaliranja i konfiguracije 1C: Enterprise 8.0 u verziji "klijent-server"" prava koja su potrebna za korisnika USER1CV8SERVER nisu sasvim tačno opisano. Dolje će se nalaziti veze do liste, na primjer, [ITS1] znači članak "Osobenosti rada aplikacija sa serverom 1C: Enterprise". Sve reference na članke odnose se na najnovije izdanje ITS-a u vrijeme pisanja (siječanj 2006.)

Koristite mogućnosti autorizacije za korisnike u kombinaciji sa Windows autorizacijom

Od dva moguća načina autorizacije korisnika: ugrađeni 1C i u kombinaciji s autorizacijom Windows OS-a, ako je moguće, trebate odabrati kombiniranu autorizaciju. Ovo će omogućiti da korisnici ne budu zbunjeni sa nekoliko lozinki na poslu, ali u isto vrijeme neće sniziti nivo sigurnosti sistema. Međutim, čak i za korisnike koji koriste samo Windows autorizaciju, vrlo je poželjno postaviti lozinku prilikom kreiranja, a tek nakon toga onemogućiti 1C autorizaciju za ovog korisnika. Da biste osigurali oporavak sistema u slučaju uništenja strukture Active Directory, potrebno je ostaviti barem jednog korisnika koji se može prijaviti pomoću 1C autorizacije.

Kada kreirate uloge rješenja aplikacije, nemojte dodavati prava na "backup".

Svaka uloga aplikacijskog rješenja treba odražavati minimalni potrebni skup prava za izvođenje radnji definiranih ovom ulogom. Međutim, neke uloge se ne mogu koristiti samostalno. Na primjer, za interaktivno pokretanje eksterna obrada možete kreirati zasebnu ulogu i dodati je svim korisnicima koji bi trebali koristiti eksternu obradu.

Redovno pregledajte sistemske dnevnike i evidencije

Ako je moguće, regulirati i automatizirati pregled dnevnika i protokola rada sistema. Pravilnom konfiguracijom i redovnim pregledom dnevnika (filtriranih samo prema važnim događajima) možete pravovremeno otkriti neovlaštene radnje ili ih čak spriječiti u fazi pripreme.

Neke karakteristike klijent-server verzije

Ovaj odjeljak opisuje neke od karakteristika klijent-server verzije i njihov utjecaj na sigurnost. Radi lakšeg čitanja, usvojena je sljedeća oznaka:

Pažnja! opis ranjivosti

Čuvanje informacija koje kontrolišu pristup sistemu

Pohranjivanje liste IB korisnika

Sve informacije o listi korisnika ovog IS-a i ulogama koje su im dostupne u njemu pohranjene su u tablici Params u bazi podataka MS SQL (vidi [ITS2]). Gledajući strukturu i sadržaj ove tabele, postaje očigledno da se sve informacije o korisnicima čuvaju u zapisu sa vrednošću polja FileName - "users.usr".

Budući da pretpostavljamo da korisnici nemaju pristup bazi podataka MS SQL, ova činjenica sama po sebi ne može biti korištena od strane napadača, međutim, ako je moguće izvršiti kod u MS SQL-u, to "otvara vrata" za dobijanje bilo kojeg (! ) pristup sa 1C . Isti mehanizam (sa manjim izmenama) može se koristiti i za verziju fajla sistema, što, uzimajući u obzir specifičnosti verzije fajla, u potpunosti isključuje njegovu primenljivost u izgradnji sigurnih sistema.

Preporuka: Trenutno ne postoji način da se aplikacija u potpunosti zaštiti od takve promjene, osim korištenja trigera na razini MS SQL Servera, što, s druge strane, može uzrokovati probleme prilikom ažuriranja verzije platforme ili promjene liste korisnika. Da biste pratili takve promjene, možete koristiti 1C dnevnik (obrativši pažnju na "sumnjive" prijave u načinu konfiguratora bez navođenja korisnika) ili održavati SQL Profiler konstantno pokrenutim (što će imati izuzetno negativan utjecaj na performanse sistema) ili konfigurirati upozorenja mehanizam (najvjerovatnije, zajedno pomoću okidača)

Pohranjivanje informacija o IB listi na serveru

Za svaki 1C aplikacijski server, informacije se pohranjuju na listi MS SQL baza podataka povezanih s njim. Svaka infobaza koristi svoj vlastiti niz veze između poslužitelja aplikacija i MS SQL servera. Informacije o bazama podataka registrovanim na aplikacijskom serveru, zajedno sa nizovima veze, pohranjene su u datoteci srvrib.lst, koja se nalazi na serveru u direktoriju<Общие данные приложений>/1C/1Cv8 (na primjer, C:/Documents and Settings/All Users/Application Data/1C/1Cv8/srvrib.lst). Za svaki IB pohranjuje se kompletan niz veze, uključujući lozinku MS SQL korisnika kada se koristi mješoviti MS SQL autorizacijski model. Upravo prisutnost ove datoteke omogućava strah od neovlaštenog pristupa bazi podataka MS SQL, a ako se, suprotno preporukama, privilegirani korisnik (na primjer, "sa") koristi za pristup barem jednoj bazi podataka , tada pored prijetnje jednog IS-a postoji prijetnja za cijeli sistem koji koristi MS SQL.

Zanimljivo je napomenuti da korištenje mješovite autorizacije i Windows autorizacije na MS SQL serveru dovodi do različitih vrsta problema prilikom pristupa ovoj datoteci. Dakle, ključna negativna svojstva Windows autorizacije će biti:

  • Rad cjelokupne informacione sigurnosti na aplikacijskom serveru i na MS SQL serveru pod jednim skupom prava (najvjerovatnije redundantno)
  • Iz procesa 1C aplikacijskog poslužitelja (ili u općenitom slučaju od korisnika USER1CV8SERVER ili njegovog ekvivalenta) bez navođenja lozinke, možete se lako povezati na bilo koju informacijsku sigurnost bez navođenja lozinke

S druge strane, napadaču bi moglo biti teže da izvrši proizvoljan kod iz korisničkog konteksta USER1CV8SERVER nego da dobije navedenu datoteku. Inače, prisustvo takve datoteke je još jedan argument za širenje funkcija servera na različitim računarima.

Preporuka: Datoteka srvrib.lst bi trebala biti dostupna samo procesu servera. Obavezno postavite reviziju da promijenite ovu datoteku.

Nažalost zadano dati fajl skoro da nije zaštićen od čitanja, što se mora uzeti u obzir prilikom postavljanja sistema. U idealnom slučaju, aplikacijski server bi spriječio čitanje i pisanje ove datoteke (uključujući čitanje i pisanje od strane korisničkih veza koje se izvršavaju na ovom serveru) u vrijeme izvođenja.

Nedostatak autorizacije prilikom kreiranja IB-a na serveru

Pažnja! Greška nedostatka autorizacije je ispravljena u izdanju 8.0.14 platforme 1C:Enterprise. U ovom izdanju pojavio se koncept "1C:Enterprise Server Administrator", ali sve dok je lista administratora navedena na serveru, sistem se ponaša kako je opisano u nastavku, tako da ne zaboravite na ovu moguću funkciju.

Vjerojatno najveća ranjivost u ovoj sekciji je mogućnost gotovo neograničenog dodavanja informacione sigurnosti poslužitelju aplikacija, zbog čega svaki korisnik koji je dobio pristup konekciji na poslužitelj aplikacija automatski dobija priliku da pokrene proizvoljni kod na aplikaciji server. Pogledajmo ovo na primjeru.

Sistem bi trebao biti instaliran u sljedećoj verziji

  • MS SQL Server 2000 (na primjer, naziv mreže SRV1)
  • Server 1C:Enterprise 8.0 (mrežni naziv SRV2)
  • Klijentska strana 1C:Enterprise 8.0 (ime mreže WS)

Pretpostavlja se da korisnik (u daljem tekstu KORISNIK) koji radi na WS-u ima barem minimalan pristup jednom od IB-ova registriranih na SRV2, ali nema privilegirani pristup SRV1 i SRV2. Općenito, kombinacija funkcija navedenih računara ne utiče na situaciju. Sistem je konfigurisan uzimajući u obzir preporuke u dokumentaciji i na ITS diskovima. Situacija je prikazana na sl. 2.


  • konfigurirati COM+ sigurnost na poslužitelju aplikacija tako da samo korisnici 1C imaju pravo povezivanja na proces aplikacijskog poslužitelja (više detalja [ITS12]);
  • datoteka srvrib.lst mora biti samo za čitanje za korisnika USER1CV8SERVER (da biste dodali novi IB na server, privremeno dozvolite pisanje);
  • za povezivanje na MS SQL koristite samo TCP / IP protokol, u ovom slučaju možete:
    • ograničiti veze sa zaštitnim zidom;
    • konfigurirajte korištenje nestandardnog TCP porta, što će zakomplicirati povezivanje "stranog" IB 1C;
    • koristiti enkripciju prenesenih podataka između poslužitelja aplikacija i SQL servera;
  • konfigurisati firewall servera tako da je nemoguća upotreba MS SQL servera treće strane;
  • koristite intranet sigurnosne alate kako biste isključili mogućnost neovlaštenog pojavljivanja računara na lokalnoj mreži (IPSec, grupne sigurnosne politike, zaštitni zidovi, itd.);
  • ni pod kojim okolnostima ne dodijelite administrativna prava korisniku USER1CV8SERVER na poslužitelju aplikacija.

Korištenje koda koji se izvodi na serveru

Kada se koristi verzija klijent-server 1C, programer može distribuirati izvršenje koda između klijenta i poslužitelja aplikacija. Da bi se kod (procedura ili funkcija) izvršavao samo na serveru, potrebno ga je smjestiti u zajednički modul, za koji je postavljeno svojstvo "Server", a u slučaju kada je izvršenje modula dozvoljeno ne samo na serveru, postavite kod u ograničeni odjeljak "#If Server ":

#Ako server onda
Funkcija OnServer(Param1, Param2 = 0) Izvoz // Ova funkcija se, uprkos svojoj jednostavnosti, izvršava na serveru
Param1 = Param1 + 12;
Return Param1;
EndFunctions
#EndIf

Kada koristite kod koji radi na serveru, imajte na umu da:

  • kod se izvršava sa USER1CV8SERVER pravima na aplikacijskom serveru (dostupni su COM objekti i serverske datoteke);
  • sve korisničke sesije pokreće jedna instanca usluge, tako da će, na primjer, prekoračenje steka na serveru uzrokovati da svi aktivni korisnici budu isključeni;
  • otklanjanje grešaka u serverskim modulima je teško (na primer, ne možete postaviti tačku prekida u debugeru), ali treba da se uradi;
  • prenošenje kontrole sa klijenta na server aplikacija i obrnuto može zahtevati značajne resurse sa velikim količinama prenetih parametara;
  • korištenje interaktivnih alata (obrasci, dokumenti u tabeli, dijaloški okviri), eksterni izvještaji i obrada u kodu na aplikacijskom serveru nije moguća;
  • upotreba globalnih varijabli (varijable modula aplikacije deklarirane sa "Izvoz") nije dozvoljena;

Pogledajte [ITS15] i druge ITS članke za detalje.

Aplikacioni server mora ispuniti posebne zahtjeve za pouzdanost. U pravilno izgrađenom sistemu klijent-server moraju biti ispunjeni sljedeći uslovi:

  • nikakve radnje klijentske aplikacije ne bi trebalo da prekidaju rad servera (osim u administrativnim slučajevima);
  • server ne može izvršiti programski kod primljen od klijenta;
  • resurse treba "pravično" rasporediti među klijentske veze, osiguravanje dostupnosti servera bez obzira na trenutno opterećenje;
  • u nedostatku zaključavanja podataka, klijentske veze ne bi trebale uticati na rad jedne druge;
  • nije na serveru korisnički interfejs, ali treba razviti alate za praćenje i evidentiranje;

Općenito, 1C sistem je izgrađen na način da se približi ovim zahtjevima (na primjer, nemoguće je prisiliti da se vanjska obrada izvrši na serveru), ali još uvijek postoji nekoliko neugodnih karakteristika, stoga:

Preporuka: Prilikom dizajniranja pozadinskog izvođenja preporučuje se pridržavanje principa minimalnog interfejsa. One. broj ulaza u serverske module iz klijentske aplikacije trebao bi biti vrlo ograničen, a parametri bi trebali biti strogo regulirani. Preporuka: Prilikom prijema parametara procedura i funkcija na serveru, potrebno je izvršiti provjeru valjanosti parametara (provjera da li parametri odgovaraju očekivanom tipu i rasponu vrijednosti). To se ne radi u standardnim rješenjima, ali je vrlo poželjno uvesti obaveznu validaciju u vlastiti razvoj. Preporuka: Kada generirate tekst zahtjeva (a još više parametar naredbe Run) na strani servera, nemojte koristiti nizove primljene od klijentske aplikacije.

Opšta preporuka bi bila da se upoznate sa principima sigurne izgradnje web-aplikacije za baze podataka i rad na sličnim principima. Sličnost je zaista značajna: prvo, kao i web aplikacija, poslužitelj aplikacija je međusloj između baze podataka i korisničkog sučelja (glavna razlika je u tome što web server formira korisnički interfejs); drugo, sa stanovišta sigurnosti, ne možete vjerovati podacima primljenim od klijenta, jer moguće je pokrenuti eksterne izvještaje i obradu.

Prenos parametara

Prosljeđivanje parametara funkciji (proceduri) koja se izvodi na poslužitelju je prilično delikatan problem. Ovo je prvenstveno zbog potrebe njihovog prijenosa između procesa poslužitelja aplikacija i klijenta. Kada se kontrola prenese sa strane klijenta na stranu servera, svi preneseni parametri se serijaliziraju, prenose na server, gdje se "raspakuju" i koriste. Prilikom prelaska sa strane servera na stranu klijenta, proces je obrnut. Ovdje treba napomenuti da ova šema ispravno obrađuje prosljeđivanje parametara prema referenci i vrijednosti. Sljedeća ograničenja primjenjuju se prilikom prosljeđivanja parametara:

  • Samo nepromjenjive vrijednosti (tj. čije vrijednosti se ne mogu mijenjati) mogu se prenijeti između klijenta i servera (u oba smjera): primitivni tipovi, reference, generičke kolekcije, vrijednosti sistemskog nabrajanja, pohrana vrijednosti. Ako pokušate poslati nešto drugo, klijentska aplikacija ruši (čak i ako server pokuša poslati pogrešan parametar).
  • Ne preporučuje se prijenos velikih količina podataka prilikom prosljeđivanja parametara (na primjer, nizovi duži od 1 milion karaktera), to može negativno uticati na performanse servera.
  • Ne možete proslijediti parametre koji sadrže kružnu referencu, i sa servera na klijenta i obrnuto. Ako pokušate proslijediti takav parametar, klijentska aplikacija se ruši (čak i ako server pokuša poslati neispravan parametar).
  • Ne preporučuje se prosljeđivanje vrlo složenih zbirki podataka. Ako pokušate da prosledite parametar sa veoma velikim nivoom ugnježđenja, server se ruši (!).

Pažnja! Najiritantnija karakteristika u ovom trenutku je vjerovatno greška u prosljeđivanju složenih kolekcija vrijednosti. Tako, na primjer, kod: NestingLevel = 1250;
M = Novi niz;
PassedParameter = M;
Za N = 1 petljom nivoa ugniježđenja
MVInt = Novi niz;
M.Add(MVInt);
M = MVin;
EndCycle;
ServerFunction(PassedParameter);

Uzrokuje pad servera, prekidajući vezu sa svim korisnicima, a to se događa prije nego što se kontrola prenese na 1C kod.

Korištenje nesigurnih funkcija na strani servera.

Ne mogu se sve karakteristike ugrađenog jezika koristiti u kodu koji se izvodi na aplikacijskom serveru, ali čak i među dostupnim alatima postoje mnoge "problematične" konstrukcije koje se uslovno mogu klasificirati na sljedeći način:

  • sposoban pružiti mogućnost izvršavanja koda koji nije sadržan u konfiguraciji (grupa "Izvršavanje koda")
  • može pružiti klijentskoj aplikaciji informacije o datoteci i operativni sistem korisnika ili obavljati radnje koje nisu vezane za rad s podacima ("Kršenje prava")
  • može uzrokovati pad servera ili koristiti vrlo velike resurse (grupa za grešku servera)
  • sposoban da izazove neuspjeh klijenta (grupa "Client failure") – ovaj tip se ne razmatra. Primjer: prosljeđivanje promjenjive vrijednosti serveru.
  • greške u algoritmima programiranja (beskonačne petlje, neograničena rekurzija, itd.) ("Programske greške")

Glavne problematične konstrukcije koje su mi poznate (sa primjerima) su navedene u nastavku:

Procedura Izvrši (<Строка>)

Izvršenje koda. Omogućava vam da izvršite dio koda koji mu se prosljeđuje kao vrijednost niza. Kada se koristi na serveru, mora se voditi računa da se podaci primljeni od klijenta ne koriste kao parametar. Na primjer, sljedeća upotreba nije dozvoljena:

#Ako server onda
Procedura OnServer(Param1) Izvoz
Izvrši (param1);
EndProcedure
#EndIf

Upišite "COMObject" (konstruktor Novi COMObject(<Имя>, <Имя сервера>))

Kreira COM objekt eksterne aplikacije kao USER1CV8SERVER na aplikacijskom poslužitelju (ili drugom navedenom računalu). Kada se koristi na serveru, osigurajte da se parametri ne prosljeđuju iz klijentske aplikacije. Međutim, na strani servera je efikasno koristiti ovu funkciju prilikom uvoza/izvoza, slanja podataka preko Interneta, implementacije nestandardnih funkcija itd.

GetCOMObject(<Имя файла>, <Имя класса COM>)
Kršenje prava i izvršavanje koda. Slično prethodnom, samo dobijanje COM objekta koji odgovara datoteci.
Procedure i funkcijeComputerName(), TempFileDirectory(), ProgramDirectory(), WindowsUsers()
Kršenje prava. Dozvolite, njihovim izvršavanjem na serveru, da saznate detalje organizacije serverskog podsistema. Kada se koristi na serveru, osigurajte da se podaci ili ne prenose do klijenta ili da nisu dostupni operaterima bez odgovarajućeg ovlaštenja. Obratite posebnu pažnju na činjenicu da se podaci mogu prenijeti nazad u parametru proslijeđenom referencom.
Procedure i funkcije za rad sa datotekama (CopyFile, FindFiles, MergeFiles i mnoge druge), kao i tipovi "File".

Kršenje prava. Oni omogućavaju da se njihovim izvršavanjem na serveru dobije zajednički pristup lokalnim (i lociranim na mreži) datotekama dostupnim pod pravima korisnika USER1CV8SERVER. Ako se koristi svjesno, onda je moguće efikasno implementirati takve zadatke kao što je uvoz/izvoz podataka na server.

Obavezno provjerite korisnička prava 1C prije korištenja ovih funkcija. Da biste provjerili korisnička prava, možete koristiti sljedeću konstrukciju u serverskom modulu:

#Ako server onda
Procedura DoWorkOnFile() Izvoz
RoleAdministrator = Metadata.Roles.Administrator;
Korisnik = SessionParameters.CurrentUser;
Ako User.Roles.Contains(RoleAdministrator) Onda
//Ovdje se izvršava kod za rad s datotekama
EndIf;
#EndIf

Obavezno provjerite parametre ako koristite ove procedure i funkcije, inače postoji rizik od slučajnog ili svjesnog nanošenja nepopravljive štete 1C aplikacijskom poslužitelju, na primjer, prilikom izvršavanja koda na serveru:

Putanja = "C:\Documents and Settings\All Users\Application Data\1C\1Cv8\";
MoveFile(Path + "srvrib.lst", Path + "HereWhereFileGone");

Nakon izvršenja takvog koda na serveru, ako korisnik USER1CV8SERVER ima prava da ga promijeni, kao što je gore opisano, i nakon ponovnog pokretanja serverskog procesa (podrazumevano, 3 minute nakon što se svi korisnici odjave), pojavit će se VELIKO pitanje o pokretanju server. Ali moguće je potpuno izbrisati fajlove...

Vrste "XBase", "BinaryData", "XMLReader", "XMLWriter", "XSLTransformer", "ZipFileWrite", "ZipFileReader", "TextReader", "TextWriter"
Kršenje prava. Omogućuju, njihovim izvršavanjem na serveru, pristup lokalnim (i lociranim na mreži) datotekama određenih tipova i njihovo čitanje/pisanje pod pravima korisnika USER1CV8SERVER. Ako se koristi svjesno, onda je moguće efikasno implementirati takve zadatke kao što su uvoz/izvoz podataka na serveru, evidentiranje rada nekih funkcija, rješavanje administrativnih zadataka. Općenito, preporuke su iste kao u prethodnom pasusu, ali treba razmotriti mogućnost prijenosa podataka ovih datoteka (ali ne objekata svih ovih tipova) između klijentskog i serverskog dijela.
Upišite "Informacije o sistemu"
Kršenje prava. Omogućava da u slučaju nepravilne upotrebe i prenosa podataka u klijentski dio aplikacije možete dobiti podatke o serveru aplikacija. Poželjno je ograničiti pravo korištenja prilikom korištenja.
Upisuje "InternetConnection", "InternetMail", "InternetProxy", "HTTPConnection", "FTPConnection"

Kršenje prava. Kada se koristi na serveru, povezuje se na udaljeni PC sa servera aplikacija pod pravima USER1CV8SERVER. Preporuke:

  • Kontrola parametara prilikom pozivanja metoda.
  • Kontrola korisničkih prava 1C.
  • Ozbiljna ograničenja prava korisnika USER1CV8SERVER za pristup mreži.
  • Ispravna konfiguracija zaštitnog zida na 1C aplikacijskom serveru.

Kada se pravilno koristi, zgodno je organizovati, na primer, distribuciju e-pošte sa servera aplikacija.

Upisuje "InfobaseUsersManager", "InfobaseUser"

Kršenje prava. Ako se koristi pogrešno (u privilegovanom modulu), moguće je dodati korisnike ili promijeniti parametre autorizacije postojećih korisnika.

Format funkcije

Greška servera. Da! Ova naizgled bezopasna funkcija, ako se njeni parametri ne kontroliraju i ne izvršavaju na serveru, može uzrokovati pad poslužiteljske aplikacije. Greška se manifestira prilikom formatiranja brojeva i korištenja izlaznog načina vodećih nula i velikog broja znakova, npr.

Format(1, "HTS=999; FHN=");

Nadam se da će ova greška biti ispravljena u narednim izdanjima platforme, ali za sada, u svim pozivima ovoj funkciji koji se mogu izvršiti na serveru, provjerite parametre poziva.

Procedure i funkcije za pohranjivanje vrijednosti (ValueToStringInt, ValueToFile)
Greška servera. Ove funkcije ne rukuju kružnim referencama u zbirkama i vrlo dubokim ugniježđenjem, tako da se mogu srušiti u nekim vrlo posebnim slučajevima.

Greške u granicama i vrijednosti posebnih parametara u funkcijama. Kontrola izvršenja.

Jedan od problema na koji se može susresti pri korištenju servera je velika "odgovornost" funkcija servera (mogućnost pada cijele serverske aplikacije zbog greške u jednoj vezi i korištenje jednog "resursnog prostora" za sve veze) . Otuda potreba za kontrolom glavnih parametara vremena izvođenja:

  • Za ugrađene jezičke funkcije, provjerite njihove parametre pokretanja (odličan primjer je funkcija "Format")
  • Kada koristite petlje, uvjerite se da je uvjet izlaska iz petlje aktiviran. Ako je petlja potencijalno beskonačna, umjetno ograničite broj iteracija: IterationCountMaxValue = 1000000;
    Broj iteracija = 1;
    ćao
    Funkcija koja možda neće vratiti False()
    I (Brojači<МаксимальноеЗначениеСчетчикаИтераций) Цикл

    //.... Tijelo petlje
    Broj iteracija = Broj iteracija + 1;
    EndCycle;
    Ako IterationCount>IterationCountMaxValue Onda
    //.... rukovati događajem pretjerano dugog izvršavanja petlje
    EndIf;

  • Ograničite maksimalni nivo ugniježđenja kada koristite rekurziju.
  • Kada formirate i izvršavate upite, pokušajte spriječiti vrlo duga dohvaćanja i dohvaćanja velike količine informacija (na primjer, kada koristite uvjet "IN HIJERARHIJA", nemojte koristiti praznu vrijednost)
  • Prilikom dizajniranja infobaze osigurajte dovoljno veliku marginu za brojeve (u suprotnom, sabiranje i množenje postaju nekomutativni i neasocijativni, što otežava otklanjanje grešaka)
  • U izvršnim upitima, provjerite logiku operacije da li postoje NULL vrijednosti i ispravan rad uslova upita i izraza koristeći NULL.
  • Kada koristite zbirke, kontrolirajte mogu li se proslijediti između poslužitelja aplikacija i strane klijenta.

Korištenje pristupa terminala na strani klijenta za ograničavanje pristupa

Nije neuobičajeno vidjeti preporuke za korištenje terminalskog pristupa za ograničavanje pristupa podacima i poboljšanje performansi izvršavanjem koda na strani klijenta na terminal serveru. Da, kada se pravilno konfiguriše, upotreba terminalskog pristupa zaista može povećati ukupni nivo sigurnosti sistema, ali, nažalost, često je moguće susresti se sa činjenicom da se u praktičnoj upotrebi sigurnost sistema samo smanjuje. Pokušajmo shvatiti s čime je to povezano. Sada postoje dva uobičajena načina organizovanja pristupa terminalu, a to su Microsoft Terminal Services (RDP protokol) i Citrix Metaframe Server (ICA protokol). Općenito, Citrix alati pružaju mnogo fleksibilnije opcije administracije pristupa, ali cijena ovih rješenja je mnogo veća. Razmotrićemo samo glavne karakteristike zajedničke za oba protokola koje mogu smanjiti ukupni nivo sigurnosti. Postoje samo tri glavne opasnosti kada se koristi pristup terminalu:
  • Mogućnost blokiranja rada drugih korisnika hvatanjem prevelike količine resursa
  • Pristup podacima drugih korisnika.
  • Neovlašteno kopiranje podataka sa terminalnog servera na računar korisnika

U svakom slučaju, Terminal Services vam omogućava da:

  • Povećati pouzdanost rada (u slučaju kvara na terminalskom računaru, korisnik može naknadno nastaviti rad sa istog mjesta)
  • Ograničite pristup klijentskoj aplikaciji i datotekama koje čuva.
  • Prenesite računarsko opterećenje sa radnog mesta korisnika na server za pristup terminalu
  • Upravljajte sistemskim postavkama centralnije. Za korisnike, sačuvana podešavanja će važiti bez obzira sa kog računara su se prijavili na sistem.
  • U nekim slučajevima možete koristiti terminalsko rješenje za daljinski pristup sistemu.

Potrebno je ograničiti broj mogućih konekcija na terminal server jednog korisnika

Zbog "proždrljivosti" 1C klijentske aplikacije u pogledu resursa, neophodno je ograničiti maksimalan broj istovremenih konekcija jednog korisnika (operatora) na terminal server. Aktivna veza može koristiti do 300 MB memorije sa samo jednom instancom aplikacije. Osim memorije, aktivno se koristi i procesorsko vrijeme, što također ne doprinosi stabilnosti rada korisnika ovog servera. Istovremeno sa sprečavanjem prekomerne upotrebe serverskih resursa, takvo ograničenje može sprečiti korišćenje tuđih račun. Implementirano standardnim postavkama terminal servera.

Ne smijete dozvoliti da više od jedne ili dvije 1C klijentske aplikacije rade istovremeno u jednoj vezi

Diktiraju ga isti razlozi kao u prethodnom paragrafu, ali je tehnički teže implementirati. Problem je u tome što je gotovo nemoguće spriječiti 1C da se ponovo pokrene koristeći terminalski server (u nastavku će biti objašnjeno zašto), tako da morate implementirati ovu mogućnost na nivou aplikativnog rješenja (što također nije dobro rješenje, jer može "visi" sesije neko vrijeme kada se aplikacija neispravno završi, postaje potrebno precizirati aplikativno rješenje u aplikacijskom modulu i nekim direktorijima, što će zakomplikovati korištenje ažuriranja iz 1C). Vrlo je poželjno ostaviti korisniku mogućnost pokretanja 2 aplikacije kako bi mogao izvoditi neke radnje (na primjer, generiranje izvještaja) u pozadini - klijentska aplikacija je, nažalost, zapravo jednonitna.

Nije preporučljivo dodijeliti prava pristupa terminalskom serveru korisnicima koji imaju pravo pokretati računske zadatke koji zahtijevaju velike resurse u 1C ili spriječiti takvo pokretanje tijekom aktivnog rada drugih korisnika.

Naravno, bolje je ostaviti pristup terminalskom serveru samo korisnicima koji ne koriste takve zadatke kao što su analiza podataka (data mining), geografske šeme, uvoz/izvoz i drugi zadaci koji ozbiljno opterećuju klijentsku stranu aplikacije. Ako ipak postoji potreba za rješavanjem takvih zadataka, tada je potrebno: obavijestiti korisnika da ovi zadaci mogu utjecati na rad drugih korisnika, zabilježiti u dnevnik događaj početka i završetka takvog proces, da se dozvoli izvršenje samo u zakazano vrijeme, itd.

Morate biti sigurni da svaki korisnik ima pristup pisanju samo u strogo definirane direktorije terminalskog poslužitelja i da drugi korisnici nemaju pristup njima.

Prvo, ako ne ograničite mogućnost pisanja u dijeljene direktorije (kao što je direktorij u kojem je instaliran 1C), tada napadač i dalje ima priliku promijeniti ponašanje programa za sve korisnike. Drugo, podaci jednog korisnika (privremeni fajlovi, fajlovi za čuvanje postavki izveštaja, itd.) ni u kom slučaju ne bi trebalo da budu dostupni drugom korisniku terminal servera – generalno, tokom normalne konfiguracije, ovo pravilo se poštuje. Treće, napadač i dalje ima mogućnost da "zasipa" particiju tako da na hard disku ne ostane prostora. Znam da će biti prigovor da od Windowsa 2000 Windows ima mehanizam kvote, ali ovo je prilično skup mehanizam i praktično nikada nisam vidio njegovu pravu upotrebu.

Ako su prethodna pitanja podešavanja pristupa generalno bila prilično laka za implementaciju, onda tako (naizgled) jednostavan zadatak kao što je regulacija pristupa korisnika datotekama nije trivijalan. Prvo, ako se mehanizam kvote ne koristi, tada se velike datoteke mogu sačuvati. Drugo, sistem je izgrađen na način da će gotovo uvijek biti moguće sačuvati fajl tako da bude dostupan drugom korisniku.

S obzirom da je zadatak teško riješiti u potpunosti, preporučuje se revizija većine događaja u fajlu

Potrebno je zabraniti povezivanje (mapiranje) disk uređaja, štampača i međuspremnika klijentske radne stanice.

U RDP-u i ICA-u moguće je organizovati automatsko povezivanje diskova, štampača, međuspremnika com-portova terminalnog računara na server. Ako ova mogućnost postoji, tada je praktički nemoguće zabraniti pokretanje stranog koda na terminal serveru i spremanje podataka iz 1C na klijentu za pristup terminalu. Dozvolite ove funkcije samo osobama sa administrativnim pravima.

Pristup mrežnim datotekama sa terminalnog servera mora biti ograničen.

Ako se to ne učini, tada će korisnik ponovo moći pokrenuti neželjeni kod ili pohraniti podatke. Budući da obični dnevnik ne prati događaje u fajlovima (usput rečeno, dobra ideja za implementaciju programera platforme), a gotovo je nemoguće postaviti reviziju sistema u cijeloj mreži (nema dovoljno resursa za održavanje), bolje je da korisnik može slati podatke ili štampati, ili putem e-pošte. Obratite posebnu pažnju na činjenicu da terminalski server ne radi direktno sa korisničkim prenosivim medijima.

Ni u kom slučaju, kada kreirate siguran sistem, ne biste trebali ostaviti poslužitelj aplikacija na terminal serveru.

Ako server aplikacija radi na istom računaru kao i klijentske aplikacije, onda postoji dosta mogućnosti za ometanje njegovog normalnog rada. Ako je iz nekog razloga nemoguće razdvojiti funkcije terminalnog servera i poslužitelja aplikacija, obratite posebnu pažnju na pristup korisnika datotekama koje koristi poslužitelj aplikacija.

Potrebno je isključiti mogućnost pokretanja svih aplikacija osim 1C:Enterprise na terminal serveru.

Ovo je jedna od najtežih želja za realizaciju. Počnimo s činjenicom da je potrebno pravilno konfigurirati sigurnosnu politiku grupe u domeni. Svi "Administrativni predlošci" i "Politika ograničenja softvera" moraju biti pravilno konfigurisani. Da biste se testirali, uvjerite se da su barem sljedeće opcije onemogućene:

Složenost implementacije ovog zahtjeva često dovodi do mogućnosti pokretanja "dodatne" 1C sesije na terminalskom serveru (čak i ako su druge aplikacije ograničene, tada je u principu nemoguće zabraniti pokretanje 1C koristeći Windows).

Uzmite u obzir ograničenja redovnog dnevnika registracije (svi korisnici koriste program sa jednog računara)

Očigledno, budući da korisnici otvaraju 1C u terminalskom modu, tada će terminalski server biti taj koji će biti zabilježen u evidenciji registracije. Sa kog računara se korisnik povezao, evidencija registracije ne prijavljuje.

Terminalni server - zaštita ili ranjivost?

Dakle, nakon razmatranja glavnih karakteristika sjevera terminala, možemo reći da potencijalno sjever terminala može pomoći u automatizaciji raspodjele računarskog opterećenja, ali je prilično teško izgraditi siguran sistem. Jedan od slučajeva kada je korištenje terminalskog servera najefikasnije je pokretanje 1C bez Windows Explorer-a u punom ekranu za korisnike sa ograničenom funkcionalnošću i specijaliziranim sučeljem.

Rad na strani klijenta

Korištenje Internet Explorera (IE)

Jedan od uslova za normalan rad klijentskog dijela 1C je korištenje komponenti Internet Explorer. Sa ovim komponentama morate biti veoma oprezni.

Pažnja! Prvo, ako je špijunski ili adver modul "prikačen" na IE, tada će se učitati čak i ako se bilo koja HTML datoteka pregleda u 1C. Do sada nisam vidio svjesnu upotrebu ove funkcije, ali sam u jednoj od organizacija vidio učitani "špijunski" modul jedne od pornografskih mreža kada je pokrenut 1C (antivirusni program nije ažuriran, simptomi koji su pronađeni: prilikom postavljanja firewall-a, bilo je jasno da 1C pokušava da se port 80 poveže sa porno sajtom). Zapravo, ovo je još jedan argument u prilog činjenici da zaštita treba da bude sveobuhvatna.

Pažnja! Drugo, 1C sistem dozvoljava korištenje flash filmova, ActiveX objekata, VBScript-a u prikazanim HTML dokumentima, slanje podataka na Internet, čak i otvaranje PDF datoteka (!), Istina, u drugom slučaju traži "otvori ili sačuvaj" .. Uopšte, šta god vam srce poželi. Primjer ne sasvim razumne upotrebe ugrađene HTML mogućnosti pregleda i uređivanja:

  • Kreirajte novi HTML dokument (Datoteka -> Novo -> HTML dokument).
  • Idite na karticu "Tekst" praznog dokumenta.
  • Izbrišite tekst (potpuno).
  • Idite na karticu "Pregled" ovog dokumenta
  • Koristeći drag-n-drop, premjestite datoteku sa ekstenzijom SWF (ovo su datoteke flash filmova) iz otvorenog istraživača u prozor dokumenta, na primjer iz keša pretraživača, iako je to moguće sa FLASH igračkom za zabavu.
  • Kako divno! Na 1C možete pokrenuti igračku!

Sa stanovišta sigurnosti sistema, ovo je potpuno pogrešno. Do sada nisam vidio posebne napade na 1C kroz ovu ranjivost, ali će se najvjerovatnije ispostaviti da je to pitanje vremena i vrijednosti vaših informacija.

Postoje još neke manje tačke koje se pojavljuju kada radite s poljem u HTML dokumentu, ali dvije navedene su glavne. Iako, ako ovim značajkama pristupite kreativno, možete organizirati zaista nevjerojatne mogućnosti sučelja za rad s 1C.

Upotreba eksternih izvještaja i obrada.

Pažnja! Eksterni izvještaji i obrada - s jedne strane - zgodan način implementacija dodatnih štampanih obrazaca, regulatorno izveštavanje, specijalizovani izveštaji, sa druge strane, potencijalni način da se zaobiđu mnoga bezbednosna ograničenja sistema i poremete server aplikacija (na primer, vidi gore u „Prolasku parametara“). 1C sistem ima poseban parametar u skupu prava uloge "Interaktivno otvaranje eksterne obrade", ali to ne otklanja problem u potpunosti - za kompletno rješenje potrebno je suziti krug korisnika koji mogu upravljati eksterne štampane forme, rutinske izveštaje i druge regularne karakteristike standardnih rešenja implementiranih korišćenjem eksterne obrade. Na primjer, po defaultu u SCP-u, sve glavne korisničke uloge imaju mogućnost rada s direktorijem dodatnih obrazaca za ispis, a to je, u stvari, mogućnost korištenja bilo koje vanjske obrade.

Upotreba standardnih mehanizama standardnih rješenja i platforme (razmjena podataka)

Neki od standardnih mehanizama su potencijalno opasni, i to na prilično neočekivane načine.

Štampanje lista

Bilo koja lista (na primjer, direktorij ili registar informacija) u sistemu može se odštampati ili sačuvati u datoteci. Da biste to učinili, dovoljno je koristiti standardnu ​​funkciju dostupnu iz kontekstnog izbornika i izbornika "Radnje":

Imajte na umu da se gotovo sve što korisnik vidi na listama može poslati u eksterne datoteke. Jedino što se može savjetovati je vođenje protokola za ispis dokumenata na print serverima. Za posebno kritične forme, potrebno je konfigurisati akcioni panel povezan sa zaštićenim poljem tabele tako da mogućnost prikaza liste nije dostupna sa ovog panela i onemogućiti kontekstni meni (vidi sliku 6).

Razmjena podataka u distribuiranoj bazi podataka

Format razmjene podataka je prilično jednostavan i opisan je u dokumentaciji. Ako korisnik ima mogućnost zamjene nekoliko datoteka, može izvršiti neovlaštene promjene u sistemu (iako je ovaj zadatak prilično naporan). Mogućnost kreiranja rubne baze podataka kada se koriste planovi razmjene distribuiranih baza podataka ne bi trebala biti dostupna običnim operaterima.

Standardna razmjena XML podataka

U standardnoj razmjeni podataka, koja se koristi za razmjenu između tipičnih konfiguracija (na primjer, "Upravljanje trgovinom" i "Računovodstvo preduzeća"), moguće je specificirati rukovaoce događaja učitavanja i rasterećenja objekata u pravilima razmjene. Ovo se implementira dobijanjem rukovatelja iz datoteke i procedurom "Execute()" standardne obrade učitavanja i izbacivanja datoteke (procedura "Execute()" se pokreće na strani klijenta). Očigledno, nije teško stvoriti takvu lažnu datoteku za razmjenu koja će izvršiti zlonamjerne radnje. Za većinu korisničkih uloga generičkog rješenja, dijeljenje je omogućeno prema zadanim postavkama.

Preporuka: ograničiti pristup XML-razmjeni za većinu korisnika (ostaviti samo administratorima sigurnosti informacija). Čuvajte dnevnike pokretanja ove obrade, čuvajući datoteku za razmjenu, na primjer, slanjem je email IS administrator prije preuzimanja.

Korišćenje generičkih izveštaja, posebno konzole za izveštavanje

Drugi problem je podrazumevani korisnički pristup generičkim izveštajima, posebno izveštaju Konzole za izveštaje. Ovaj izvještaj karakterizira činjenica da vam omogućava da izvršite gotovo sve zahtjeve za sigurnost informacija, pa čak i ako je sistem 1C prava (uključujući RLS) postavljen prilično kruto, omogućava korisniku da dobije puno "nepotrebnih" informacija i prisiliti server da izvrši takav zahtjev, koji će uzeti sve resurse sistema.

Korištenje načina rada preko cijelog ekrana (desktop mod)

Jedan od efikasnih načina za organizovanje specijalizovanih interfejsa sa ograničenim pristupom funkcionalnosti programa je režim preko celog ekrana glavnog (i verovatno jedinog) oblika interfejsa koji se koristi. Istovremeno, nema problema s pristupačnošću, na primjer, meni "Datoteka", a sve radnje korisnika ograničene su mogućnostima obrasca koji se koristi. Za detalje pogledajte "Karakteristike implementacije desktop moda" na ITS disku.

Backup

Sigurnosna kopija za verziju klijent-server 1C može se napraviti na dva načina: prijenos podataka u datoteku s ekstenzijom dt i stvaranje sigurnosne kopije pomoću SQL-a. Prva metoda ima puno nedostataka: potreban je ekskluzivni pristup, samo stvaranje kopije traje mnogo duže, u nekim slučajevima (ako je narušena struktura IS) stvaranje arhive je nemoguće, ali postoji jedna prednost - minimalna veličina arhive. Za SQL sigurnosnu kopiju vrijedi upravo suprotno: kopija se kreira u pozadini pomoću SQL servera, zbog jednostavne strukture i nedostatka kompresije, ovo je vrlo brz proces i sve dok je fizički integritet SQL baze podataka nije narušena, sigurnosna kopija se izvodi, ali je veličina kopije ista kao prava veličina IB-a u proširenom stanju (komprimiranje se ne vrši). Zbog dodatnih prednosti MS SQL backup sistema, svrsishodnije ga je koristiti (dozvoljene su 3 vrste sigurnosne kopije: puna, diferencijalna, kopija dnevnika transakcija; moguće je kreirati redovno izvršavane zadatke; sigurnosna kopija i sistem rezervnih kopija se brzo postavlja, mogućnost predviđanja veličine potrebnog prostora na disku, itd.). Glavne tačke organizacije backup-a u smislu sigurnosti sistema su:

  • Potreba za odabirom lokacije za pohranjivanje sigurnosnih kopija na način da one nisu dostupne korisnicima.
  • Potreba za pohranjivanjem rezervnih kopija na fizičkoj udaljenosti od MS SQL servera (u slučaju prirodnih katastrofa, požara, napada itd.)
  • Mogućnost davanja prava za pokretanje rezervnih kopija korisniku koji nema pristup rezervnim kopijama.

Za više informacija pogledajte MS SQL dokumentaciju.

Šifrovanje podataka

Za zaštitu podataka od neovlaštenog pristupa često se koriste različiti kriptografski alati (i softverski i hardverski), ali njihova svrsishodnost u velikoj mjeri ovisi o ispravnoj primjeni i cjelokupnoj sigurnosti sistema. Razmotrit ćemo enkripciju podataka u različitim fazama prijenosa i pohrane podataka korištenjem najčešćih sredstava i glavne greške u dizajnu sistema korištenjem kriptografskih alata.

Postoji nekoliko glavnih faza obrade informacija koje se mogu zaštititi:

  • Prijenos podataka između klijentskog dijela sistema i aplikacijskog servera
  • Prijenos podataka između poslužitelja aplikacija i MS SQL Servera
  • Podaci pohranjeni na MS SQL Server (datoteke sa podacima na fizičkom disku)
  • Šifriranje podataka pohranjenih u IB
  • Eksterni podaci (u vezi sa sigurnošću informacija)

Za podatke pohranjene na strani klijenta i na poslužitelju aplikacija (sačuvane korisničke postavke, IB lista, itd.), enkripcija je opravdana samo u vrlo rijetkim slučajevima i stoga se ovdje ne razmatra. Kada koristite kriptografske alate, ne treba zaboraviti da njihova upotreba može značajno smanjiti performanse sistema u cjelini.

Opće informacije o kriptografskoj zaštiti mrežnih veza pri korištenju TCP/IP protokola.

Bez zaštite, sve mrežne veze su podložne neovlaštenom nadzoru i pristupu. Da biste ih zaštitili, možete koristiti šifriranje podataka na razini mrežnog protokola. Za šifrovanje podataka koji se prenose na lokalnoj mreži najčešće se koriste IPSec alati koje obezbeđuje operativni sistem.

IPSec alati obezbeđuju enkripciju prenetih podataka korišćenjem DES i 3DES algoritama, kao i proveru integriteta pomoću MD5 ili SHA1 heš funkcija. IPSec može raditi u dva načina: transportni i tunelski. Transportni način je bolji za osiguranje veza na lokalnoj mreži. Tunelski način rada se može koristiti za organiziranje VPN veza između zasebnih segmenata mreže ili za zaštitu udaljene veze s lokalnom mrežom preko otvorenih kanala podataka.

Glavne prednosti ovog pristupa su:

  • Mogućnost centralnog upravljanja bezbednošću koristeći Active Directory alate.
  • Mogućnost isključivanja neovlaštenih konekcija na server aplikacija i MS SQL server (na primjer, moguće je zaštititi od neovlaštenog dodavanja sigurnosti informacija na poslužitelju aplikacija).
  • Izuzetak "slušanje" mrežnog saobraćaja.
  • Nema potrebe za mijenjanjem ponašanja aplikacijskih programa (u ovom slučaju 1C).
  • Standard takvog rješenja.

Međutim, ovaj pristup ima ograničenja i nedostatke:

  • IPSec ne štiti podatke od neovlaštenog pristupa i prisluškivanja direktno na izvornim i odredišnim računarima.
  • Količina podataka koji se prenose preko mreže je nešto veća nego bez korištenja IPSec-a.
  • Kada se koristi IPSec, opterećenje centralnog procesora je nešto veće.

Detaljan opis implementacije IPSec je izvan okvira ovog članka i zahtijeva razumijevanje osnovnih principa IP protokola. Da biste pravilno konfigurirali sigurnost veze, pročitajte odgovarajuću dokumentaciju.

Posebno je potrebno spomenuti nekoliko aspekata licencnog ugovora sa 1C prilikom organiziranja VPN veza. Činjenica je da je, unatoč nepostojanju tehničkih ograničenja, pri povezivanju nekoliko segmenata lokalne mreže ili udaljenom pristupu jednog računala na lokalnu mrežu obično potrebno nekoliko osnovnih potrepština.

Šifrovanje podataka tokom prenosa između klijentskog dela sistema i aplikacijskog servera.

Osim enkripcije na nivou mrežnog protokola, moguće je i šifriranje podataka na nivou COM+ protokola, što se spominje u članku „Reguliranje pristupa korisnika infobazi u verziji klijent-server“ ITS-a. Da biste ga implementirali, morate podesiti "Usluge komponenti" za aplikaciju 1CV8 da postavite nivo autentikacije za pozive "Privatnost paketa". Kada je ovaj način postavljen, paket se autentifikuje i šifrira, uključujući podatke i identitet i potpis pošiljaoca.

Šifrovanje podataka tokom prenosa između aplikacijskog servera i MS SQL Servera

MS SQL Server pruža sljedeće alate za šifriranje podataka:

  • Moguće je koristiti Secure Sockets Layer (SSL) prilikom prijenosa podataka između poslužitelja aplikacija i MS SQL Servera.
  • Kada koristite višeprotokolnu mrežnu biblioteku, šifrovanje podataka se koristi na nivou RPC. Ovo je potencijalno slabija enkripcija nego kod SSL-a.
  • Ako se koristi protokol za razmjenu dijeljene memorije (to se dešava ako se server aplikacija i MS SQL Server nalaze na istom računaru), onda se šifriranje ni u kom slučaju ne koristi.

Da biste podesili potrebu za šifriranjem svih prenesenih podataka za određeni MS SQL server, koristite uslužni program "Server Network Utility". Pokrenite ga i na kartici "Općenito" označite okvir "Prisilno šifriranje protokola". Metoda šifriranja se bira u zavisnosti od onog koji koristi klijentska aplikacija (tj. 1C aplikacijski server). Da biste koristili SSL, morate pravilno konfigurirati uslugu izdavanja certifikata na vašoj mreži.

Da biste podesili potrebu za šifriranjem svih prenesenih podataka za određeni poslužitelj aplikacija, trebate koristiti uslužni program "Client Network Utility" (obično se nalazi u "C:\WINNT\system32\cliconfg.exe"). Kao iu prethodnom slučaju, na kartici "Općenito" označite polje "Prisilno šifriranje protokola".

Treba imati na umu da upotreba enkripcije u ovom slučaju može imati značajan uticaj na performanse sistema, posebno kada se koriste upiti koji vraćaju velike količine informacija.

Kako bismo potpunije osigurali vezu između poslužitelja aplikacija i MS SQL Servera pri korištenju TCP/IP protokola, možemo preporučiti nekoliko promjena zadanih postavki.

Prvo, možete postaviti port koji nije standardni (port 1433 se koristi po defaultu). Ako odlučite koristiti nestandardni TCP port za razmjenu podataka, imajte na umu sljedeće:

  • MS SQL Server i Application Server moraju koristiti isti port.
  • Kada koristite firewall, ovaj port mora biti dozvoljen.
  • Ne možete postaviti port koji mogu koristiti druge aplikacije na MS SQL Serveru. Za referencu, pogledajte http://www.ise.edu/in-notes/iana/assignments/port-numbers (adresa preuzeta iz SQL Server Books Online).
  • Kada koristite više instanci usluge MS SQL Server, obavezno pročitajte MS SQL dokumentaciju (odjeljak "Konfiguriranje mrežnih veza") za konfiguraciju.

Drugo, u postavkama TCP/IP protokola na MS SQL serveru možete postaviti potvrdni okvir "Sakrij server" koji zabranjuje odgovore na zahtjeve za emitovanje na ovu instancu usluge MS SQL Server.

Šifriranje MS SQL podataka pohranjenih na disku

Postoji prilično velik izbor softvera i hardvera za šifriranje podataka koji se nalaze na lokalnom disku (ovo je uobičajena mogućnost Windows-a da koristi EFS, te korištenje eToken ključeva i programa trećih strana kao što su Jetico Bestcrypt ili PGPDisk). Jedan od glavnih zadataka koji obavljaju ovi alati je zaštita podataka u slučaju gubitka medija (na primjer, kada je server ukraden). Posebno treba napomenuti da Microsoft ne preporučuje pohranjivanje MS SQL baza podataka na šifrirane medije i to je sasvim opravdano. Glavni problem u ovom slučaju je značajan pad performansi i mogući problemi pouzdanost kvara. Drugi faktor koji komplikuje život administratora sistema je potreba da se osigura da su svi fajlovi baze podataka dostupni u trenutku prvog pristupa njima od strane MS SQL servisa (tj. poželjno je da se isključe interaktivne radnje kada šifrovani medij je povezan).

Kako biste izbjegli primjetan pad performansi sistema, možete koristiti sposobnost MS SQL-a za kreiranje baza podataka u nekoliko datoteka. Naravno, u ovom slučaju bazu podataka MS SQL ne bi trebao kreirati 1C server prilikom kreiranja baze podataka, već bi se trebala kreirati zasebno. Primjer skripte u TSQL-u sa komentarima je dat u nastavku:

USEmaster
GO
-- Kreirajte bazu podataka SomeData,
KREIRANJE BAZE PODATAKA SomeData
-- čiji se cijeli podaci nalaze u PRIMARNOJ grupi datoteka.
NA OSNOVNOJ
-- Glavna datoteka podataka nalazi se na šifriranom mediju (logički disk E:)
-- i ima početnu veličinu od 100 MB, može se automatski povećati na 200 MB sa
-- korak 20 Mb
(NAME = Neki podaci1,
FILENAME = "E:\SomeData1.mdf",
VELIČINA = 100MB,
MAXSIZE=200
FILEGROWTH=2),
-- Druga datoteka s podacima nalazi se na nešifriranom mediju (logički disk C:)
-- i ima početnu veličinu od 100 MB, može se automatski povećati do granice
-- prostor na disku u koracima od 5% trenutne veličine datoteke (zaokruženo na 64 KB)
(NAME = Neki podaci2,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SomeData2.ndf",
VELIČINA = 100MB,
MAXSIZE=NEOGRANIČENO,
FILEGrowth = 5%)
PRIJAVI SE
-- Iako bi se i dnevnik transakcija mogao podijeliti na dijelove, to ne bi trebalo raditi,
-- jer ova se datoteka mijenja mnogo češće i redovito se čisti (na primjer, kada
-- stvaranje rezervne kopije baze podataka).
(NAME = SomeDatalog,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SomeData.ldf",
VELIČINA = 10MB,
MAXSIZE=NEOGRANIČENO,
FILEGROWTH=10)
GO
-- Bolje je odmah dati vlasništvo nad bazom podataka korisniku u čije ime
-- 1C će biti povezan. Da bismo to učinili, moramo deklarirati trenutnu bazu
- upravo stvoreno
KORISTI SomeData
GO
-- i pokrenite sp_changedbowner
EXEC sp_changedbowner @loginame = "SomeData_dbowner"

Mala digresija o automatskom rastu veličine datoteke podataka. Prema zadanim postavkama, za kreirane baze podataka, veličine datoteka se povećavaju u koracima od 10% trenutne veličine datoteke. Ovo je savršeno prihvatljivo rješenje za male baze podataka, ali ne baš dobro za velike: s veličinom baze podataka od, na primjer, 20 GB, datoteka bi se trebala povećati za 2 GB odjednom. Iako će se ovaj događaj događati rijetko, može trajati nekoliko desetina sekundi (sve ostale transakcije su zapravo mirne tokom tog vremena), što, ako se dogodi tokom aktivnog rada sa bazom podataka, može uzrokovati određene kvarove. Drugi negativan efekat proporcionalnog povećanja, koji se javlja kada je prostor na disku skoro potpuno popunjen, je mogućnost preranog kvara usled nedostatka slobodnog prostora. Na primjer, ako je particija diska kapaciteta 40 GB u potpunosti dodijeljena za jednu bazu podataka (tačnije, za jednu datoteku ove baze podataka), tada je kritična veličina datoteke baze podataka pri kojoj je potrebno hitno (vrlo hitno, do prekida normalnog rada korisnika) reorganizirati pohranu informacija je datoteka veličine 35 GB. Sa veličinom povećanja postavljenom na 10-20 MB, možete nastaviti s radom dok ne dostignete 39 GB.

Stoga, iako gornji popis navodi povećanje veličine jedne od datoteka baze podataka u koracima od 5%, za velike veličine baze podataka bolje je postaviti fiksni prirast od 10-20 MB. Prilikom postavljanja vrijednosti koraka rasta za veličinu datoteka baze podataka, potrebno je uzeti u obzir da sve dok jedna od datoteka u grupi datoteka ne dostigne maksimalnu veličinu, vrijedi pravilo: datoteke jedne grupe datoteka rastu sve istovremeno, kada su svi potpuno popunjeni. Dakle, u gornjem primjeru, kada datoteka SomeData1.mdf dostigne svoju maksimalnu veličinu od 200 MB, datoteka SomeData2.ndf će biti veličine oko 1,1 GB.

Nakon kreiranja takve baze podataka, čak i ako njene nezaštićene datoteke SomeData2.ndf i SomeData.ldf postanu dostupne napadaču, biće izuzetno teško vratiti pravo stanje baze podataka - podatke (uključujući informacije o logičkoj strukturi baze podataka ) će biti razbacane po nekoliko datoteka, štoviše, ključne informacije (o tome, na primjer, koje datoteke čine ovu bazu podataka) će biti u šifriranoj datoteci.

Naravno, ako se datoteke baze podataka pohranjuju korištenjem kriptografskih sredstava, tada sigurnosne kopije (barem ovih datoteka) ne bi trebalo praviti na nešifriranim medijima. Da biste osigurali da su pojedinačne datoteke baze podataka napravljene sigurnosne kopije, koristite odgovarajuću sintaksu za naredbu "BACKUP DATABASE". Napominjemo da uprkos mogućnosti zaštite sigurnosne kopije baze podataka lozinkom (opcije "PASSWORD = " i "MEDIAPASSWORD = " komande "BACKUP DATABASE"), takva sigurnosna kopija nije šifrirana!

Šifrovanje serverskih i klijentskih podataka pohranjenih na diskovima

U većini slučajeva pohranjivanje datoteka koje koristi 1C:Enterprise (klijentski dio i aplikacijski server) na šifrirani medij ne može se smatrati opravdanim zbog nerazumno visokih troškova, međutim, ako postoji takva potreba, imajte na umu da poslužitelj aplikacija i klijentski dio aplikacije vrlo često kreiraju privremene datoteke. Često ove datoteke mogu ostati nakon završetka aplikacije i gotovo je nemoguće jamčiti njihovo uklanjanje pomoću 1C alata. Stoga se javlja šifriranje direktorija koji se koristi za privremene datoteke u 1C ili ne pohranjivanje na disk pomoću RAM-pogona (posljednja opcija nije uvijek moguća zbog veličine generiranih datoteka i zahtjeva za količinom RAM-a same aplikacije 1C:Enterprise).

Šifrovanje podataka sa ugrađenim 1C alatima.

Uobičajene mogućnosti korištenja enkripcije u 1C svode se na korištenje objekata za rad sa Zip datotekama s parametrima šifriranja. Dostupni su sljedeći načini šifriranja: AES algoritam sa ključem od 128, 192 ili 256 bita i zastarjeli algoritam izvorno korišten u Zip arhiveru. Zip datoteke šifrovane pomoću AES-a nisu čitljive od strane mnogih arhivatora (WinRAR, 7zip). Da biste generirali datoteku koja sadrži šifrirane podatke, morate navesti lozinku i algoritam šifriranja. Najjednostavniji primjer funkcija šifriranja-dešifriranja zasnovanih na ovoj osobini je dat u nastavku:

Funkcija EncryptData(Podaci, Lozinka, Metoda šifriranja = Nedefinirano) Izvoz

// Zapisuje podatke u privremenu datoteku. Zapravo, ne mogu se svi podaci sačuvati na ovaj način.
ValueToFile(TempFileName, Data);

// Upisuje privremene podatke u arhivu
Zip = Novi ZipFileEntry(TempArchiveFileName, Password,EncryptionMethod);
Zip.Add(TemporaryFileName);
Zip.Write();

// Čitanje podataka iz primljene arhive u RAM
EncryptedData = NewValueStorage(New BinaryData(TempArchiveFileName));

// Privremene datoteke - brisanje

EndFunction Funkcija DecryptData(EncryptedData, Password) Izvoz

// Pažnja! Ne prati se ispravnost proslijeđenih parametara

// Upisuje proslijeđenu vrijednost u datoteku
TempArchiveFileName = GetTemporalFileName("zip");
BinaryArchiveData = EncryptedData.Get();
BinaryArchiveData.Write(TempArchiveFileName);

// Izvucite prvu datoteku novonapisane arhive
TempFileName = GetTempFileName();
Zip = NewReadZipFile(TempArchiveFileName, Password);
Zip.Extract(Zip.Items, TemporaryFileName, FilePath Recovery ModeZIP.Don'tRecover);

// Čitanje zapisane datoteke
Podaci = ValueFromFile(TempFileName + "\" + Zip.Elements.Name);

// Brisanje privremenih datoteka
DeleteFiles(TempFileName);
DeleteFiles(TempArchiveFileName);

Povratni podaci;

EndFunctions

Naravno, ova metoda se ne može nazvati idealnom - podaci se upisuju u privremenu mapu u čistom tekstu, performanse metode, iskreno, nisu nigdje lošije, skladištenje u bazi podataka zahtijeva izuzetno veliku količinu prostora, ali ovo je jedina metoda koja se zasniva samo na ugrađenim mehanizmima platforme. Osim toga, ima prednost u odnosu na mnoge druge metode - ova metoda obavlja pakiranje podataka istovremeno s šifriranjem. Ako želite implementirati enkripciju bez nedostataka koje ova metoda ima, onda ih morate implementirati u vanjsku komponentu ili se pozivati ​​na postojeće biblioteke kroz kreiranje COM objekata, na primjer, koristeći Microsoft CryptoAPI. Kao primjer, dajemo funkcije šifriranja / dešifriranja niza na osnovu primljene lozinke.

Funkcija EncryptStringDES(UnencryptedString, Password)

CAPICOM_ENCRYPTION_ALGORITHM_DES = 2; // Ova konstanta je iz CryptoAPI-ja


EncryptionMechanism.Content = PlainString;
EncryptionMechanism.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_DES;
EncryptedString = EncryptionMechanism.Encrypt();

Vrati EncryptedString;

EndFunction // EncryptStringDES()

Funkcija DecryptStringDES(EncryptedString, Password)

//Pažnja! Parametri se ne provjeravaju!

EncryptionMechanism = Novi COMObject("CAPICOM.EncryptedData");
EncryptionMechanism.SetSecret(Password);
Pokušaj
EncryptionMechanism.Decrypt(EncryptedString);
Izuzetak
// Neispravna lozinka!;
Return Undefined;
Kraj pokušaja;

Povratak EncryptionMechanism.Content;

EndFunction // DecodeStringDES()

Imajte na umu da prilikom prijenosa prazna vrijednost kao string ili lozinka u ovim funkcijama, pojavit će se poruka o grešci. Niz dobijen ovom procedurom šifriranja je nešto duži od originala. Specifičnosti ove enkripcije su takve da ako dvaput šifrirate niz, rezultirajući nizovi NEĆE biti identični.

Glavne greške pri korištenju kriptografskih alata.

Kada koristite kriptografske alate, često se prave iste greške:

Podcjenjivanje degradacije performansi pri korištenju kriptografije.

Kriptografija je zadatak koji zahtijeva prilično veliki broj proračuna (posebno za algoritme kao što su DES, 3DES, GOST, PGP). Čak iu slučaju korištenja visokoučinkovitih i optimiziranih algoritama (RC5, RC6, AES), nema bijega od nepotrebnog prijenosa podataka u memoriji i računske obrade. A to gotovo negira mogućnosti mnogih serverskih komponenti (RAID nizovi, mrežni adapteri). Kada se za šifriranje koristi hardversko šifriranje ili izvođenje hardverskog ključa, postoji dodatno moguće usko grlo u performansama: brzina prijenosa podataka između sekundarnog uređaja i memorije (i performanse takvog uređaja možda neće igrati odlučujuću ulogu). Kada se koristi enkripcija male količine podataka (na primjer, mail poruka), povećanje računskog opterećenja na sistemu nije toliko primjetno, ali u slučaju totalne enkripcije svega i svačega to može uvelike utjecati na performanse sistem u celini.

Potcjenjivanje savremenih mogućnosti izbora lozinki i ključeva.

U ovom trenutku, mogućnosti tehnologije su takve da ključ od 40-48 bita može izabrati mala organizacija, a ključ od 56-64 bita velika organizacija. One. Moraju se koristiti algoritmi koji koriste ključ od najmanje 96 ili 128 bita. Ali većina ključeva se generira korištenjem hash algoritama (SHA-1, itd.) na osnovu lozinki koje je unio korisnik. U ovom slučaju, 1024-bitni ključ možda neće biti sačuvan. Prvo, često se koristi lozinka koju je lako pogoditi. Faktori koji olakšavaju odabir su: upotreba samo jednog velikog slova; korištenje riječi, imena i izraza u lozinkama; korištenje poznatih datuma, rođendana itd.; korištenje "šablona" prilikom generiranja lozinki (na primjer, 3 slova, zatim 2 broja, zatim 3 slova u cijeloj organizaciji). Dobra lozinka bi trebala biti prilično nasumičan niz velikih slova, brojeva i interpunkcije. Lozinke koje se unose sa tastature do 7-8 karaktera, čak i ako se poštuju ova pravila, mogu se pogoditi u razumnom roku, pa je bolje da lozinka ima najmanje 11-13 karaktera. Idealno rješenje je odbiti generiranje ključa lozinkom, na primjer, korištenjem raznih pametnih kartica i sl., ali je u ovom slučaju potrebno predvidjeti mogućnost zaštite od gubitka nosioca ključa za šifriranje.

Nebezbedno skladištenje ključeva i lozinki.

Tipični primjeri ove greške su:

  • duge i složene lozinke ispisane na naljepnicama zalijepljenim na monitor korisnika.
  • pohranjivanje svih lozinki u datoteku koja nije zaštićena (ili je zaštićena mnogo slabija od samog sistema)
  • skladištenje elektronskih ključeva u javnom vlasništvu.
  • čest transfer elektronskih ključeva između korisnika.

Zašto praviti blindirana vrata ako ključ leži ispod tepiha pored vrata?

Prijenos inicijalno šifriranih podataka u nesigurno okruženje.

Kada organizujete sigurnosni sistem, vodite računa da on ispunjava svoju svrhu. Na primjer, naišao sam na situaciju (koja nije vezana za 1C) kada je prvobitno šifrirana datoteka, kada je program radio u otvorenom obliku, stavljena u privremenu mapu, odakle se mogla bezbedno čitati. Vrlo često se sigurnosne kopije šifriranih podataka u čistom tekstu nalaze negdje "u blizini" ovih podataka.

Zloupotreba kriptografskih alata

Kada su podaci u tranzitu šifrirani, ne može se očekivati ​​da podaci neće biti dostupni na mjestima gdje se koriste. Na primjer, IPSec usluge ni na koji način ne sprječavaju mogućnost "slušanja" mrežnog prometa na sloju aplikacije na strani poslužitelja aplikacija.

Stoga, kako bi se izbjegle greške pri implementaciji kriptografskih sistema, potrebno je (u najmanju ruku) učiniti sljedeće prije njegove implementacije.

  • Saznati:
    • Šta treba zaštititi?
    • Koju metodu zaštite treba koristiti?
    • Koje dijelove sistema treba osigurati?
    • Ko će upravljati pristupom?
    • Hoće li šifriranje funkcionirati u svim pravim područjima?
  • Odlučite gdje se informacije pohranjuju, kako se šalju preko mreže i s kojih računala će se pristupiti informacijama. Ovo će pružiti informacije o brzini, kapacitetu i korištenju mreže prije implementacije sistema, što je korisno za optimizaciju performansi.
  • Procijenite ranjivost sistema na različite vrste napada.
  • Razviti i dokumentirati plan sigurnosti sistema.
  • Procijeniti ekonomsku efikasnost (opravdanost) korištenja sistema.

Zaključak

Naravno, u površnom pregledu nemoguće je naznačiti sve aspekte koji se odnose na sigurnost u 1C, ali hajde da izvučemo neke preliminarne zaključke. Naravno, ova platforma se ne može nazvati idealnom - ona, kao i mnoge druge, ima svoje probleme u organizaciji sigurnog sistema. Ali to ni na koji način ne znači da se ovi problemi ne mogu zaobići, naprotiv, gotovo svi nedostaci se mogu otkloniti pravilnim razvojem, implementacijom i upotrebom sistema. Većina problema nastaje zbog nedovoljnog razvoja specifičnog aplikativnog rješenja i njegovog okruženja za izvršavanje. Na primjer, tipična rješenja bez značajnih promjena jednostavno ne podrazumijevaju stvaranje dovoljno sigurnog sistema.

Ovaj članak još jednom pokazuje da bilo koji set sigurnosnih mjera treba da pokrije sve faze implementacije: razvoj, implementaciju, administraciju sistema i, naravno, organizacione mjere. U informacionim sistemima je „ljudski faktor“ (uključujući korisnike) glavna bezbednosna pretnja. Ovaj skup mjera treba da bude razuman i izbalansiran: nema smisla i malo je vjerovatno da će se izdvojiti dovoljna sredstva za organizaciju zaštite, koja premašuje troškove samih podataka.

Kompanija je jedinstvena usluga za kupce, programere, dilere i pridružene partnere. Osim toga, ovo je jedna od najboljih online prodavnica softvera u Rusiji, Ukrajini, Kazahstanu, koja kupcima nudi širok spektar proizvoda, mnogo načina plaćanja, brzu (često trenutnu) obradu narudžbi, praćenje procesa ispunjenja narudžbi u ličnom dijelu.