Ugrađeni jezični snop se prelijeva na server 1c. Problemi s prelijevanjem snopa greške

Slog je, u tom kontekstu, posljednji u prvom međuspremniku koji dodijelite tijekom izvođenja programa. Posljednje, prvo (LIFO) znači da je posljednja stvar koju stavite uvijek prva stvar koju vratite - ako pogodite 2 predmeta na gomilu, "A" i zatim "B", onda prvo što iskočite snop biti će "B", a slijedeća stvar će biti "A".

Kada u svom kodu nazovete neku funkciju, sljedeća naredba nakon poziva funkcije pohranjuje se u stog i bilo koji memorijski prostor koji se može zamijeniti pozivom funkcije. Odabrana funkcija može koristiti više snopaka za svoje lokalne varijable. Kada to učini, oslobodit će lokalni varijabilni prostor koji je koristio i vratiti se na prethodnu funkciju.

Preliv stog

Prepuna snopa je kada ste za snop koristili više memorije nego što je vaš program namijenio. U ugrađenim sustavima možete imati samo 256 bajtova za snop, a ako svaka funkcija iznosi 32 bajta, tada možete imati samo 8 funkcija poziva za funkciju 2 s dubokom funkcijom 1, koja poziva funkciju 3, koja poziva funkciju 4 ... koji poziva funkciju 8, koja poziva funkciju 9, ali funkcija 9 prepisuje memoriju izvan snopa. Ovo može prebrisati memoriju, kôd itd.

Mnogi programeri čine ovu grešku pozivajući funkciju A, koja tada zove funkciju B, koja tada zove funkciju C, koja tada zove funkciju A. Može raditi većinu vremena, ali samo će jedan pogrešan unos uzrokovati da zauvijek kruži dok računalo saznaje da je snop pun.

Rekurzivne funkcije uzrokuju i to, ali ako pišete rekurzivno (tj. Vaša funkcija poziva sebe), toga morate biti svjesni i koristiti statičke / globalne varijable kako biste spriječili beskonačnu rekurziju.

Obično OS i programski jezik koji koristite upravljaju snopom, a to vam je izvan ruke. Trebali biste pogledati svoj grafikon poziva (stablo struktura koja iz vaše glavne točke pokazuje kako se svaka funkcija zove) da biste vidjeli koliko su vaši pozivi funkcija i identificirali petlje i rekurziju koje nisu namijenjene. Namjerne petlje i rekurzije trebalo bi umjetno provjeriti radi pogreške ako se međusobno pozivaju previše puta.

Osim dobre programske prakse, statičkog i dinamičkog testiranja, na ovim sistemima visokog nivoa ne možete puno učiniti.

Ugrađeni sistemi

U ugrađenom svijetu, posebno kod visoke pouzdanosti (automobilski, zrakoplovni, svemirski), radite opsežne provjere i provjere koda, ali radite i sljedeće:

  • Onemogućiti rekurziju i petlje - pravila i testiranje usklađenosti
  • Držite kôd i slažite se na udaljenosti (kôd u flash, složite u RAM i nikad se neće podudarati)
  • Oko hrpe postavite zaštitne trake - prazno područje memorije koje ispunite magičnim brojem (obično je program prekida, no ovdje postoji mnogo opcija), i stotine ili tisuće puta u sekundi gledate zaštitne trake kako biste bili sigurni da nisu prebrisane.
  • Koristite zaštitu od memorije (tj. Ne izvršavajte na snopu, ne čitajte ili ne upišite direktno u snop)
  • Prekidi ne pozivaju sekundarne funkcije - postavljaju zastave, kopiraju podatke i dopuštaju aplikaciji da se brine o tome (u suprotnom, možete doći 8 duboko u stablo poziva funkcija, imati prekid, a zatim još neke funkcije unutar prekida, izazivajući bacanje). Imate više stabala poziva - jedno za glavne procese i jedno za svaki prekid. Ako vas prekidi mogu međusobno prekinuti ... eto, postoje zmajevi ...

Jezici i sistemi na visokom nivou

Ali na jezicima visokog nivoa koji rade na operativnim sistemima:

  • Smanjite lokalnu varijablu za pohranu (lokalne varijable su pohranjene u hrpi), iako su prevoditelji prilično pametni u vezi s tim i ponekad će staviti velike komade na hrpu ako je stablo poziva malo)
  • Izbjegavajte ili strogo ograničite rekurziju
  • Ne prekidajte svoje programe predaleko na manje i manje funkcije - čak i zanemarujući lokalne varijable, svaki poziv funkcije troši do 64 bajta na snopu (32-bitni procesor, čuvajući polovinu procesora, zastave itd.).
  • Držite stablo poziva plitkim (slično gore)

Web serveri

Ovisi o pješčaniku koji imate, možete li kontrolirati ili čak vidjeti snop. Verovatno je da možete obraditi web servere kao i bilo koji drugi jezik visokog nivoa, a operativni sistem vam je prilično izvan ruke, ali provjerite jezik i snop poslužitelja koji koristite. Na primjer, moguće je podijeliti snop na vašem SQL poslužitelju.

Vodič za programere Informix® DataBlade ™ API dostupan je za preuzimanje na. Odjeljak Upravljanje prostorom stog opisuje kako kreirati prilagođene funkcije (UDR-ove). Ovaj članak daje dodatne informacije i savjete za uklanjanje pogrešaka.

Podaci u nastavku vrijede bez obzira je li UDR pokrenut na definiranom korisničkom virtualnom procesoru (VP) ili na CPU VP-u. Nit se može premjestiti na korisnički definirani vCPU neposredno prije izvršenja UDR-a.

Koji je paket veličina dodijeljen UDR-ovima?

Veličina skupa dostupnog za UDR ovisi o načinu stvaranja UDR-a:

    pomoću STACK modifikatora, koji omogućava UDR-u da koristi svoj namjenski skup,

    bez STACK modifikatora, što znači da će UDR dijeliti snop dodijeljen od strane servera s nitom koji čini zahtjev. Veličina snopa u ovom slučaju bit će određena vrijednošću parametra STACKSIZE u konfiguracijskoj datoteci onconfig.

STACK modifikator

Izrazi CREATE PROCEDURE ili CREATE FUNCTION imaju opcijski STACK modifikator koji vam omogućuje da odredite količinu prostora za slaganje u bajtovima koju UDR treba izvršiti.

Ako koristite modifikator STACK prilikom stvaranja UDR-a, poslužitelj će dodijeliti i dodijeliti prostor snopa svaki put kada se UDR izvrši. Stvarna raspoloživa veličina je STACK u bajtovima minus nešto nadzemno, ovisno o broju argumenata funkcije.

Ako je vrijednost STACK manja od STACKSIZE vrijednosti u onconfig datoteci (pogledajte sljedeći odjeljak), tada će se stog dodijeljen za UDR automatski zaokružiti na vrijednost STACKSIZE.

STACKSIZE konfiguracijski parametar

Konfiguracijska datoteka onconfig sadrži parametar STACKSIZE koji definira zadanu veličinu snopa za korisničke niti.

Ako prilikom stvaranja UDR-a ne odredite STACK, poslužitelj ne dodijeli dodatni prostor za slaganje da bi izveo taj UDR. Umjesto toga, UDR koristi prostor za slaganje dodijeljen za ispunjavanje zahtjeva. Dostupna veličina snopa ovisit će o opštem trošku izvršenja funkcije na SQL razini.

Korak niti se dodjeljuje jednom za određenu nit koja postavlja zahtjev. Performanse su bolje kada UDR dijeli jednu nit sa jednom snopom, jer poslužitelj ne troši resurse na dodjelu dodatnog snopa za svaki UDR poziv. S druge strane, ako se veličina korištenog snopa UDR približi vrijednosti STACKSIZE, može uzrokovati preljev snopa kada poziva funkciju kao dio složenog zahtjeva (u ovom slučaju je manje prostora za slaganje dostupno za izvršavanje UDR-a).

Ne zaboravite da ne postavljate STACKSIZE previsoko, jer će to utjecati na sve korisničke teme.

Kada biste trebali upravljati veličinom snopa?

Y Morate upravljati prostorom snopa ako UDR upućuje rekurzivne pozive ili ako UDR-u zahtijeva više prostora za slaganje nego što je prema zadanom dostupno u nizu zahtjeva zahtjeva (STACKSIZE).

Postoje dva načina za povećanje skupa za izvršavanje UDR-ova:

    Navedite STACK modifikator pri kreiranju UDR-a.

    Za upućivanje rekurzivnih poziva koristite mi_call () (pogledajte primjer vodiča za programere Informix DataBlade API-ja).

Ako ne odredite veličinu pomoću STACK i ako ne koristite mi_call () za povećanje trenutnog snopa, i ako UDR napravi nešto što zahtijeva puno prostora za slaganje, tada će to prouzrokovati prelijevanje snopa.

Imajte na umu da neke funkcije poput mi_ * dodaju novi segment snopa za vlastito izvršavanje. Ti se segmenti oslobađaju po povratku pozivaocu UDR.

Šta ako nešto pođe po zlu?

Nadgledanje upotrebe snopa

Svrha nadgledanja je identificirati određeni UDR koji uzrokuje preljev snopa tako da možete promijeniti vrijednost STACK posebno za određeni UDR.

    Nadgledanje upotrebe snopa pomoću "onstat -g sts"

    Promatrajte sesiju izvršavajući SQL upit s "onstat -g ses session_id"

Nakon što identificirate SQL upit koji završava preljevom snopa, trebali biste odrediti upotrebu snopa zasebnim izvršavanjem upita s UDR-ovima koji su dio originalnog upita.

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

alter funkcija MyFoo (lvarchar, lvarchar) sa (add stack \u003d 131072);

Nakon promjene STACK vrijednosti, trebali biste testirati izvorni upit kako biste bili sigurni da je sada stabilan.

Povećajte STACKSIZE

Ili pokušajte povećati STACKSIZE vrijednost. Provjerite je li to riješilo problem. (Ne zaboravite da vratite staru vrijednost kasnije).

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

    Omogući provjeravanje memorijske šifre i provjere baze podataka. Odjeljak "Problemi uklanjanja pogrešaka" u odjeljku Memorija za UDR-ove objašnjava kako to učiniti.

    Razmislite koristeći mi_lvarchar. Obratite posebnu pažnju na mjesta na kojima je mi_lvarchar proslijeđen funkciji koja očekuje da će kao argument dobiti null-terminated niz.

    Smanjite broj CPU (ili korisničkih) VP-ova na jedan da biste brže reproducirali problem.

mi_print_stack () - Solaris

Informix dinamički poslužitelj za Solaris OC uključuje funkciju mi_print_stack () koja se može pozvati u UDR. Prema zadanim postavkama, ova funkcija sprema okvir snopa u sljedeću datoteku:

/tmp/default.stack

Ne možete promijeniti ime izlazne datoteke, ali možete promijeniti njezinu lokaciju promjenom vrijednosti varijable okoline DBTEMP. Provjerite može li korisnik informix upisati u $ DBTEMP direktorij. Sve pogreške koje su se dogodile tijekom izvršavanja mi_print_stack () ispisuju se u $ MSGPATH.

Ova je funkcija dostupna samo za Solaris OC.

Rječnik

Izrazi i kratice korišteni u ovom članku:

UDRKorisnički definirana rutina
VPVirtual Processor

14.04.2016 Verzija 3.22 Izmijenjeni sučelje, ispravljene pogreške pri prijenosu registra, promijenjen je postupak prijenosa organizacije i računovodstvene politike. Platforma 8.3.7.2027 BP 3.0.43.174
17.03.2016 Verzija 3.24 Fiksne bugove. Platforma 8.3.8.1747 BP 3.0.43.241
16.06.2016. Verzija 3.26 Fiksne greške. Platforma 8.3.8.2088 BP 3.0.44.123
16.10.2016. Verzija 4.0.1.2 Fiksni 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 Promijenio je algoritam za prijenos registara koji se odnose na direktorije, primijećene su ispravljene pogreške, ispravljen prijenos s prepisivanjem veza.
29.05.2017. Verzija 4.0.4.5 Izmijenjen prijenos pokreta, dodatni prikaz pokreta prenesenih dokumenata, nešto drugo ...
30.05.2017. Verzija 4.0.4.6 Ispravljen je program greške prilikom popunjavanja popisa postojećih referenci u izvoru (zahvaljujući shoy)
17.06.2017 Verzija 4.0.5.1 Algoritam za prijenos pokreta je promijenjen.
19.07.2017 Verzija 4.0.5.4 Prijenos CI-ja s BP 2.0 je promijenjen. Neočekivano, Smilegm je prebačen sa UT 10.3, ova verzija je malo popravila transfer za takvu situaciju)))
08.10.2017. Verzija 4.0.5.5 Ispravljene pogreške pri prenosu s 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 Fiksne greške
12/06/2017 Verzija 5.2.0.4 Algoritam pretraživanja veza redizajniran je. Dodani postupci prijenosa s BP 1.6, nema čvršćeg vezivanja za BP - možete sigurno koristiti "gotovo" iste konfiguracije za prijenos podataka. Pokušat ću što prije ispraviti sve komentare.
12.08.2017. Verzija 5.2.1.3. Dodan je algoritam za prenošenje plata sa BP.2.0 na BP 3.0. Uključene su promene za deljenje između istih konfiguracija.
19.12.2017. Verzija 5.2.2.2 Ispravljen je prijenos nezavisnih registra podataka za mape koji se nalaze u dimenzijama tih registara.

12.6.2017. Nova verzija obrade 5.2.0.4. Među značajnim promjenama je mogućnost prelaska sa BP 1.6 na BP 3.0. Glavna promjena je upravljanje pretraživanjem referenciranih veza - u prethodnim verzijama pretraživanje je bilo GUID, a u ovoj verziji možete omogućiti pretraživanje "Po rekvizitima":

17.01.2018. Verzija 5.2.2.3 Ispravljene greške podređenih direktorija i periodičnih registara podataka.

19.07.2018. Verzija 5.2.2.8 Fiksne greške.

u kojem možete postaviti detalje pretraživanja za bilo koji direktorij. Sam taj režim "nastao" je na brojnim zahtjevima radnika, za slučaj kada je potrebna razmjena u već postojećoj bazi podataka koja već sadrži podatke (na primjer, spajanje računovodstva dvije organizacije u jednu bazu podataka).

Objavljeni su 21.12.2015. Platforma 8.3.7.1805 i BP 3.0.43.29, a nova obrađena verzija 3.1 :-) (opis dolje). Nova funkcionalnost - mogućnost uspoređivanja stanja i preokreta između dvije baze BP (za sve račune, ako su kontni grafikoni isti, ili za odvojene podudarajuće račune, sa ili bez analitike).
01.03.2016. Verzija 3.5 - promijenila mehanizam za povezivanje s izvornom bazom - usklađena s BSP 2.3.2.43. Fiksne manje greške. Platforma 8.3.7.1845, BP 3.0.43.50
16.02.2016 Verzija 3.6 - Dodana je zastavica "Postavi ručnu ispravku" za dokumente prebačene pokretima. Fiksni prijenos pokreta - dokumenti s datumom kraćim od početka razdoblja prenose se bez pomicanja. Platforma 8.3.7.1917, BP 3.0.43.116
22.03.2016 Verzija 3.10 - Dodana je zastava "Uvijek prekriži veze" za obavezno prepisivanje referentnih objekata (brzina prijenosa je značajno smanjena, ali ponekad je potrebna). Dodana je kartica "Priprema" na kojoj možete konfigurirati korespondenciju izvornih i odredišnih grafikona (na razini s šiframa računa) i prijenos konstanti. Platforma 8.3.7.1970, BP 3.0.43.148

03.03.2016 Verzija 3.11 Promijenila je popunjavanje popisa dokumenata koji postoje u izvoru: popunjavanje je obavljeno u skladu s kretanjem u kontnom okviru, to je učinjeno jednostavno vezama za razdoblje, kao i na // web stranici / javni / 509628 /

Obrada je namijenjena prijenosu podataka za bilo koje razdoblje slično "Iskrcavanje MXL učitavanja" iz ITS-a, samo bez korištenja XML, JSON i drugih međuprostornih datoteka - razmjena iz baze podataka u bazu podataka putem COM-a. U verzijama starijim od 3.10 koristi se veza prema algoritmu iz BSP-a, u kojoj je omogućena registracija comcntr.dll (ako OS "dopušta"), kao i razne poruke kada je nemoguće uspostaviti vezu, na primjer - "Infobase je u procesu ažuriranja" itd. ... Dodana je provjera izbora prijemnika kao izvora IS - izdaje se upozorenje.

Može se koristiti za:

1. Prijenos normativnih i referentnih informacija (NSI) s izvora IS na prijemnik IS (prijenos cjelokupnog NSI-a vrši se na zahtjev korisnika, potrebni referentni priručnici itd. Prenose se vezama za bilo koji prijenos).

2. Prenos dokumenata za bilo koji odabrani period.

3. Prijenos svih podataka s "slomljenog" IB-a, ako se pokreće u načinu 1C: Enterprise, a prijenos podataka ili pokretanje Konfiguratora nije moguće.

Značajka obrade - informacijska sigurnost prijemnika i izvora može biti različita prijenosa od 2.0 do 3.0 - izdanja su različita, ali prijenos djeluje !!! Neskladni atributi se zanemaruju ili se za njih moraju odrediti algoritmi prijenosa.

Komentar: Konverzija podataka se NE koristi! I ne pitajte zašto !!! Za najagresivnije - BP 3.0 se menja gotovo svakodnevno, više nema snage za ažuriranje pravila transfera - ovde je sve lakše :-).

Još jedna karakteristika obrade je ta što se lansira u IS prijemnika (najbliži analozi u pogledu funkcionalnosti rade obrnuto - od izvora do prijemnika).

Početak rada - morate odrediti razdoblje obrade, navesti organizaciju iz izvora, ona će biti prebačena na prijemnik.

Kada se organizacija prenese, prenose se računovodstvena politika i “prateći” registar podataka. Stoga, kad prvi put odaberete organizaciju u izvoru, proći će neko vrijeme prije nego što se pojavi na prijemniku.

Karte računa izvora i primatelja moraju biti iste, različiti računi u verziji 2. * neće se prenijeti na primatelja, postavljanje korespondencije računa i analitike planira se uključiti u budućnosti. Računi se prenose kodovima koji nisu pronađeni u prijemniku NE KREIRAJTE !!!

Ostatak objekata prenose interni identifikatori (GUID), pa obratite pažnju na neke ključne referentne knjige, na primjer - Valute.

Ako planirate razmjenu s "čistom" osnovom, tada je bolje izbrisati referentne knjige ispunjene u prvom startu prije razmjene. Za to je predviđena stranica za obradu na kojoj možete dobiti te elemente direktorija i izbrisati ih. U najmanju ruku, morate ukloniti "RUB" valutu. - od tada umnožavanje je gotovo neizbježno (u principu to se lako ispravlja nakon razmjene pretraživanja i zamjene duplikata ugrađenih u BP 3.0).

U obradi se pretpostavlja poziv na stranicu za brisanje direktorija, kad je otvoreni početni obrazac za ispunjavanje:

Kada se obrada otvori, prikazat će se stranica za brisanje direktorija koji su ispunjeni pri početnom punjenju:

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


Važno je provjeriti korespondenciju kontnog plana izvora i odredišta i obavezno navesti korespondenciju računa.

Nema potrebe za brisanjem unaprijed definiranih elemenata direktorija - oni se prenose putem konfiguracijskih identifikatora (ne GUID).

Objekte za prijenos možete odabrati pomoću obrasca za odabir iz direktorija i dokumenata (Registri podataka povezani s ovim objektom automatski će se migrirati, tako da ih ne morate zasebno odabrati).Prijenos registara privremeno je onemogućen - za sastavljanje morate sastaviti popis registara - nešto se mora prenijeti, nešto nije, u ovoj fazi je dovoljno ono što se prenese u direktorije, popis registara za prijenos bit će u obrascu, u budućim verzijama.

Pri razmjeni s 2.0, neki se detalji (na primjer, kontaktne informacije) prenose pomoću algoritma ugrađenog u obradu, budući da za 2.0 i 3.0 pohranjuju se različito. Situacija je slična s nizom dokumenata (na primjer, Ispravljanje duga).

Popis vrsta objekata može se popuniti na različite načine, a u verziji 3.22 nalazi se u podizborniku, promjene su zapisane na slici:

Postoji pojednostavljenje upotrebe obrade - ne morate odabrati direktorije za razmjenu, već jednostavno popunite popis vrsta u prijemniku samo s onim tipovima direktorija koji u izvoru imaju najmanje jedan zapis.

Obrada ima ugrađeni izgled, u kojem su navedene mape koje nije potrebno prenijeti iz izvora na odredište (izgled "Izuzmi iz prijenosa"). Možete dodati (izbrisati) sve reference ovom izgledu. Ako vam ne trebaju prenijeti sve referentne podatke, dovoljno je prenijeti dokumente, čiji se popis također može dobiti bez odabira vrsta, samo popunite sve izvorne dokumente za koje postoje transakcije.

Osigurava se prijenos dokumenata pokretima, za razmjene 3,0 do 3,0, a prema shemama računa to funkcionira jedan prema jedan, pri razmjeni 2,0 do 3,0 moguće su pogreške, stoga se preporučuje prijenos dokumenata bez pomicanja, a zatim ih jednostavno ponovno postavite u prijamnik. Prilikom prijenosa dokumenata pokretima postavlja se zastava "Ručna korekcija".

Atribut "Objavljeno" postavljen je u dokumentima prijemnika isti kao u izvoru, ali pokreti (ako nisu preneseni) pojavit će se tek nakon što se dokumenti postave, na primjer, pomoću obrade ugrađene u obradu dokumenata BP 3.0 Grupe (preporučena opcija) ili iz ove obrade (ovde se nalazi dugme "Objavi dokumente").

Ako se planira obrada koristiti za trajnu razmjenu, ona se može registrirati u IS prijemnika (tipka "Registriraj"). Za jednokratne transfere možete jednostavno koristiti putem datoteke - Otvori.

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 je mnogo promijenjena).

Promijenjeno:

Dijalog za odabir opcije veze, zastava klijent-poslužitelj je uvijek dostupna, ovisno o njezinoj instalaciji, bilo je dostupan izbor baze mape datoteke ili polja s nazivom baze na poslužitelju i naziv samog poslužitelja (ispravljena je pogreška dijaloške verzije 2.15)

- NOVO FUNKCIONALNO: Mehanizam usklađivanja zaostalih i okretaja između baze izvora i prijemnika u različitim stupnjevima detalja:


Mislim da je izbor mogućnosti pomirenja jasan iz brojke:


Postoje razlike u upotrebi na tankom i debelom klijentu - u debelom se prozor za usporedbu datoteka odmah prikazuje:


U tankom klijentu nisam izopačio programsko pritiskanje dugmeta, predlažem jednostavnu opciju za prikaz uporednog prozora:


Poređenje u tankom klijentu, IMHO, je povoljnije, budući ima navigacijske tipke za razlike, što je prikladnije za velike tablice od pomicanja mišem:

22.03.2016 Verzija 3.10 - Dodana je zastava "Uvijek prekriži veze" za obavezno prepisivanje referentnih objekata (brzina prijenosa je značajno smanjena, ali ponekad je potrebna). Dodana je kartica "Priprema" na kojoj možete konfigurirati korespondenciju izvornih i odredišnih grafikona (na razini s šiframa računa) i prijenos konstanti. Platforma 8.3.7.1970, BP 3.0.43.148

- NOVO FUNKCIONALNO:Prije prijenosa dokumenata preporučuje se provjera kontnog plana na dosljednost u izvoru i odredištu, kao i konzistentnost utvrđenih konstanti.

U tu svrhu dodajte karticu "Priprema" u koju možete postaviti ove korespondencije:


Algoritam za popunjavanje tablice dopisivanja računa je jednostavan - zaokreti koji postoje u izvoru analiziraju se, a svaki račun koji se tamo nalazi traži se podudaranje u prijemniku po kodu, ako se ne pronađe podudaranje, u tablici se prikazuje redak s šifrom računa prema kojem trebate odabrati račun primatelja, a on će se koristiti kad transfer. Dopisnost nauke uspostavlja se na nivou kodova.

Za provjeru i prijenos usklađenosti postavljenih konstanti koristi se odgovarajuća tablica:

Po potrebi ispunjavamo - prenosimo. Prenose se samo označene konstante ...

Programiranje je posebno područje memorije organizirano na temelju LIFO reda (Last in, first out - last in, first out). Naziv "stog" dolazi od analogije principa njegove konstrukcije sa snopom ploča - ploče možete postavljati jedna na drugu (način dodavanja u snop, "guranje", "guranje"), a zatim ih pokupiti, počevši od vrha (način dobivanja vrijednosti iz snopa, "pop", "pop"). Programiranje se naziva i stack poziva, izvedbeni snop, stack stroja (kako se ne bi zbunili sa "stack" - apstraktna struktura podataka).

Čemu služi hrpa? Omogućuje vam prikladno organiziranje rutine poziva. Kada se pozove, funkcija prima neke argumente; također bi trebao negdje pohraniti svoje lokalne varijable. Uz to, moramo uzeti u obzir da jedna funkcija može pozvati drugu funkciju, koja također mora proći parametre i pohraniti svoje varijable. Upotrebom snopa, prilikom prolaska parametara, trebate ih samo staviti na snop, tada ih pozvana funkcija može "istisnuti" i koristiti. Lokalne varijable također se mogu pohraniti na isto mjesto - na početku svog koda funkcija dodjeljuje dio memorije snopa, kad se vrati kontrola, očisti i oslobodi. Programeri na jezicima višeg nivoa obično ne razmišljaju o takvim stvarima - prevodilac generira sav potreban rutinski kod za njih.

Posledice greške

Sada smo skoro blizu problema. U apstraktnom obliku, snop je beskonačno spremište u koje se mogu beskrajno dodavati novi elementi. Nažalost, u našem je svijetu sve konačno - a memorija za gomilu nije iznimka. Što se događa ako se završi kada se argumenti funkcija gurnu u snop? Ili neka funkcija dodjeljuje memoriju za svoje varijable?

Pojavit će se pogreška koja se naziva prelijevanje snopa. Budući da je snop potreban za organiziranje poziva na korisnički definirane funkcije (a gotovo svi programi na suvremenim jezicima, uključujući i objektno orijentirane, izgrađeni su na temelju funkcija na ovaj ili onaj način), više ih se ne može nazivati. Stoga operativni sustav preuzima kontrolu, briše stack i prekida program. Ovdje možemo naglasiti razliku između prepunjenosti snopa i - u prvom se slučaju pojavljuje pogreška prilikom pristupa pogrešnom području memorije, a ako u ovoj fazi ne postoji zaštita, ne prikazuje se u ovom trenutku - ako su okolnosti uspješne, program može uspjeti. Ako je samo zaštićena memorija zaštićena, dolazi. U slučaju snopa, program se sigurno završava.

Da biste bili potpuno tačni, treba imati na umu da je takav opis događaja istinit samo za prevodioce koji sastavljaju u izvorni kod. U upravljanim jezicima virtualna mašina ima vlastiti gomila upravljanih programa, čije je stanje mnogo lakše nadzirati, a možete čak i priuštiti da izbacite izuzetak programa kad dođe do prelijevanja. U C i C ++ ne možete računati na takav "luksuz".

Uzroci pogreške

Šta može dovesti do tako neugodne situacije? Na osnovu gore opisanog mehanizma, jedna od opcija je previše ugniježđenih funkcija. Ovaj scenarij je posebno vjerojatan kada se koristi rekurzija. Beskonačna rekurzija (u nedostatku mehanizma „lijenih“ izračunavanja) prekida se na taj način, za razliku od toga koji ponekad ima korisne aplikacije. Međutim, s malom količinom memorije koja je dodijeljena za snop (što je, na primjer, tipično za mikrokontrolere), može biti dovoljan jednostavan slijed poziva.

Druga opcija su lokalne varijable koje zahtijevaju puno memorije. Dobijanje lokalnog niza od milion elemenata ili milion lokalnih varijabli (nikad ne znate što se događa) nije dobra ideja. Čak i jedan poziv takvoj "pohlepnoj" funkciji lako može uzrokovati prelijevanje snopa. Za dobivanje velikih količina podataka bolje je koristiti dinamičke memorijske mehanizme, koji će omogućiti obradu pogreške njenog nedostatka.

Međutim, dinamička memorija je prilično spora u smislu raspodjele i puštanja (budući da operativni sustav to radi), osim toga, s direktnim pristupom, morate je ručno dodijeliti i otpustiti. Memorija na snopu dodjeljuje se vrlo brzo (u stvari, trebate samo promijeniti vrijednost jednog registra), osim toga, objekti dodijeljeni u snopu automatski pozivaju destruktore kad vratite kontrolu nad funkcijom i očistite stack. Naravno, odmah postoji želja da se sakupi uspomena. Stoga je treći način prelijevanja neovisna dodjela programera u memorijski snop. Posebno u tu svrhu C knjižnica pruža funkciju alokacije. Zanimljivo je napomenuti da ako funkcija za dodjelu dinamičkog memorijskog malloka ima vlastiti „blizanci“ za njegovo oslobađanje, tada funkcija alloka nema ga - memorija se automatski oslobađa nakon vraćanja kontrole u funkciju. Možda to samo komplicira situaciju - uostalom, neće uspjeti osloboditi memoriju prije izlaska iz funkcije. Iako prema man stranici, funkcija aloka ovisi o stroju i prevodiocu; u mnogim je sustavima njegova primjena problematična i sadrži brojne pogreške; njegova upotreba je vrlo neozbiljna i nije odobrena "- i dalje se koristi.

Primjeri

Kao primjer, razmotrite kod za rekurzivnu pretragu datoteka smješten na MSDN:

Poništi DirSearch (String * sDir) (pokušaj (// Pronađi podmape u mapi koja je proslijeđena. String * d \u003d Direktorija :: GetDirectories (sDir); int numDirs \u003d d-\u003e get_Length (); for (int i \u003d 0; i< numDirs; i++) { // Find all the files in the subfolder. String* f = Directory::GetFiles(d[i],textBox1->Tekst); int numFiles \u003d f-\u003e get_Length (); za (int j \u003d 0; j< numFiles; j++) { listBox1->Stavke-\u003e Dodaj (f [j]); ) DirSearch (d [i]); )) ulov (Sistem :: Izuzetak * e) (MessageBox :: Prikaži (e-\u003e Poruka);))

Ova funkcija prima popis datoteka navedenog direktorija, a zatim se poziva za one elemente popisa za koje se ispostavilo da su direktori. U skladu s tim, s prilično dubokim stablom datotečnog sistema, dobit ćemo logičan rezultat.

Primjer drugog pristupa preuzet iz pitanja "Zašto se stog preliva?" s web mjesta zvanog Stack Overflow (web mjesto je skup pitanja i odgovora na temu bilo kojeg programera, a ne samo prelijevanje snopa, kao što se možda čini):

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

Kao što vidite, glavna funkcija raspoređuje memoriju na hrpi za nizove int i float vrsta s po milionom elemenata, što ukupno daje nešto manje od 8 megabajta. S obzirom da Visual C ++ prema zadanom rezerviše samo 1 megabajt za stek, odgovor postaje očigledan.

A evo primjera preuzeto iz GitHub-ovog spremišta projekta Lightspark Flash player:

DefineSoundTag :: DefineSoundTag (/ * ... * /) (// ... nepotpisani int zvukDataLength \u003d h.getLength () - 7; nepotpisani char * tmp \u003d (nepotpisani znak *) aloka (soundDataLength); // .. .)

Nada se da h.getLength () - 7 neće biti prevelik da spriječi prelijevanje u sljedećem retku. Ali je li uštedeno vrijeme za rušenje „potencijalnog“ programa pri dodjeli memorije?

Sažetak

Prepuna snopa je kobna greška koja najčešće sadrži programe koji sadrže rekurzivne funkcije. Međutim, čak i ako program ne sadrži takve funkcije, prelijevanje je još uvijek moguće zbog velike količine lokalnih varijabli ili pogreške u ručnom raspoređivanju memorije na stog. Sva klasična pravila ostaju na snazi: ako postoji izbor, umjesto rekurzije, bolje je preferirati iteraciju, a također ne raditi ručni rad umjesto prevodioca.

Bibliografski popis

  • E. Tanenbaum. Arhitektura računara.
  • Wikipedija Preliv stog.
  • Preliv stog. Prelijevanje snopa C ++.

Ovaj članak još jednom pokazuje da bilo koji skup sigurnosnih mjera treba obuhvatiti sve faze implementacije: razvoj, uporabu, administraciju sustava i, nužno, organizacijske mjere. U informacijskim sistemima glavni sigurnosni prijetnji je "ljudski faktor" (uključujući korisnike). Ovaj skup mjera trebao bi biti razuman i uravnotežen: nema smisla i malo je vjerovatno da će biti dodijeljeno dovoljno sredstava za organiziranje zaštite koja prelazi troškove samih podataka.

Uvod

1C: Preduzeće je najrasprostranjeniji računovodstveni sistem u Rusiji, ali, uprkos tome, prije verzije 8.0, njegovi programeri su posvetili vrlo malo pažnje sigurnosnim pitanjima. U osnovi, naravno, to je diktiralo cjenovnu nišu proizvoda i usredotočenost na mala poduzeća u kojima nema kvalificiranih IT stručnjaka, a mogući troškovi implementacije i održavanja sigurnog sustava bili bi neizmjerno skupi za poduzeće. S izdanjem verzije 8.0, naglasak je trebao biti promijenjen: cijena rješenja značajno je porasla, sustav je postao mnogo skalabilniji i fleksibilniji - zahtjevi su se značajno promijenili. Je li sustav postao dovoljno pouzdan i siguran je vrlo individualno pitanje. Osnovni informacijski sistem modernog poduzeća mora zadovoljiti barem sljedeće sigurnosne zahtjeve:

  • Prilično niska verovatnoća kvara sistema iz unutrašnjih razloga.
  • Pouzdana autorizacija korisnika i zaštita podataka od pogrešnih radnji.
  • Efikasan sistem dodjeljivanja korisničkih prava.
  • Online sigurnosno kopiranje i oporavak u slučaju kvara.

Da li rješenja bazirana na 1C: Enterprise 8.0 ispunjavaju takve zahtjeve? Ne postoji jedinstven odgovor. Uprkos značajnim promjenama u sistemu kontrole pristupa, još uvijek postoji puno neriješenih pitanja. Ovisno o tome kako je sustav dizajniran i konfiguriran, svi ti zahtjevi možda nisu ispunjeni ili se primjenjuju u dovoljnoj mjeri za ovu implementaciju, ali vrijedi obratiti pažnju (a to je značajna posljedica „mladosti“ platforme) na koju morate istinski primijeniti Titanic napori.

Ovaj je članak namijenjen programerima i implementatorima rješenja zasnovanih na platformi 1C: Enterprise, kao i administratorima sustava organizacija koje koriste 1C: Enterprise te opisuje neke aspekte razvoja i konfiguriranja verzije sustava klijent-poslužitelj sa stanovišta organizacije informacijske sigurnosti. Ovaj se članak ne može koristiti kao zamjena za dokumentaciju, već pokazuje samo neke točke koje u njemu još nisu odražene. I, naravno, niti ovaj članak, niti sva dokumentacija ne mogu odražavati složenost problema izgradnje sigurnog informacijskog sistema, koji istovremeno mora zadovoljiti sukobljene zahtjeve sigurnosti, performansi, praktičnosti i funkcionalnosti.

Klasifikacija i terminologija

Ključni predmet razmatranja u članku su prijetnje informacijama.

Informacijska prijetnja - mogućnost situacije da će podaci biti neovlašteno pročitani, kopirani, modificirani ili blokirani.

A na temelju ove definicije u članku su prijetnje informacijama klasificirane na sljedeći način:

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

Sve prijetnje dijele se na namjerne i nenamjerne. Poziva se realizirana informacijska prijetnja incident. Značajke sistema su:

Ranjivosti - karakteristike koje vode ka incidentima Zaštitne mjere - karakteristike koje blokiraju mogućnost incidenta

U osnovi se smatraju samo oni slučajevi čija vjerojatnost nastaje upotrebom tehnološke platforme 1C: Enterprise 8.0 u verziji klijent-poslužitelj (nadalje, u slučajevima kada to ne proturječi značenju samo 1C ili 1C 8.0). Definišemo sledeće glavne uloge u odnosu na upotrebu sistema:

  • Operatori - korisnici s ograničenim pravima na aplikaciji za pregled i izmjenu podataka, ali koji nemaju administrativne funkcije
  • Sistemski administratori - korisnici s administrativnim pravima u sustavu, uključujući administrativna prava u operativnim sustavima aplikacijskog poslužitelja i MS SQL servera, administrativna prava na MS SQL itd.
  • IS administratori - korisnici kojima su dodijeljene određene administrativne funkcije u informacijskoj bazi 1C (poput dodavanja korisnika, testiranje i ispravljanje, sigurnosna kopija, postavljanje aplikacijskog rješenja itd.)
  • Programeri sistema - korisnici koji razvijaju aplikativno rješenje. Općenito, oni možda nemaju pristup radnom sistemu.
  • Osobe koje nemaju direktan pristup sistemu - korisnici kojima nije dodijeljeno pravo pristupa 1C, ali koji u određenoj ili drugoj mjeri mogu utjecati na rad sustava (obično su to svi korisnici iste Active Directory domene u koju je sustav instaliran). Ova kategorija se prvenstveno smatra identifikacijom potencijalno opasnih entiteta u sistemu.
  • Automatizirani administrativni scenariji - programi na koje su neke funkcije prenesene, osmišljeni za automatsko izvršavanje određenih radnji (na primjer, podaci za uvoz-izvoz)

Ovdje treba napomenuti dvije točke: prvo, ova je klasifikacija vrlo gruba i ne uzima u obzir podjelu unutar svake grupe - ta će se podjela stvoriti za neke specifične slučajeve, a drugo, pretpostavlja se da drugi ljudi ne mogu utjecati na rad sustava, što moraju se osigurati vanjskim sredstvima u odnosu na 1C.

Svaki sigurnosni sistem trebao bi se stvoriti uzimajući u obzir izvodljivost i troškove vlasništva. Općenito, prilikom razvoja i implementacije informacijskog sustava potrebno je da cijena zaštite sistema treba odgovarati:

  • vrijednosti zaštićenih podataka;
  • trošak stvaranja incidenta (u slučaju namjerne prijetnje);
  • financijski rizik u slučaju incidenta

Besmisleno je i štetno organizirati odbranu puno skuplju od procjene njezine financijske učinkovitosti. Postoji nekoliko metoda za procjenu rizika od gubitka informacija, ali oni nisu uzeti u obzir u ovom članku. Drugi važan aspekt je održavanje ravnoteže između često konfliktnih zahtjeva za informacionom sigurnošću, performansama sistema, upotrebljivosti sistema, brzini razvoja i implementacije i drugim zahtjevima za informatičke sisteme poduzeća.

Ključne karakteristike mehanizma bezbednosti informacija u sistemu

1C: Enterprise 8.0 dolazi u dve verzije: datoteka i klijent-poslužitelj. Iz verzije datoteke se ne može smatrati da osigurava informacijsku sigurnost iz sljedećih razloga:

  • Podaci i konfiguracija se pohranjuju u datoteku dostupnu za čitanje i pisanje svim korisnicima sistema.
  • Kao što će biti prikazano u nastavku, autorizaciju sistema je vrlo lako zaobići.
  • Integritet sistema pruža samo jezgra klijentovog dijela.

U verziji klijent-poslužitelj MS SQL Server koristi se za spremanje podataka, što osigurava:

  • Pouzdanije čuvanje podataka.
  • Izolacija datoteke iz direktnog pristupa.
  • Napredniji mehanizmi za transakcije i zaključavanje.

Uprkos značajnim razlikama između datotečne i klijent-poslužiteljske verzije sustava, imaju jedinstvenu shemu kontrole pristupa na razini aplikacijskog rješenja, koja pruža sljedeće značajke:

  • Autorizacija korisnika lozinkom postavljenom u 1C.
  • Autorizacija korisnika za trenutnog Windows korisnika.
  • Dodjeljivanje uloga sistemskim korisnicima.
  • Ograničenje obavljanja administrativnih funkcija po ulozi.
  • Dodjeljivanje dostupnih sučelja prema ulozi.
  • Ograničavanje pristupa objektima metapodataka po ulozi.
  • Ograničavanje pristupa detaljima predmeta prema ulozi.
  • Ograničavanje pristupa objektima podataka prema parametrima uloge i sesije.
  • Ograničenje interaktivnog pristupa podacima i izvršnim modulima.
  • Neka ograničenja u izvršavanju koda.

Općenito, korištena šema pristupa podacima prilično je tipična za informacijske sustave ovog nivoa. Međutim, u vezi s ovom implementacijom troslojne arhitekture klijent-poslužitelj, postoji nekoliko temeljnih aspekata koji vode do relativno velikog broja ranjivosti:

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

    Nešto pojednostavljeni dijagram faza obrade podataka koji su značajni sa sigurnosnog stajališta prikazan je na slici 1. Opće pravilo za 1C je smanjiti ograničenja dok pomičete ovu shemu, prema tome, korišćenje ranjivosti na jednom od gornjih nivoa može poremetiti sistem na svim nivoima.

  2. Neadekvatno ispravljeni pogrešni postupci za prenesene podatke tijekom prijelaza s razine na razinu.

    Nažalost, nisu svi unutarnji mehanizmi sustava idealno otklonjeni, posebno za ne-interaktivne mehanizme, čije je uklanjanje pogrešaka s jedne strane uvijek napornije, ali s druge odgovornije. Ova "bolest" nije problem isključivo 1C, ona se nalazi u mnogim poslužiteljskim proizvodima većine proizvođača. Samo posljednjih godina pažnja na ove probleme značajno se povećala.

  3. Nedovoljno visoke prosječne kvalifikacije programera i administratora sustava naslijeđene iz prethodne verzije.

    Proizvodi linije 1C: Enterprise u početku su bili usmjereni na jednostavnost razvoja i podrške, i rad u malim organizacijama, pa ne čudi što se povijesno pokazalo da značajan dio "programera" aplikativnih rješenja i "administratora" sistema nema dovoljno znanja i vještina za rad s puno složeniji proizvod, a to je verzija 8.0. Problem je pogoršan praksom usvojenom u kompanijama koje primaju franšizu da treniraju „u boj“ na štetu kupaca, bez sistematskog pristupa ovom pitanju. Potrebno je odati počast 1C-u u činjenici da se u proteklih nekoliko godina ova situacija postupno poboljšavala: ozbiljne franšize su postale sve osjetljivije na problem zapošljavanja i obuke osoblja, razina informatičke i tehnološke podrške iz 1C značajno se povećala, programi certificiranja usmjereni na visok nivo usluge; ali situacija se ne može ispraviti odmah, stoga ovaj faktor treba uzeti u obzir pri analizi sigurnosti sistema.

  4. Relativno mala dob platforme.

    Među proizvodima slične orijentacije i svrhe uporabe, ovo je jedno od najmlađih rješenja. Funkcionalnost platforme manje-više uspostavljena prije manje od godinu dana. Štoviše, svako izdanje platforme, počevši od 8.0.10 (upravo su u ovom izdanju implementirane gotovo sve trenutne mogućnosti sustava) postajalo je mnogo stabilnije od prethodnih. Funkcionalnost tipičnih aplikativnih rješenja i dalje raste s preskokom, iako se koristi polovina mogućnosti platforme. Naravno, u takvim je uvjetima moguće govoriti o stabilnosti prilično uvjetno, ali u cjelini se mora priznati da rješenja utemeljena na platformi 1C 8.0 u velikoj mjeri nadmašuju slična rješenja na platformi 1C 7.7 u pogledu funkcionalnosti i performansi (a često i stabilnosti).

Dakle, sustav (i, eventualno, tipično aplikacijsko rješenje) je smješten u poduzeću i instaliran na računalima. Prije svega, potrebno je stvoriti okruženje u kojem će sigurnosna postavka 1C imati smisla, a za to je potrebno konfigurirati na način da se ispuni pretpostavka da na postavke sustava značajno utječu postavke sustava.

Pridržavajte se općih pravila sigurnosti.

Ne može se govoriti o bilo kakvoj informacijskoj sigurnosti sistema ako se ne poštuju osnovni principi stvaranja sigurnih sistema. Obavezno osigurajte da su ispunjeni barem sljedeći uvjeti:

  • Pristup poslužiteljima je fizički ograničen i osigurava se njihov neprekinuti rad:
    • poslužiteljska oprema ispunjava zahtjeve pouzdanosti, zamjena neispravne poslužiteljske opreme je otklonjena, sheme s umnožavanjem hardvera koriste se za posebno kritične dijelove (RAID, napajanje iz više izvora, nekoliko komunikacijskih kanala itd.);
    • serveri se nalaze u zaključanoj prostoriji, a ova se soba otvara samo u toku rada koji se ne može izvesti daljinski;
    • samo jedna ili dvije osobe imaju pravo otvoriti poslužiteljsku sobu, u slučaju nužde razvijen je sistem upozorenja za odgovorne osobe;
    • obezbeđeno je neprekidno napajanje servera
    • osigurava se normalan klimatski način rada opreme;
    • u prostoriji s serverima postoji požarni alarm, ne postoji vjerojatnost od poplave (posebno za prvi i posljednji kat);
  • Postavke mreže i informacijske infrastrukture poduzeća ispravno su konfigurirane:
    • svi serveri imaju instalirane i konfigurirane firewall;
    • svi su korisnici i računala ovlašteni na mreži, lozinke su dovoljno složene da ih je nemoguće pokupiti;
    • operateri sistema imaju dovoljno prava da normalno rade s njim, ali nema prava na administrativne radnje;
    • antivirusni alati su instalirani i omogućeni na svim računalima u mreži;
    • poželjno je da korisnici (osim mrežnih administratora) nemaju administrativna prava na klijentskim radnim stanicama;
    • pristup Internetu i prijenosnim medijima treba regulirati i ograničiti;
    • revizija sistema sigurnosnih događaja mora biti konfigurirana;
  • Glavna organizaciona pitanja su riješena:
    • korisnici imaju dovoljno kvalifikacija za rad sa 1C i hardverom;
    • korisnici su obaviješteni o odgovornosti za kršenje pravila rada;
    • dodijeljeni su materijalno odgovorni za svaki materijalni element informacijskog sistema;
    • sve sistemske jedinice su zapečaćene i zatvorene;
    • posebno obratite pažnju na informisanje i nadgledanje čistača, građevinara i električara. Ove osobe mogu iz nepažnje nanijeti štetu koja je neusporedivo veća od namjerne štete koju je uzrokovao beskrupolozni korisnik sistema.

Pažnja! Ovaj popis nije iscrpan, ali opisuje samo ono što se često zanemaruje prilikom postavljanja bilo kojeg prilično složenog i skupog informacijskog sistema!

  • MS SQL Server, aplikacijski poslužitelj i klijentski dio rade na različitim računalima, poslužiteljske aplikacije rade pod pravima posebno kreiranih Windows korisnika;
  • Za MS SQL Server
    • postavljen mješoviti način autorizacije
    • korisnici MS SQL-a uključeni u ulogu serveradmin ne sudjeluju u 1C,
    • za svaki IB 1C kreira se zasebni MS SQL korisnik koji nema povlašteni pristup poslužitelju,
    • mS SQL korisnik jedne IB nema pristup drugim IB-ima;
  • Korisnici nemaju direktan pristup aplikacijskim poslužiteljima i datotekama MS SQL servera
  • Radne stanice operatora opremljene su Windows 2000 / XP (a ne Windows 95/98 / Me)

Ne zapostavljajte preporuke programera sistema i čitanje dokumentacije. Na ITS diskovima u odjeljku "Metodičke preporuke" objavljeni su važni materijali o konfiguraciji sustava. Obratite posebnu pažnju na sljedeće članke:

  1. Značajke rada aplikacija sa 1C serverom: Enterprise
  2. Postavljanje podataka 1C: Enterprise 8.0
  3. Ažurirajte 1C: Enterprise 8.0 od strane Microsoft Windows korisnika bez administrativnih prava
  4. Uređivanje liste korisnika u ime korisnika koji nema administrativna prava
  5. Konfigurirajte postavke vatrozida za Windows XP SP2 za SQL Server 2000 i SQL Server Desktop Engine (MSDE)
  6. Konfiguriranje COM + Windows XP SP2 parametara za 1C: Enterprise 8.0 rad poslužitelja
  7. Konfiguriranje postavki vatrozida za Windows XP SP2 za 1C: Enterprise 8.0 Server
  8. Konfigurirajte postavke zaštitnog zida Windows XP SP2 za HASP License Manager
  9. Izrada sigurnosne kopije informativne baze pomoću SQL Server 2000
  10. Pitanja instalacije i konfiguracije 1C: Enterprise 8.0 u opciji "klijent-poslužitelj" (jedan od najvažnijih članaka)
  11. Značajke konfiguriranja Windows Server 2003 prilikom instaliranja 1C: Enterprise 8.0 poslužitelja
  12. Reguliranje korisničkog pristupa informacijskoj bazi u verziji klijent-poslužitelj (jedan od najvažnijih članaka)
  13. Server 1C: Enterprise i SQL Server
  14. Detaljni postupak instalacije za 1C: Enterprise 8.0 u verziji "klijent-poslužitelj" (jedan od najvažnijih članaka)
  15. Korištenje ugrađenog jezika na 1C: Enterprise serveru

No, dok čitate dokumentaciju, budite kritični prema dobivenim informacijama, na primjer, u članku "Pitanja instalacije i konfiguracije za 1C: Enterprise 8.0 u varijanti klijent-poslužitelj", prava koja zahtijeva korisnik USER1CV8SERVER nisu u potpunosti opisani. Dolje će biti linkovi do spiska, na primjer, [ITS1] znači članak "Značajke rada sa aplikacijama s 1C: Enterprise poslužiteljem". Sve reference na članke date su u najnovijem izdanju ITS-a u vrijeme pisanja (januar 2006)

Koristite za korisnike mogućnosti autorizacije u kombinaciji s autorizacijom Windows-a

Od dva moguća načina autorizacije korisnika: ugrađeni 1C i kombinirani s autorizacijom sustava Windows - ako je moguće, odaberite kombiniranu autorizaciju. To će omogućiti korisnicima da se ne zbune s više lozinki tijekom rada, ali istovremeno neće sniziti razinu sigurnosti sustava. Međutim, čak i za korisnike koji koriste samo autorizaciju sustava Windows, vrlo je poželjno da postave lozinku za vrijeme kreiranja i tek nakon toga onemoguće 1C autorizaciju za ovog korisnika. Da biste osigurali oporavak sustava u slučaju uništavanja strukture Active Directory-a, morate napustiti najmanje jednog korisnika koji se može prijaviti u sustav koristeći autorizaciju 1C.

Prilikom kreiranja uloga za odluku aplikacija ne dodajte prava "rezerve"

Svaka uloga primijenjenog rješenja trebala bi odražavati minimalni potrebni skup prava za obavljanje radnji definiranih ovom ulogom. Međutim, neke se uloge ne mogu koristiti samostalno. Na primjer, da interaktivno pokrenete vanjsku obradu, možete kreirati zasebnu ulogu i dodati je svim korisnicima koji moraju koristiti vanjsku obradu.

Redovito pregledavajte dnevnike i sistemske zapisnike

Ako je moguće, regulirajte i automatizirajte pregled dnevnika i protokola sistema. Ispravnim postavkama i redovitim gledanjem zapisa (uz filtriranje samo za važne događaje) možete pravovremeno otkriti neovlaštene radnje ili ih čak spriječiti u fazi pripreme.

Neke karakteristike verzije klijent-poslužitelj

Ovaj odjeljak opisuje neke značajke verzije klijent-poslužitelj i njihov utjecaj na sigurnost. Za čitljivost se prihvaća sljedeća notacija:

Pažnja! opis ranjivosti

Spremanje informacija koje kontroliraju pristup sistemu

Spremanje popisa IB korisnika

Sve informacije o popisu korisnika ove informacijske sigurnosti i uloge koje su im na raspolaganju u njoj se pohranjuju u tablicu Params u MS SQL bazi podataka (vidi [ITS2]). Gledajući strukturu i sadržaj ove tablice, postaje očigledno da su sve informacije o korisnicima pohranjene u zapisu, s vrijednošću polja FileName - "users.usr".

Budući da pretpostavljamo da korisnici nemaju pristup MS SQL bazi podataka, napadač samo ovu činjenicu ne može upotrijebiti, međutim, ako je moguće izvršiti MS SQL kôd, to "otvara vrata" bilo kojem (!) Pristupu s 1C . Isti mehanizam (uz manje izmjene) može se koristiti datotečnom verzijom sustava, koja, s obzirom na značajke verzije datoteke, u potpunosti isključuje njezinu primjenjivost u izgradnji sigurnih sustava.

Preporuka: Trenutno ne postoji način da se u potpunosti zaštiti aplikacija od takve promjene, osim korištenja okidača na razini MS SQL Servera, koji, s druge strane, mogu uzrokovati probleme prilikom ažuriranja verzije platforme ili promjene liste korisnika. Za praćenje takvih promjena možete upotrijebiti zapisnik registracije 1C (obratite pažnju na "sumnjive" prijave u načinu konfiguriranja bez navođenja korisnika) ili stalno održavati SQL Profiler (što će negativno utjecati na performanse sustava) ili konfigurirati mehanizam upozorenja (najvjerojatnije zajedno pomoću okidača)

Spremanje podataka o IB popisu na poslužitelju

Za svaki 1C poslužitelj aplikacija informacije se pohranjuju na popis MS SQL baza podataka povezanih s njim. Svaka baza podataka koristi svoj vlastiti niz veza između aplikacijskog poslužitelja i MS SQL servera. Informacije o bazama podataka registriranim na poslužitelju aplikacija zajedno s nizovima povezivanja pohranjuju se u datoteku srvrib.lst koja se nalazi na poslužitelju u direktoriju<Общие данные приложений>/ 1C / 1Cv8 (npr. C: / Dokumenti i postavke / Svi korisnici / Podaci o aplikaciji / 1C / 1Cv8 / srvrib.lst). Za svaku informacijsku sigurnost pohranjuje se cjeloviti vezni niz, uključujući korisničku lozinku MS SQL kada se koristi miješani model autorizacije MS SQL. Upravo prisutnost ove datoteke omogućuje strah od neovlaštenog pristupa MS SQL bazi podataka, a ako se, suprotno preporukama, povlašteni korisnik koristi za pristup barem jednoj bazi podataka (na primjer, "sa"), tada će, osim prijetnje jednoj informacijskoj sigurnosti, doći do prijetnje za cijeli sustav koji koristi MS SQL.

Zanimljivo je primijetiti da upotreba 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 autorizacije Windows bit će:

  • Rad svih informacija o sigurnosti na aplikacijskom poslužitelju i na MS SQL poslužitelju u okviru jednog skupa prava (najvjerojatnije pretjeranog)
  • Iz procesa 1C aplikacijskog poslužitelja (ili općenito od korisnika USER1CV8SERVER ili njegovog ekvivalenta) bez lozinke, možete se lako povezati s bilo kojom sigurnosnom informacijom bez lozinke

S druge strane, napadač možda može izvršiti proizvoljni kod iz korisničkog konteksta USER1CV8SERVER može biti teže nego nabaviti navedenu datoteku. Usput, prisutnost takve datoteke je još jedan argument za distribuciju funkcija servera na različita računala.

Preporuka: Datoteka srvrib.lst trebala bi biti dostupna samo za proces na poslužitelju. Obavezno konfigurirajte reviziju za izmjenu ove datoteke.

Nažalost, ova datoteka je prema zadanim postavkama gotovo nije zaštićena od čitanja, što se mora uzeti u obzir prilikom razmeštanja sistema. Idealna opcija bi bila ako je aplikacijski poslužitelj spriječio čitanje i pisanje ove datoteke tijekom rada (uključujući čitanje i pisanje od strane korisničkih veza izvršenih na ovom poslužitelju).

Nedostatak autorizacije prilikom stvaranja IS-a na poslužitelju

Pažnja! Pogreška nedostatka autorizacije ispravljena je u izdanju 8.0.14 platforme 1C: Enterprise. Koncept "1C: Enterprise Server Administrator" pojavio se u ovom izdanju, ali sve dok je popis administratora naveden na poslužitelju, sustav funkcionira kao što je opisano u nastavku, tako da ne zaboravite na ovu moguću značajku.

Vjerojatno najveća ranjivost iz ovog odjeljka je mogućnost dodavanja informacijske sigurnosti na aplikacijski poslužitelj gotovo neograničeno, što rezultira time da svaki korisnik koji ima pristup vezi s poslužiteljem aplikacija automatski dobiva mogućnost pokretanja proizvoljnog koda na aplikacijskom poslužitelju. Uzmite u obzir ovaj primer.

Sistem treba biti instaliran na sljedeći način

  • MS SQL Server 2000 (na primjer, naziv mreže SRV1)
  • Server 1C: Enterprise 8.0 (naziv mreže SRV2)
  • Klijentski dio 1C: Enterprise 8.0 (naziv mreže WS)

Pretpostavlja se da korisnik (u daljnjem tekstu USER) koji radi na WS-u ima barem minimalan pristup jednom od IS-ova registriranih na SRV2, ali nema povlašteni pristup SRV1 i SRV2. Općenito, kombinacija funkcija ovih računala ne utječe na situaciju. Sustav je postavljen uzimajući u obzir preporuke u dokumentaciji i na ITS diskovima. Situacija je prikazana na Sl. 2


  • konfigurirajte COM + sigurnost na aplikacijskom poslužitelju tako da se samo korisnici 1C-a imaju pravo povezati s procesom aplikacijskog poslužitelja (više detalja [ITS12]);
  • srvrib.lst datoteku treba čitati samo korisniku USER1CV8SERVER (privremeno dopustiti snimanju da se doda novi IB na poslužitelj);
  • za povezivanje na MS SQL koristite samo TCP / IP protokol, u ovom slučaju možete:
    • ograničiti veze pomoću vatrozida;
    • konfigurirajte upotrebu nestandardnog TCP porta, što će komplicirati vezu "stranog" IB 1C;
    • koristiti šifriranje prenesenih podataka između aplikacijskog poslužitelja i SQL servera;
  • konfigurirajte vatrozid poslužitelja tako da nije moguće korištenje MS-SQL poslužitelja drugih proizvođača;
  • koristite sigurnosnu zaštitu unutar mreže kako biste eliminirali mogućnost neovlaštenog računala na lokalnoj mreži (IPSec, grupna sigurnosna pravila, zaštitni zidovi itd.);
  • ni u kojem slučaju ne dodijelite korisniku USER1CV8SERVER administrativna prava na aplikacijskom poslužitelju.

Upotreba koda koji se izvodi na poslužitelju

Kada koristi opciju klijent-poslužitelj 1C, programer može distribuirati izvršavanje koda između klijenta i poslužitelja aplikacija. Da bi se kôd (procedura ili funkcija) izvršio samo na poslužitelju, potrebno ga je smjestiti u opći modul za koji je postavljeno svojstvo "Server", a u slučaju da se izvršavanje modula dozvoli ne samo na poslužitelju, kôd stavite u ograničeni odjeljak "# Ako poslužitelj ":

# If Server tada
Funkcija na poslužitelju (Param1, Param2 \u003d 0) Izvoz // Ova se funkcija, uprkos svojoj jednostavnosti, izvršava na poslužitelju
Param1 \u003d Param1 + 12;
Povratak Param1;
Završne funkcije
#EndIf

Pri korištenju koda izvršenog na poslužitelju potrebno je uzeti u obzir da:

  • kôd se izvodi s pravima USER1CV8SERVER na aplikacijskom poslužitelju (dostupni su COM objekti i datoteke poslužitelja);
  • sve sesije korisnika izvodi jedna instanca usluge, pa će, na primjer, preljev snopa na poslužitelju isključiti sve aktivne korisnike;
  • ispravljanje pogrešaka modula poslužitelja je teško (na primjer, prekidač se ne može postaviti u programu za uklanjanje pogrešaka), ali se mora implementirati;
  • prijenos kontrole s klijenta na aplikacijski poslužitelj i obrnuto može zahtijevati značajna sredstva s velikom količinom prenesenih parametara;
  • upotreba interaktivnih alata (obrasci, proračunske tablice, dijaloški okviri), vanjska izvješća i obrada u kodu na aplikacijskom poslužitelju je nemoguća;
  • uporaba globalnih varijabli (varijable aplikacijskog modula deklarirane s naznakom "Export") je neprihvatljiva;

Pogledajte [ITS15] i ostale ITS članke za više detalja.

Poslužitelj aplikacija mora imati posebne zahtjeve za pouzdanost. U pravilno izgrađenom sistemu klijent-poslužitelj moraju biti ispunjeni sljedeći uvjeti:

  • nijedna radnja klijentske aplikacije ne smije prekinuti poslužitelj (osim administrativnih slučajeva);
  • na poslužitelju se programski kod primljen od klijenta ne može izvršiti;
  • resursi bi trebali biti „pošteno“ raspoređeni kroz klijentske veze, osiguravajući dostupnost poslužitelja bez obzira na trenutno opterećenje;
  • u nedostatku blokiranja podataka, veze klijenta ne bi trebale utjecati na rad jednih drugih;
  • na poslužitelju ne postoji korisničko sučelje, ali treba razviti alate za praćenje i evidentiranje;

Općenito, 1C sustav izgrađen je na način da se pristupi tim zahtjevima (na primjer, nemoguće je izvršiti vanjsku obradu na poslužitelju), ali nekoliko neugodnih karakteristika i dalje postoji, dakle:

Preporuka: Prilikom razvijanja poslužiteljske strane implementacije preporučuje se pridržavati se principa minimalnosti sučelja. Oni. broj ulaza u poslužiteljske module iz klijentske aplikacije trebao bi biti vrlo ograničen, a parametri strogo regulirani. Preporuka: Nakon primitka parametara postupaka i funkcija na poslužitelju, potrebno je potvrditi parametre (provjeravanje da li parametri odgovaraju očekivanom tipu i rasponu vrijednosti). To se ne radi u standardnim rješenjima, ali je vrlo poželjno provesti obvezujući postupak provjere valjanosti u vlastitim dizajnovima. Preporuka: Prilikom generiranja teksta upita (a posebno parametra naredbe Run) na strani poslužitelja, ne koristite žice primljene od klijentske aplikacije.

Opšta preporuka je da se upoznate sa principima sigurne gradnje webaplikacije baze podataka i rade na sličnim principima. Sličnost je zaista znatna: prvo, poput web aplikacije, aplikacijski poslužitelj je posredni sloj između baze podataka i korisničkog sučelja (glavna razlika je u tome što web poslužitelj formira korisničko sučelje); drugo, sa sigurnosnog stanovišta, ne možete vjerovati podacima dobivenim od klijenta, jer mogu se pokrenuti vanjski izvještaji i obrade.

Prolazni parametri

Prosljeđivanje parametara funkciji (proceduri) koja se izvodi na poslužitelju prilično je osjetljivo pitanje. Ovo je prije svega zbog potrebe da se oni prebace između procesa aplikacijskog poslužitelja i klijenta. Kad se kontrola prenese s klijenta na poslužitelj, svi preneseni parametri serializiraju se, prenose na poslužitelj gdje se „raspakiraju“ i koriste. Prilikom prelaska s servera na klijenta postupak obrnut. Ovdje treba napomenuti da ova shema ispravno obrađuje prijenos parametara po referenci i vrijednosti. Kod prolaska parametara primjenjuju se sljedeća ograničenja:

  • Između klijenta i poslužitelja mogu se prenijeti samo nestabilne vrijednosti (u oba smjera) (tj. Čije se vrijednosti ne mogu mijenjati): primitivni tipovi, veze, univerzalne kolekcije, vrijednosti sistemskog nabrajanja, pohrana vrijednosti. Ako pokušate prenijeti nešto drugo, klijentska aplikacija se ruši (čak i ako poslužitelj pokušava prenijeti pogrešan parametar).
  • Pri prijenosu parametara ne preporučuje se prijenos velikih količina podataka (na primjer, žice veće od milion znakova), to može negativno utjecati na performanse poslužitelja.
  • Ne možete proslijediti parametre koji sadrže kružnu referencu, i sa servera na klijenta, i obrnuto. Ako pokušate prenijeti takav parametar, aplikacija klijenta se ruši (čak i ako poslužitelj pokušava prenijeti pogrešan parametar).
  • Prijenos vrlo složenih zbirki podataka se ne preporučuje. Kada pokušate proslijediti parametar s vrlo visokom razinom privitka, poslužitelj se ruši (!).

Pažnja! Vjerojatno je najneugodnija karakteristika greška prijenosa složenih zbirki vrijednosti. Tako, na primjer, kôd: Nesting Level \u003d 1250;
M \u003d Novi niz;
Preneseni parametar \u003d M;
Za sredinu \u003d 1 ciklusom gnezdenja
Unutrašnji \u003d Novi niz;
M. Add (MVnutr);
M \u003d MV;
Kraj ciklusa
Funkcija servera (preneseni parametar);

Dovodi do rušenja poslužitelja s prekidom veze svih korisnika, a to se događa prije nego što se kontrola prenese na kod u ugrađenom jeziku.

Korištenje nesigurnih funkcija na strani poslužitelja.

Ne mogu se svi alati ugrađenog jezika koristiti u kodu izvedenom na aplikacijskom poslužitelju, ali čak i među dostupnim alatima postoji mnogo "problematičnih" konstrukcija koje se mogu uvjetno klasificirati na sljedeći način:

  • sposobna pružiti mogućnost izvršenja koda koji nije sadržan u konfiguraciji (grupa "Izvođenje koda")
  • u mogućnosti pružiti klijentu aplikaciju informacije o datoteci i operativnom sistemu korisnika ili izvršiti radnje koje nisu povezane sa radom s podacima ("Kršenje prava")
  • sposoban da izazove pad sustava ili korištenje vrlo velikih resursa (Server Failure group)
  • koji može prouzrokovati neuspjeh u radu klijenta (grupa „Klijent Kvar“) - ovaj prikaz se ne uzima u obzir. Primjer: prijenos promjenjive vrijednosti na poslužitelj.
  • greške programskih algoritama (beskonačna petlja, neograničena rekurzija itd.) ("Greške u programiranju")

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

Pokretanje postupka (<Строка>)

Izvođenje koda. Omogućuje vam izvršavanje dijela koda koji mu se prosljeđuje kao vrijednost niza. Pri korištenju na poslužitelju morate biti sigurni da se podaci primljeni od klijenta ne upotrebljavaju kao parametar. Na primjer, sljedeća upotreba nije dopuštena:

# If Server tada
Postupak izvoza na server (Param1)
Trčanje (Param1);
EndProcedures
#EndIf

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

Stvara COM objekt vanjske aplikacije s pravima USER1CV8SERVER na poslužitelju aplikacija (ili na drugom navedenom računalu). Kad se koristi na poslužitelju, provjerite jesu li parametri poslani iz klijentske aplikacije. Međutim, na strani poslužitelja, efikasno je koristiti ovu značajku prilikom uvoza / izvoza, slanja podataka putem Interneta, implementacije nestandardnih funkcija itd.

Funkcija Dohvati COM objekt (<Имя файла>, <Имя класса COM>)
Kršenje prava i izvršavanje koda. Slično prethodnom, samo dobivanje COM objekta odgovara datoteci.
Postupci i funkcije Naziv računala (), Imenik privremenih datoteka (), Programi programa (), Korisnici Windows ()
Kršenje prava. Omogućavaju, izvršavajući ih na poslužitelju, da saznaju detalje organizacije poslužiteljskog podsustava. Kada se koriste na poslužitelju, provjerite da li podaci nisu poslani klijentu ili nisu dostupni operaterima bez odgovarajućeg pristupa. Posebno obratite pažnju na činjenicu da se podaci mogu vratiti u parametru prosljeđenom referencom.
Postupci i funkcije za rad s datotekama (CopyFile, FindFiles, MergeFiles i mnogi drugi), kao i vrste datoteka.

Kršenje prava. Omogućuju, nakon izvršenja na poslužitelju, pristup općenitom pristupu lokalnim (i lociranim na mreži) datotekama dostupnim pod USER1CV8SERVER korisničkim pravima. Ako se koristi svjesno, moguće je učinkovito implementirati zadatke poput uvoza / izvoza podataka na poslužitelju.

Obavezno provjerite prava korisnika 1C prije upotrebe tih funkcija. Za provjeru korisničkih prava možete koristiti sljedeću konstrukciju u modulu poslužitelja:

# If Server tada
Procedura ExecuteWork s izvozom datoteke ()
Uloga Administrator \u003d Metapodaci. Uloge. Administrator;
Korisnik \u003d Parametri sesije.
Ako se Korisnik.Roles. Sadrži (RoleAdmin) Zatim
// Ovdje se izvršava kod za rad s datotekama
Kraj If;
#EndIf

Obavezno provjerite parametre ako primijenite ove postupke i funkcije, jer u protivnom postoji rizik da slučajno ili svjesno nanesete nepopravljivu štetu 1C poslužitelju aplikacija, primjerice, prilikom izvršavanja koda na poslužitelju:

Path \u003d "C: \\ Dokumenti i postavke \\ Svi korisnici \\ Podaci o aplikacijama \\ 1C \\ 1Cv8 \\";
Premjesti datoteku (Path + "srvrib.lst", Path + "Evo datoteke");

Nakon izvršenja takvog koda na poslužitelju, ako korisnik USER1CV8SERVER ima prava da ga promijeni, kako je opisano gore, i nakon ponovnog pokretanja procesa na poslužitelju (prema zadanim postavkama, 3 minute nakon odjave svih korisnika), pojavit će se VELIKO pitanje o pokretanju poslužitelja. Ali moguće je potpuno izbrisati datoteke ...

Tipovi "XBase", "BinaryData", "ReadXML", "WriteXML", "ConvertXSL", "WriteZipFile", "ReadZipFile", "ReadText", "WriteText"
Kršenje prava. Omogućuju, nakon izvršenja na poslužitelju, pristup lokalnim (i lociranim na mreži) datotekama određenih vrsta te ih mogu čitati / pisati pod USER1CV8SERVER korisničkim pravima. Ako se svjesno koristi, moguće je učinkovito implementirati zadatke poput uvoza / izvoza podataka na poslužitelju, bilježenje nekih funkcija i rješavanje administrativnih problema. Općenito, preporuke se podudaraju s prethodnim stavkom, ali trebali biste razmotriti mogućnost prijenosa podataka iz tih datoteka (ali ne i objekata svih ovih vrsta) između klijentskog i poslužiteljskog dijela.
Upišite "Informacije o sistemu"
Kršenje prava. Omogućuje, neispravnom uporabom i prijenosom podataka na klijentski dio aplikacije, možete dobiti podatke o aplikacijskom poslužitelju. Preporučljivo je ograničiti pravo na upotrebu prilikom upotrebe.
Vrste "Internet veza", "Internet pošta", "Internet proxy", "HTTP veza", "FTP veza"

Kršenje prava. Kad se koristi na poslužitelju, povezuje se s udaljenim računarom s aplikacijskog poslužitelja pod pravom USER1CV8SERVER. Preporuke:

  • Kontrola parametara pri pozivanju metoda.
  • Kontrola korisničkih prava 1C.
  • Stroga ograničenja prava korisnika USER1CV8SERVER za pristup mreži.
  • Pravilna konfiguracija vatrozida na 1C poslužitelju aplikacija.

Kada se pravilno koristi, na primjer je prikladno organizirati distribuciju e-pošte s poslužitelja aplikacija.

Vrste "Korisnik menadžer baze podataka", "Korisnik baze podataka"

Kršenje prava. U slučaju pogrešne upotrebe (u privilegiranom modulu) moguće je dodati korisnike ili promijeniti parametre autorizacije postojećih korisnika.

Format funkcije

Neuspjeh servera. Da! Ova naizgled bezopasna funkcija, ako ne kontrolirate njene parametre i izvršite na poslužitelju, može uzrokovati rušenje poslužiteljske aplikacije. Do pogreške dolazi prilikom formatiranja brojeva i, primjerice, korištenja vodećih nula i velikog broja znakova

Format (1, "CC \u003d 999; CVN \u003d");

Nadam se da će ova greška biti popravljena u sljedećim izdanjima platforme, ali za sada u svim pozivima na ovu funkciju koji se mogu izvršiti na poslužitelju provjerite parametre poziva.

Postupci i funkcije za pohranu vrijednosti (ValueInStringIn, ValueVFile)
Neuspjeh servera. Ove funkcije ne upravljaju kružnim referencama u zbirkama i vrlo velikom dubinom gniježđenja, pa u nekim vrlo posebnim slučajevima mogu uzrokovati pad.

Pogreške graničnih i posebnih vrijednosti parametara u funkcijama. Kontrola izvršavanja.

Jedan od problema s kojim se možete susresti prilikom korištenja poslužitelja je velika "odgovornost" funkcija poslužitelja (mogućnost nenormalnog prekida cjelokupne poslužiteljske aplikacije zbog pogreške u jednoj vezi i upotrebe jednog "resursnog prostora" za sve veze). Otuda potreba za kontrolom glavnih parametara vremena izvođenja:

  • Za funkcije ugrađenog jezika provjerite parametre njihovog pokretanja (živopisan primjer je funkcija "Format")
  • Kada koristite petlje, provjerite je li aktivirano stanje izlaza petlje. Ako je ciklus potencijalno beskonačan, umjetno ograničite broj ponavljanja: Maksimalna vrijednost brojača ponavljanja \u003d 1000000;
    Iteracijski brojač \u003d 1;
    Sve dok
    Funkcija koja se ne može vratiti lažno ()
    I (Brojač ponavljanja<МаксимальноеЗначениеСчетчикаИтераций) Цикл

    // .... Tijelo petlje
    Iteration Counter \u003d Iteration Counter + 1;
    Kraj ciklusa
    Ako je brojač štetnosti\u003e Maksimalna vrijednost brojača ponavljanja tada
    // .... upravljajte događajem pretjerano dugog izvršavanja petlje
    Kraj If;

  • Kada koristite rekurziju, ograničite maksimalni nivo gnezdenja.
  • Prilikom generiranja i izvršavanja upita pokušajte spriječiti vrlo duge odabire i odabire velikih količina informacija (na primjer, kada koristite uvjet "U HIERARCHY", ne koristite praznu vrijednost)
  • Prilikom dizajniranja baze podataka osigurajte dovoljno veliku rezervu dubine bita za brojeve (u protivnom, sabiranje i množenje postaje nekomutativno i ne asocijativno, što otežava uklanjanje pogrešaka)
  • U izvršnim upitima provjerite radnu logiku na prisutnost NULL vrijednosti i ispravnog rada uvjeta i izraza upita koristeći NULL.
  • Kada koristite kolekcije, kontrolirajte mogućnost prijenosa između aplikacijskog poslužitelja i klijentskog dijela.

Korištenje terminalnog pristupa klijentskom dijelu za ograničavanje pristupa

Često možete pronaći preporuke za korištenje terminalnog pristupa kako biste ograničili pristup podacima i povećali produktivnost izvršavanjem kôda na strani klijenta na terminalnom poslužitelju. Da, pravilnom konfiguracijom, upotreba terminalnog pristupa može stvarno povećati opću razinu sigurnosti sustava, ali, nažalost, često možete primijetiti da se praktičnom upotrebom sigurnost sustava samo smanjuje. Pokušajmo ustanoviti s čime je to povezano. Sada postoje dva uobičajena načina organiziranja pristupa terminalu, to su Microsoft Terminal Services (protokol RDP) i Citrix Metaframe Server (protokol ICA). Općenito, Citrixovi alati pružaju mnogo fleksibilnije mogućnosti administracije pristupa, ali cijena ovih rješenja je mnogo veća. Razmotrit ćemo samo osnovne značajke zajedničke oba protokola koja mogu sniziti opću razinu sigurnosti. Postoje samo tri glavne opasnosti kada se koristi terminalski pristup:
  • Mogućnost blokiranja rada drugih korisnika hvatanjem prekomjerne količine resursa
  • Pristup podacima drugih korisnika.
  • Neovlašteno kopiranje podataka s terminalnog poslužitelja na računar korisnika

U svakom slučaju, terminalne usluge omogućavaju vam:

  • Poboljšajte pouzdanost (ako dođe do kvara na terminalnom računalu, korisnik može nakon toga nastaviti raditi s istog mjesta)
  • Ograničite pristup aplikaciji klijenta, datotekama koje sprema.
  • Prenesite računski teret s korisničke radne stanice na terminalski poslužitelj pristupa
  • Upravljajte sistemskim podešavanjima centralnije. Za korisnike će sačuvane postavke biti važeće bez obzira na koji računar su prijavljeni.
  • U nekim slučajevima možete koristiti rješenje terminala za daljinski pristup sistemu.

Potrebno je ograničiti broj mogućih veza sa terminalnim serverom jednog korisnika

Zbog "prepadanja" 1C klijentske aplikacije vezano za resurse, potrebno je ograničiti maksimalni broj istodobnih veza jednog korisnika (operatora) sa terminalnim serverom. Aktivno korištena veza može koristiti do 300 MB memorije sa samo jednom instancom aplikacije. Pored memorije aktivno se koristi i procesorsko vrijeme, koje također ne doprinosi stabilnosti korisnika ovog poslužitelja. Istovremeno s sprečavanjem prekomjerne upotrebe resursa servera, ovo ograničenje može spriječiti upotrebu tuđeg računa. Provode se standardnim postavkama poslužitelja terminala.

Nije dopušteno istovremeno pokrenuti više od jedne ili dvije aplikacije 1C klijenta u jednoj vezi

Diktiraju ga isti razlozi kao i u prethodnom stavku, ali tehnički je teže provoditi. Problem je u tome što je praktično nemoguće spriječiti ponovni pokretanje 1C-a pomoću terminalnog poslužitelja (u nastavku ćemo objasniti zašto), pa tu značajku morate implementirati na razini aplikacijskog rješenja (što također nije dobro rješenje, jer može doći do nekih sesija vješanja) kada se aplikacija pogrešno ukine, postoji potreba za pročišćavanjem aplikacijskog rješenja u aplikacijskom modulu i nekim direktorijima, što će usložniti upotrebu ažuriranja iz 1C). Vrlo je poželjno da korisniku ostavite mogućnost pokretanja 2 aplikacije kako bi mogao pokrenuti neke radnje (na primjer, generiranje izvještaja) u pozadini - klijentska aplikacija je, nažalost, zapravo jednodijelna.

Ne preporučuje se pristup terminalskom poslužitelju korisnicima koji imaju pravo izvršavati računalne zadatke koji intenzivno troše resurse u 1C ili spriječiti takvo pokretanje tijekom aktivnog rada drugih korisnika.

Naravno, bolje je ostaviti pristup terminalnom poslužitelju samo onim korisnicima koji ne koriste zadatke poput vađenja podataka, geografskih shema, uvoza / izvoza i drugih zadataka koji ozbiljno opterećuju klijentski dio aplikacije. Ako još uvijek postoji potreba za rješavanjem takvih zadataka, tada je potrebno: obavijestiti korisnika da ti zadaci mogu utjecati na performanse drugih korisnika, u dnevnik upisati događaj početka i kraja takvog postupka, kako bi se omogućilo izvršavanje samo u zakazano vrijeme itd.

Potrebno je osigurati da svaki korisnik ima prava pisanja samo u strogo definiranim direktorijima terminalnog poslužitelja, a drugi korisnici nemaju pristup njima.

Prvo, ako ne ograničite mogućnost pisanja u zajedničke direktorije (kao što je direktorij u kojem je instaliran 1C), tada je napadač i dalje u mogućnosti promijeniti ponašanje programa za sve korisnike. Drugo, podaci jednog korisnika (privremene datoteke, datoteke za spremanje postavki izvještaja itd.) Nikako ne bi trebali biti dostupni drugom korisniku terminalnog poslužitelja - općenito, tijekom normalnog postavljanja, ovo se pravilo ispunjava. Treće, napadač ima priliku da "legne" particiju tako da na tvrdom disku nema prostora. Znam, prigovorit će mi da u sustavu Windows, počevši od Windowsa 2000, postoji mehanizam kvota, ali ovo je prilično skup mehanizam i nikad nisam vidio nikakvu stvarnu upotrebu toga.

Ako su prethodna pitanja kontrole pristupa općenito bila vrlo jednostavno implementirana, takav se (naizgled) jednostavan zadatak kao reguliranje korisničkog pristupa datotekama provodi nerivijalno. Prvo, ako se mehanizam kvote ne koristi, tada možete spremiti velike datoteke. Drugo, sustav je izgrađen na takav način da će gotovo uvijek ostati mogućnost snimanja datoteke tako da bude dostupna drugom korisniku.

S obzirom da je zadatak potpuno težak, preporučuje se revizija većine datoteka

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

U RDP i ICA moguće je organizirati automatsko povezivanje diskova, pisača, međuspremnika terminala na računalu. Ako je to moguće, tada je praktički nemoguće zabraniti pokretanje vanjskog koda na terminalskom poslužitelju i pohranjivanje podataka s 1C na pristupnom klijentu terminala. Dopustite ove značajke samo osobama s administrativnim pravima.

Pristup mrežnim datotekama s terminalnog poslužitelja treba biti ograničen.

Ako se to ne učini, tada korisnik ponovo može pokrenuti neželjeni kôd ili spremiti podatke. Budući da redovni dnevnik ne prati događaje datoteka (usput, programerima je to dobra ideja implementirati platformu), a gotovo je nemoguće konfigurirati reviziju sistema na cijeloj mreži (nema dovoljno resursa da bi se servisirao), bolje je ako korisnik može slati podatke ili ispisati, bilo e-poštom. Obratite posebnu pažnju na činjenicu da terminalni poslužitelj ne radi izravno s izmjenjivim medijima korisnika.

Ni u kojem slučaju prilikom stvaranja sigurnog sistema ne možete ostaviti aplikacijski poslužitelj na terminalnom poslužitelju.

Ako aplikacijski poslužitelj radi na istom računalu kao i klijentske aplikacije, tada postoji prilično puno mogućnosti za ometanje njegovog normalnog rada. Ako iz nekog razloga nije moguće razdvojiti funkcije terminalskog poslužitelja 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 terminalnom poslužitelju.

Ovo je jedna od najteže implementiranih točaka želja. Za početak, morate ispravno konfigurirati sigurnosnu politiku grupe za domenu. Morate ispravno konfigurirati sve "Administrativne predloške" i "Politike ograničenja softvera". Da biste se provjerili, provjerite jesu li barem sljedeće značajke blokirane:

Složenost implementacije ovog zahtjeva često dovodi do mogućnosti pokretanja "ekstra" 1C sesije na terminalnom poslužitelju (čak i ako su druge aplikacije ograničene, nemoguće je u principu spriječiti Windows da pokrene 1C).

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

Očito, budući da korisnici otvaraju 1C u terminalnom režimu, tada će terminalni poslužitelj biti zabilježen u dnevniku. S kojeg je računara korisnik povezan, dnevnik se ne prijavljuje.

Terminal Server - zaštita ili ranjivost?

Dakle, nakon razmatranja glavnih značajki terminala sjever, možemo reći da potencijalno terminal sjever može pomoći u automatizaciji za distribuciju računalnog opterećenja, ali prilično je teško izgraditi siguran sustav. Jedan od slučajeva gde je upotreba terminalnog servera najefikasnija je pokretanje 1C bez Windows Explorera u celozaslonskom režimu za korisnike sa ograničenom funkcionalnošću i specijalizovanim sučeljem.

Klijentski posao

Korištenje Internet Explorera (IE)

Jedan od uvjeta za normalan rad klijentskog dijela 1C je upotreba komponenti Internet Explorer-a. Morate biti vrlo oprezni s ovim komponentama.

Pažnja! Prvo, ako je špijunski softver ili modul adware-a "zakačio" na IE, tada će se učitati ako se bilo koja HTML datoteka pregleda u 1C. Do sada nisam vidio svjesno korištenje ove prilike, ali sreo sam u jednoj od organizacija napunjen "špijunski" modul jedne od pornografskih mreža kada se pokrenuo 1C (antivirusni program nije ažuriran; simptomi su otkriveni: prilikom konfiguriranja vatrozida bilo je jasno da 1C pokušava na port 80 povežite se sa porno stranicom). Zapravo, ovo je još jedan argument u korist potrebe sveobuhvatne zaštite.

Pažnja! Drugo, 1C sustav omogućuje upotrebu flash filmova, ActiveX objekata, VBScript u prikazanim HTML dokumentima, slanje podataka na Internet, čak i otvaranje PDF datoteka (!), Mada u drugom slučaju traži „otvori ili sačuvaj“ ... B uopšte, šta god srce želi. Primjer ne baš pametne upotrebe ugrađene sposobnosti za pregled i uređivanje HTML-a:

  • Kreirajte novi HTML dokument (Datoteka -\u003e Novo -\u003e HTML dokument).
  • Idite na karticu "Tekst" praznog dokumenta.
  • Izbrišite tekst (u potpunosti).
  • Idite na karticu "Prikaži" u ovom dokumentu.
  • Pomoću drag-n-drop premjestite datoteku s SWF ekstenzijom (to su datoteke s filmskim bljeskalicama) s otvorenog istraživača u prozor dokumenta, na primjer, iz predmemorije preglednika, iako je moguće i 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 zbog ove ranjivosti, ali najvjerovatnije će se ispostaviti da su pitanje vremena i vrijednosti vaših podataka.

Postoje još neke manje točke koje se pojavljuju prilikom rada s poljem HTML dokumenta, ali dvije su glavne. Iako, ako tim kreativnim pristupima pristupite kreativno, možete organizirati zaista nevjerojatne mogućnosti sučelja za rad s 1C.

Korištenje vanjskog izvještavanja i obrade.

Pažnja! Vanjski izvještaji i obrade s jedne su strane prikladan način za implementaciju dodatnih tiskanih obrazaca, rutinskog izvještavanja, specijaliziranih izvještaja, a s druge strane potencijalni su način zaobilaženja mnogih sigurnosnih ograničenja sustava i poremećaja aplikacijskog poslužitelja (vidi primjer u Prijenosu parametra gore). Sistem 1C ima poseban parametar u skupu prava za ulogu „Interaktivno otvaranje eksterne obrade“, ali to ne rješava u potpunosti problem - za cjelovito rješenje trebate suziti krug korisnika koji mogu upravljati vanjskim obrascima za ispis, redovnim izvještajima i drugim redovitim značajkama standardnih rješenja korišćenje spoljnih tretmana. Na primjer, prema SCP-u sve glavne uloge korisnika imaju mogućnost rada s direktorijom dodatnih tiskanih oblika, a to je, u stvari, mogućnost korištenja bilo kakve vanjske obrade.

Korištenje standardnih mehanizama standardnih rješenja i platformi (razmjena podataka)

Neki od standardnih mehanizama su potencijalno opasni i to na prilično neočekivan način.

Liste za ispis

Bilo koja lista (na primjer, direktorij ili registar podataka) u sistemu može se ispisati ili spremiti u datoteku. Da biste to učinili, dovoljno je koristiti standardnu \u200b\u200bfunkciju dostupnu iz kontekstnog izbornika i izbornika „Akcije“:

Imajte na umu da gotovo sve što korisnik vidi na popisima može biti prikazan vanjskim datotekama. Jedino što se može savjetovati je čuvanje protokola za ispis dokumenata na print serverima. Za posebno kritične oblike potrebno je konfigurirati akcijsku ploču povezanu sa zaštićenim poljem tablice tako da mogućnost prikaza liste nije dostupan s ove ploče i onemogućiti kontekstni izbornik (vidi sliku 6).

Distribuirana razmjena podataka

Format razmjene podataka prilično je jednostavan i opisan je u dokumentaciji. Ako korisnik ima mogućnost zamjene nekoliko datoteka, može izvršiti neovlaštene promjene u sustavu (iako je ova aktivnost prilično dugotrajna). Mogućnost stvaranja periferne baze podataka korištenjem planova razmjene distribuiranih baza podataka ne bi trebala biti dostupna običnim operaterima.

Standardna XML razmjena podataka

U standardnoj razmjeni podataka, koja se koristi za razmjenu između tipičnih konfiguracija (na primjer, "Upravljanje trgovinom" i "Računovodstvo poduzeća"), može se odrediti upravitelja događaja za utovar i istovar objekata u pravilima razmjene. To se postiže dobivanjem alata za obradu iz datoteke i postupkom "Run ()" za standardnu \u200b\u200bobradu datoteke za preuzimanje i preuzimanje (postupak "Run ()" pokreće se na strani klijenta). Očigledno je da je lako stvoriti takvu lažnu datoteku razmjene koja će izvoditi zlonamjerne radnje. Za većinu korisničkih uloga tipičnih rješenja dijeljenje je po defaultu dopušteno.

Preporuka: ograničiti pristup XML razmjeni za većinu korisnika (prepustite se samo administratorima IS). Zadržite protokole pokretanja ove obrade, spremajući, primjerice, razmjensku datoteku, prije preuzimanja putem e-maila IS administratoru.

Korištenje generičkih izvještaja, posebno konzole za izvješćivanje

Drugi je problem zadani korisnik pristup univerzalnim izvješćima, posebno izvješću Console Report. Ovaj izvještaj karakterizira činjenica da vam omogućuje ispunjavanje gotovo svih zahtjeva za informacijskom sigurnošću, pa čak i ako je sustav prava 1C (uključujući RLS) konfiguriran prilično čvrsto, omogućava korisniku da dobije puno "dodatnih" informacija i prisiljava poslužitelja na izvršavanje takvog zahtjeva koji će oduzeti sve resurse sistem.

Korištenje cijelog ekrana (radni režim)

Jedan od efikasnih načina organiziranja specijaliziranih sučelja s ograničenim pristupom programskoj funkcionalnosti je način prikaza na cijelom zaslonu glavnog (a možda i jedinog) oblika koji koristi sučelje. Nema pitanja u pogledu pristupačnosti, na primjer, izbornika File, a sve radnje korisnika ograničene su mogućnostima korištenog obrasca. Za detalje pogledajte "Značajke implementacije radnog stola" na ITS disku.

Rezervna kopija

Izrada sigurnosne kopije za klijent-poslužitelj verzije 1C može se izvesti na dva načina: prijenos podataka u datoteku s dt ekstenzijom i stvaranje sigurnosnih kopija pomoću SQL-a. Prva metoda ima mnogo nedostataka: potreban je ekskluzivni pristup, stvaranje kopije traje mnogo duže, u nekim slučajevima (ako je narušena IB struktura), stvaranje arhive je nemoguće, ali postoji jedna prednost - minimalna veličina arhive. Za sigurnosnu kopiju SQL-a vrijedi suprotno: stvaranje kopije u pozadini pomoću SQL servera, zbog jednostavne strukture i nedostatka kompresije, ovo je vrlo brz proces, a dok fizički integritet SQL baze podataka nije narušen, izvodi se sigurnosna kopija, ali veličina kopije odgovara istinskoj veličina informacijske sigurnosti u proširenom stanju (kompresija se ne vrši). Zbog dodatnih prednosti sustava sigurnosne kopije MS SQL, to je prikladnije koristiti (dopuštene su 3 vrste sigurnosnih kopija: puna, diferencijalna, kopija dnevnika transakcija; moguće je kreirati redovno izvršavaju zadatke; sustav sigurnosnog kopiranja i sigurnosnih kopija brzo se aktiviraju; mogućnost predviđanja veličine potrebnog prostora na disku itd.). Glavne točke organiziranja sigurnosnih kopija u smislu sigurnosti sustava su:

  • Potreba da odaberete mjesto pohrane sigurnosnih kopija kako ne bi bile dostupne korisnicima.
  • Potreba za spremanjem sigurnosnih kopija na fizičkoj udaljenosti od MS SQL servera (u slučaju prirodnih katastrofa, požara, napada itd.)
  • Mogućnost davanja prava za pokretanje sigurnosne kopije korisniku koji nema pristup sigurnosnim kopijama.

Za više informacija pogledajte dokumentaciju MS SQL.

Šifriranje podataka

Za zaštitu podataka od neovlaštenog pristupa često se koriste različiti kriptografski alati (i softverski i hardverski), ali njihova primjerenost u velikoj mjeri ovisi o ispravnoj primjeni i ukupnoj sigurnosti sustava. Razmotrit ćemo šifriranje podataka u različitim fazama prijenosa i pohrane podataka pomoću najčešćeg načina i glavnih pogrešaka dizajna sustava pomoću kriptografskih alata.

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

  • Prijenos podataka između klijentskog dijela sustava i poslužitelja aplikacija
  • Prijenos podataka između aplikacijskog poslužitelja i MS SQL Server
  • Podaci pohranjeni na MS SQL Serveru (datoteke podataka na fizičkom disku)
  • Šifriranje podataka pohranjenih u informacijskoj sigurnosti
  • Vanjski podaci (u vezi sa sigurnošću informacija)

Za podatke pohranjene na strani klijenta i na aplikacijskom poslužitelju (spremljene korisničke postavke, popis sigurnosti informacija itd.) Šifriranje je opravdano samo u vrlo rijetkim slučajevima i stoga se ovdje ne uzima u obzir. Pri korištenju kriptografskih alata 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 osjetljive su na neovlašteni nadzor i pristup. Da biste ih zaštitili, možete koristiti šifriranje podataka na razini mrežnog protokola. Za šifriranje podataka koji se prenose na lokalnoj mreži najčešće se koriste IPSec alati koje daje operativni sistem.

IPSec alati omogućavaju šifriranje prenesenih podataka pomoću algoritama DES i 3DES, kao i provjeru integriteta pomoću hash funkcija MD5 ili SHA1. IPSec može raditi u dva načina: režimu prijevoza i režimu tunela. Način transporta je pogodniji za osiguranje LAN veza. Režim tunela može se koristiti za organiziranje VPN veza između pojedinih mrežnih segmenata ili za zaštitu udaljene veze s lokalnom mrežom putem otvorenih kanala podataka.

Glavne prednosti ovog pristupa su:

  • Sposobnost centralnog upravljanja zaštitom pomoću Active Directory alata.
  • Mogućnost isključenja neovlaštenih veza s poslužiteljem aplikacija i MS SQL serverom (na primjer, moguće je zaštititi od neovlaštenog dodavanja sigurnosti podataka na poslužitelju aplikacija).
  • Izuzetak „slušanja“ mrežnog prometa.
  • Nema potrebe za promjenom ponašanja aplikativnih 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 preslušavanja ili slušanja direktno na izvornom i odredišnom računalu.
  • Količina podataka koja se prenosi putem mreže nešto je veća nego bez upotrebe IPSeca.
  • Kada koristite IPSec, opterećenje CPU-a je malo veće.

Detaljan opis implementacije IPSec alata je izvan okvira ovog članka i zahtijeva razumijevanje osnovnih principa IP protokola. Da biste pravilno konfigurirali zaštitu veze, pogledajte odgovarajuću dokumentaciju.

Zasebno je potrebno spomenuti nekoliko aspekata licencnog ugovora s 1C prilikom organiziranja VPN veza. Činjenica je da je, unatoč nepostojanju tehničkih ograničenja, prilikom povezivanja nekoliko segmenata lokalne mreže ili daljinskog pristupa zasebnom računalu lokalnoj mreži obično potrebno nekoliko osnovnih pomagala.

Šifriranje podataka tijekom prijenosa između klijentskog dijela sustava i aplikacijskog poslužitelja.

Uz šifriranje na razini mrežnog protokola moguće je šifriranje podataka na razini protokola COM +, što se spominje u članku ITS-ovog članka "Reguliranje pristupa korisnika bazama podataka u verziji klijent-poslužitelj". Za implementaciju je potrebno u aplikacijama Usluge komponenti postaviti nivo aplikacije 1CV8 da biste postavili nivo provjere autentičnosti za privatnost poziva. Kad se ovaj način postavi, paket se ovjerava i šifrira, uključujući podatke, kao i identitet i potpis pošiljatelja.

Šifriranje podataka tijekom prijenosa između aplikacijskog servera i MS SQL servera

MS SQL Server nudi sljedeće alate za šifriranje podataka:

  • Za prijenos podataka između aplikacijskog poslužitelja i MS SQL Server moguće je koristiti sloj sigurnih utičnica (SSL).
  • Pri korištenju mrežne biblioteke Multiprotocol koristi se enkripcija podataka na nivou RPC-a. Ovo je potencijalno slabija enkripcija nego upotreba SSL-a.
  • Ako se koristi protokol razmjene zajedničke memorije (to se događa ako se aplikacijski poslužitelj i MS SQL Server nalaze na istom računalu), tada se šifriranje ne koristi ni u kojem slučaju.

Da biste utvrdili potrebu za šifriranjem svih prenesenih podataka za određeni MS SQL server, morate koristiti uslužni program "Server Network Utility". Pokrenite ga i na kartici "Općenito" potvrdite okvir "Prisilno šifriranje protokola". Način šifriranja bira se ovisno o načinu koji koristi klijentska aplikacija (tj., 1C aplikacijski poslužitelj). Da biste koristili SSL, morate ispravno konfigurirati uslugu izdavanja certifikata na mreži.

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

Treba imati na umu da upotreba šifriranja u ovom slučaju može značajno utjecati na performanse sustava, posebno kada se koriste upiti koji vraćaju velike količine informacija.

Kako bi se potpunije zaštitila veza između aplikacijskog poslužitelja i MS SQL servera prilikom korištenja TCP / IP protokola, može se preporučiti nekoliko promjena zadanih postavki.

Prvo, možete postaviti port različit od standardnog (zadani port je 1433). Ako odlučite koristiti nestandardni TCP port za razmjenu podataka, imajte na umu sljedeće:

  • MS SQL poslužitelj i poslužitelj aplikacija moraju koristiti isti port.
  • Kada koristite zaštitne zidove, ovaj priključak mora biti omogućen.
  • Ne možete instalirati port koji mogu koristiti druge aplikacije na MS SQL serveru. Za referencu možete koristiti http://www.ise.edu/in-notes/iana/assignments/port-numbers (adresa je preuzeta iz SQL Server Books Online).
  • Ako 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 poslužitelju možete odabrati potvrdni okvir "Sakrij poslužitelj", koji zabranjuje zahtjeve za emitovanje ove instance 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 standardna sposobnost Windows-a da koristi EFS, upotrebu eToken ključeva i programa treće strane poput Jetico Bestcrypt ili PGPDisk). Jedan od glavnih zadataka ovih alata je zaštita podataka u slučaju gubitka medija (na primjer, kada je ukraden poslužitelj). Posebno je vrijedno napomenuti da Microsoft ne preporučuje pohranjivanje MS SQL baza podataka na šifrirani medij i to je u potpunosti opravdano. Glavni problem u ovom slučaju je značajan pad performansi i mogući problemi s pouzdanošću od kvarova. Drugi čimbenik koji komplicira život administratora sustava je potreba da se osigura dostupnost svih datoteka baze podataka u vrijeme prvog pristupa MS SQL usluzi (to jest, poželjno je da interaktivne radnje budu isključene kada je spojen šifrirani medij).

Da biste izbjegli vidljiv pad performansi sistema, možete iskoristiti sposobnost MS SQL-a da stvori baze podataka u nekoliko datoteka. Naravno, u ovom slučaju MS SQL bazu podataka ne bi trebao stvoriti 1C poslužitelj prilikom stvaranja info baze, već treba kreirati zasebno. Primjer TSQL skripte s komentarima dat je u nastavku:

USE master
GO
- Kreirajte bazu podataka SomeData,
USTVARITE BAZU PODATAKA SomeData
- čiji se podaci u cijelosti nalaze u grupi datoteka (grupa datoteka) PRIMARNO.
NA PRIMARNOM
- Glavna datoteka podataka nalazi se na šifriranom mediju (logički pogon E :)
- i ima početnu veličinu od 100 MB, automatski se može povećati na 200 MB
- u koraku od 20 Mb
(NAME \u003d SomeData1,
FILENAME \u003d "E: \\ SomeData1.mdf",
VELIČINA \u003d 100MB,
MAXSIZE \u003d 200,
FILEGROWTH \u003d 2),
- Druga datoteka podataka nalazi se na nekodiranom mediju (logički pogon C :)
- i ima početnu veličinu od 100 MB, može se automatski povećati do krajnjih granica
- prostor na disku u koracima od 5% trenutne veličine datoteke (zaokruženo na 64 Kb)
(NAME \u003d SomeData2,
FILENAME \u003d "c: \\ programske datoteke \\ microsoft sql server \\ mssql \\ podaci \\ SomeData2.ndf",
VELIČINA \u003d 100MB,
MAXSIZE \u003d NEOGRANIČENO,
FILEGROWTH \u003d 5%)
PRIJAVI SE
- Iako se dnevnik transakcija također može podijeliti u dijelove, to se ne smije činiti,
- jer ova se datoteka mijenja mnogo češće i redovito se čisti (na primjer, kada
- stvaranje sigurnosne kopije baze podataka).
(NAME \u003d SomeDatalog,
FILENAME \u003d "c: \\ programske datoteke \\ microsoft sql server \\ mssql \\ podaci \\ SomeData.ldf",
VELIČINA \u003d 10MB,
MAXSIZE \u003d NEOGRANIČENO,
FILEGROWTH \u003d 10)
GO
- Bolje je odmah prenijeti vlasništvo nad bazom podataka na korisnika u čije ime
- 1C će biti povezan. Da bismo to učinili, moramo proglasiti trenutnu bazu
- tek stvorena
KORISTITE Neke podatke
GO
- i izvršavanje sp_changedbowner postupka
EXEC sp_changedbowner @loginame \u003d "NekiData_dbowner"

Mala digresija o automatskom rastu veličine datoteke podataka. Podrazumijevano, za stvorene baze podataka, veličine datoteka povećavaju se u koracima od 10% od trenutne veličine datoteke. Ovo je savršeno prihvatljivo rješenje za male baze podataka, ali nije baš dobro za velike: ako je veličina baze podataka, na primjer, 20 GB, datoteka bi se trebala odmah povećati za 2 GB. Iako će se ovaj događaj dogoditi prilično rijetko, može potrajati nekoliko desetaka sekundi (sve ostale transakcije u ovom trenutku su u stanju mirovanja), što, ako se dogodi tijekom aktivnog rada s bazom podataka, može prouzrokovati neke pogreške. Druga negativna posljedica proporcionalnog priraštaja, koja nastaje kada je prostor na disku gotovo pun, je vjerojatnost preuranjenog kvara zbog nedostatka slobodnog prostora. Na primjer, ako je diskovna particija od 40 GB u potpunosti dodijeljena za jednu bazu podataka (točnije, za jednu datoteku ove baze podataka), tada je kritična veličina datoteke baze podataka kod koje je hitno (vrlo hitno, do prekida normalnog rada korisnika) potrebno reorganizirati pohranu podataka. veličina datoteke podataka 35 GB. Uz utvrđenu veličinu prirasta od 10-20 MB, možete nastaviti s radom dok ne dostignete 39 GB.

Stoga, iako popis pokazuje povećanje veličine jedne od datoteka baze podataka u koracima od 5%, za velike veličine baze podataka bolje je postaviti fiksni priraštaj od 10-20 MB. Pri postavljanju koraka za povećanje veličine datoteka baze podataka potrebno je uzeti u obzir da dok jedna od datoteka u grupi datoteka ne dosegne maksimalnu veličinu, primjenjuje se pravilo: datoteke jedne grupe datoteka rastu sve odjednom, kada su sve pune. Dakle, u gornjem primjeru, kada datoteka SomeData1.mdf dostigne svoju maksimalnu veličinu od 200 MB, datoteka SomeData2.ndf bit će veličine oko 1,1 GB.

Nakon stvaranja takve baze podataka, čak i ako njene nezaštićene datoteke SomeData2.ndf i SomeData.ldf postanu dostupne napadaču, bit će izuzetno teško vratiti stvarno stanje baze podataka - podaci (uključujući podatke o logičkoj strukturi baze podataka) bit će raštrkani u nekoliko datoteka, štaviše, ključne informacije (npr. o tome koje datoteke čine ovu bazu podataka) će se nalaziti u šifriranoj datoteci.

Naravno, ako se koristi pohrana datoteka baze podataka kriptografskim sredstvima, sigurnosna kopija (barem ovih datoteka) ne bi se trebala provoditi na nekodificiranom mediju. Da biste osigurali da su pojedinačne datoteke baze podataka arhivirane, koristite odgovarajuću sintaksu za naredbu "BACKUP DATABASE". Imajte na umu da, unatoč mogućnosti zaštite sigurnosne kopije baze podataka lozinkom (opcije "PASSWORD \u003d" i "MEDIAPASSWORD \u003d" naredbe "BACKUP DATABASE"), takva sigurnosna kopija ne šifrira se!

Šifriranje podataka aplikacijskog servera i klijenta pohranjenih na diskovima

U većini slučajeva nije opravdano pohranjivanje datoteka koje koristi 1C: Enterprise (klijentski dio i poslužitelj aplikacija) na šifriranom medijumu zbog nerazumno visokih troškova, međutim, ako takva potreba postoji, imajte na umu da aplikacijski poslužitelj i klijentski dio aplikacije vrlo često stvaraju privremene datoteke. Te datoteke mogu često ostati nakon što aplikacija prestane, a gotovo je nemoguće zajamčiti njihovo uklanjanje pomoću 1C. Dakle, moguće je kriptirati direktorij koji se koristi za privremene datoteke u 1C ili ga ne pohraniti na disk pomoću RAM pogona (potonja opcija nije uvijek moguća zbog veličine generiranih datoteka i zahtjeva za veličinom RAM-a same aplikacije 1C: Enterprise).

Šifriranje podataka s ugrađenim 1C.

Standardne mogućnosti za upotrebu šifriranja u 1C svode se na upotrebu objekata za rad sa Zip datotekama sa parametrima šifriranja. Dostupni su sljedeći načini šifriranja: AES algoritam s ključem od 128, 192 ili 256 bita i moralno zastarjeli algoritam koji je prvobitno korišten u Zip arhivu. Zip datoteke šifrirane pomoću AES-a ne čitaju mnogi arhivatori (WinRAR, 7zip). Da biste stvorili datoteku koja sadrži šifrirane podatke, morate navesti lozinku i algoritam šifriranja. Najjednostavniji primjer funkcija šifriranja-dešifriranja na temelju ove značajke dan je u nastavku:

Šifriranje podataka (izvoz podataka, lozinke, metoda šifriranja \u003d nedefinirano)

// Zapišite podatke u privremenu datoteku. U stvari, daleko od bilo kakvih podataka može se tako spremiti.
ValueV datoteka (privremeni naziv datoteke, podaci);

// Zapisati privremene podatke u arhivu
Zip \u003d Nova evidencija zip datoteke (Ime privremene arhive datoteka, lozinka, metoda šifriranja);
Zip.Add (privremeni naziv datoteke);
Zip.Record ();

// Pročitajte podatke iz primljene arhive u RAM-u
EncryptedData \u003d Nova vrijednost za pohranu (nova BinaryData (TemporaryFileFileName));

// Privremene datoteke - brisanje

Krajnje funkcije Dešifriranje podataka (šifrirani podaci, lozinka) Izvoz

// Pažnja! Ispravnost prenesenih parametara se ne nadzire

// Zapišite prenesenu vrijednost u datoteku
ArchiveTimeFileName \u003d Nabavite TemporaryFileName ("zip");
BinaryArchiveData \u003d EncryptedData.Get ();
Arhiva BinaryData.Record (TemporaryFileFileName);

// Dohvatite prvu datoteku upravo snimljene arhive
Privremeni naziv datoteke \u003d Dobivanje privremenog naziva datoteke ();
Zip \u003d Novo čitanje zip datoteke (Ime privremene arhive datoteka, lozinka);
Zip.Extract (Zip.Elements, privremeni naziv datoteke, način vraćanja puta datoteke; ZIP; ne obnavljati);

// Pročitajte snimljenu datoteku
Podaci \u003d Vrijednost datoteke (privremeni naziv datoteke + "\\" + zip. Elementi. Naziv);

// Brisanje privremenih datoteka
Brisanje datoteka (privremeni naziv datoteke);
DeleteFiles (TemporaryFileFileName);

Podaci o povratu;

Završne funkcije

Naravno, ovu metodu ne možemo nazvati idealnom - podaci se zapisuju u privremenu mapu na jasnom mjestu, performanse metode su, iskreno, iskreno lošije nego bilo gdje, skladištenje u bazi podataka zahtijeva izuzetno veliku količinu prostora, ali to je jedini način koji se temelji samo na ugrađenim mehanizmima platforme. Pored toga, on ima prednost nad mnogim drugim metodama - ova metoda istovremeno sa šifriranjem izvodi pakovanje podataka. Ako želite implementirati šifriranje bez nedostataka ove metode, tada ih morate implementirati u vanjsku komponentu ili pristupiti postojećim bibliotekama kroz stvaranje COM objekata, primjerice, pomoću Microsoftovog CryptoAPI. Kao primjer, navedimo šifriranje / dešifriranje niza na temelju primljene lozinke.

Funkcija šifriranja niza DES (nešifrirani niz, lozinka)

CAPICOM_ENCRYPTION_ALGORITHM_DES \u003d 2; // Ova konstanta dolazi od CryptoAPI


Encryption Engine.Content \u003d Nešifrirani niz;
Encryption Engine.Algorithm.Name \u003d CAPICOM_ENCRYPTION_ALGORITHM_DES;
EncryptedString \u003d Encryption Engine.Encrypt ();

Povratak šifrirani niz;

EndFunctions // EncryptStringDES ()

Dešifriranje stringove funkcije DES (šifrirani niz, lozinka)

// Pažnja! Parametri nisu provjereni!

Encryption Engine \u003d Novi COMObject ("CAPICOM.EncryptedData");
Šifriranje Mehanizam.SetSecret (Lozinka);
Pokušaj
Encryption mehanizam.Decrypt (šifrirani niz);
Izuzetak
// Pogrešna lozinka!;
Povratak nedefiniran;
Kraj pokušaja;

Mehanizam povratnog šifriranja. Sadržaj;

EndFunctions // DecryptStringDES ()

Imajte na umu da će se prilikom prijenosa prazne vrijednosti u obliku niza ili lozinke tim funkcijama pojaviti poruka o pogrešci. Niz koji se dobije pomoću ovog postupka šifriranja je malo duži od originala. Specifičnost ove enkripcije je takva da ako šifrirate niz dva puta, rezultirajući nizovi NEĆE biti identični.

Glavne pogreške pri korištenju kriptografskih alata.

Pri korištenju kriptografskih alata često se prave iste greške:

Podcjenjivanje degradacije performansi kod korištenja kriptografije.

Kriptografija je zadatak koji zahtijeva dovoljno velik broj izračuna (posebno za algoritme poput DES, 3DES, GOST, PGP). Pa čak i u slučaju korištenja produktivnih i optimiziranih algoritama (RC5, RC6, AES), od dodatnog prijenosa podataka u memoriji i računalnoj obradi nema nigdje. A to gotovo negira mogućnosti mnogih komponenti poslužitelja (RAID nizovi, mrežni adapteri). Kada koristite hardversku enkripciju ili hardver koji nabavlja ključ za šifriranje, postoji dodatno moguće usko grlo u performansama: brzina prijenosa podataka između dodatnog uređaja i memorije (a rad takvog uređaja možda neće igrati presudnu ulogu). Kada se koristi šifriranje male količine podataka (na primjer, poruka e-pošte), povećanje računskog opterećenja na sustavu nije toliko primjetno, ali u slučaju potpune enkripcije svega, sve to može uvelike utjecati na rad sustava u cjelini.

Podcjenjivanje modernih mogućnosti odabira lozinki i ključeva.

Trenutno su mogućnosti tehnike takve da se ključ duljine 40-48 bita može podudariti snagama male organizacije, a ključ od 56-64 bita od strane sile velike organizacije. Oni. Treba koristiti algoritme koji koriste ključ od najmanje 96 ili 128 bita. Ali većina ključeva generira se pomoću hash algoritama (SHA-1, itd.) Na temelju lozinki koje je uneo korisnik. U tom slučaju 1024-bitni ključ možda neće biti spremljen. Prvo, često se koristi lozinka za jednostavno korištenje. Čimbenici koji olakšavaju odabir su: upotreba samo jednog slova slova; korištenje riječi, imena i izraza u lozinkama; upotreba poznatih datuma, rođendana, itd .; upotreba "predložaka" pri generiranju lozinki (na primjer, 3 slova, zatim 2 broja, zatim 3 slova u cijeloj organizaciji). Dobra lozinka trebao bi biti prilično nasumičan slijed slova u oba registra, brojevima i interpunkcijskim znakovima. Lozinke unesene s tipkovnice do 7-8 znakova, čak i ako se poštuju ova pravila, mogu se odabrati u razumnom vremenskom roku, tako da je bolje da lozinka bude najmanje 11-13 znakova. Idealno rješenje je odbiti generiranje ključa lozinkom, na primjer, korištenje različitih pametnih kartica itd., No u ovom je slučaju potrebno osigurati mogućnost zaštite od gubitka nosača ključa za šifriranje.

Nesigurna pohrana ključeva i lozinki.

Tipični primjeri ove pogreške su:

  • duge i složene lozinke napisane 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 sustava)
  • pohranu elektroničkih ključeva u javnom domenu.
  • učestali prijenos elektroničkih ključeva između korisnika.

Zašto napraviti blindirana vrata ako se ključ nalazi ispod prostirke za vrata?

Prijenos izvorno šifriranih podataka u nesigurno okruženje.

Prilikom organiziranja sigurnosnog sustava, provjerite je li ispunio svoj zadatak. Na primjer, suočio sam se sa situacijom (koja nije povezana sa 1C), kada je prvobitno šifrirana datoteka kada se program izvodio u otvorenom obliku bila smještena u privremenu mapu, odakle se mogla lako čitati. Često se i sigurnosne kopije šifriranih podataka u jasnom obliku nalaze negdje "u blizini" od ovih podataka.

Zloupotreba kriptografskih alata

Kod šifriranja prenesenih podataka ne može se očekivati \u200b\u200bda će podaci biti nedostupni na mjestima gdje se koriste. Na primjer, IPSec usluge ni na koji način ne sprječavaju mogućnost „preslušavanja“ mrežnog prometa na nivou aplikacije na strani poslužitelja aplikacija.

Dakle, kako bi se izbjegle pogreške u implementaciji kriptografskih sustava, potrebno je učiniti (barem) prije nego što ga uvedite.

  • Saznati:
    • Šta trebate zaštititi?
    • Koju metodu zaštite treba koristiti?
    • Za koje dijelove sistema vam treba sigurnost?
    • Ko će kontrolisati pristup?
    • Da li će šifriranje raditi na pravim mjestima?
  • Odredite gdje se informacije pohranjuju, kako se šalju putem mreže i računalima s kojih će se tim podacima pristupiti. To će vam omogućiti da dobijete informacije o brzini, kapacitetu i upotrebi mreže prije implementacije sistema, što je korisno za optimizaciju performansi.
  • Procijenite ranjivost sistema za razne vrste napada.
  • Dizajnirajte i dokumentujte sigurnosni plan sistema.
  • Procijenite ekonomičnost (opravdanost) korištenja sustava.

Zaključak

Naravno, u kratkom pregledu ne možete navesti sve aspekte koji se odnose na sigurnost u 1C, ali donosimo nekoliko preliminarnih zaključaka. Naravno, ova se platforma ne može nazvati idealnom - ona, kao i mnogi drugi, ima svojih problema organizacije sigurnog sistema. Ali to ni na koji način ne znači da se ovi problemi ne mogu zaobići, naprotiv, gotovo svi nedostaci mogu se otkloniti pravilnim razvojem, implementacijom i upotrebom sistema. Većina problema nastaje zbog nedovoljne razrade određenog aplikacijskog 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 skup sigurnosnih mjera treba obuhvatiti sve faze implementacije: razvoj, uporabu, administraciju sustava i, nužno, organizacijske mjere. U informacijskim sistemima glavni sigurnosni prijetnji je "ljudski faktor" (uključujući korisnike). Ovaj skup mjera trebao bi biti razuman i uravnotežen: nema smisla i malo je vjerovatno da će biti dodijeljeno dovoljno sredstava za organiziranje zaštite koja prelazi troškove samih podataka.

Kompanija - Ovo je jedinstvena usluga za kupce, programere, dilere i pridružene partnere. Uz to, jedna je od najboljih internetskih prodavaonica softvera u Rusiji, Ukrajini, Kazahstanu, koja kupcima nudi širok spektar proizvoda, mnogo načina plaćanja, brzu (često trenutnu) obradu narudžbi i praćenje napretka narudžbe u osobnom odjeljku.

Podijeli ovo