Stack overflow ugrađenog jezika na 1c poslužitelju. Kako dolazi do "stack overflow" i kako to spriječiti? Što učiniti ako nešto pođe po zlu

11.05.2020 Programi

Programerski vodič za Informix® DataBlade™ API dostupan je za preuzimanje. Odjeljak "Upravljanje prostorom u snopu" opisuje stvaranje korisnički definiranih funkcija (UDR). Ovaj članak pruža Dodatne informacije i savjete za otklanjanje pogrešaka.

Sljedeće informacije vrijede bez obzira na to radi li se UDR na korisnički definiranom virtualnom procesoru (VP) ili na VP CPU-u. Stog niti može se premjestiti u korisnički definirani virtualni procesor neposredno prije izvršavanja UDR-a.

Koja je veličina stoga dodijeljena za UDR?

Veličina stoga dostupnog UDR-u ovisi o tome kako je UDR kreiran:

    koristeći STACK modifikator, koji omogućuje UDR-u da koristi svoj posebno dodijeljeni stog,

    bez STACK modifikatora, što znači da će UDR dijeliti stog koji je dodijelio poslužitelj s niti koja šalje zahtjev. Veličina stoga u ovom slučaju bit će određena vrijednošću parametra STACKSIZE u onconfig konfiguracijskoj datoteci.

STACK modifikator

Izjave CREATE PROCEDURE ili CREATE FUNCTION imaju izborni STACK modifikator koji vam omogućuje specificiranje količine prostora na stogu, u bajtovima, koji je potreban za izvršenje UDR-a.

Ako koristite modifikator STAK prilikom kreiranja UDR-a, poslužitelj će dodijeliti i osloboditi prostor stog svaki put kada se UDR izvrši. Stvarna dostupna veličina jednaka je STACK vrijednosti u bajtovima minus nešto dodatnog opterećenja ovisno o broju argumenata funkcije.

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

Konfiguracijski parametar STACKSIZE

Onconfig konfiguracijska datoteka uključuje STACKSIZE parametar koji navodi zadanu veličinu stoga za korisničke niti.

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

Stog po niti se dodjeljuje jednom za određenu nit koja izvršava zahtjev. Performanse su bolje kada UDR dijeli jedan stog s niti, budući da poslužitelj ne troši resurse na dodjelu dodatnog stoga za svaki UDR poziv. S druge strane, ako se veličina stoga koju koristi UDR približava vrijednosti STACKSIZE, to može uzrokovati prekoračenje stoga prilikom pozivanja funkcije kao dijela složenog upita (u kojem će slučaju manje prostora na stogu biti dostupno za izvršenje UDR-a).

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

Kada je potrebno kontrolirati veličinu hrpe?

YMorate upravljati prostorom na stogu ako UDR upućuje rekurzivne pozive ili ako UDR zahtijeva više prostora na stogu nego što je prema zadanim postavkama dostupno u stogu niti zahtjeva (STACKSIZE).

Dva su načina za povećanje stoga za izvršenje UDR-a:

    Navedite modifikator STAK kada kreirate UDR.

    Koristite mi_call() za rekurzivne pozive (pogledajte Informix DataBlade API programer's Guide za primjer).

Ako ne navedete veličinu putem STACK-a i ako ne koristite mi_call() za povećanje trenutnog stoga, i ako UDR učini nešto što zahtijeva puno prostora na stogu, to će uzrokovati prekoračenje stoga.

Imajte na umu da neke mi_* funkcije dodaju novi segment stoga za vlastito izvođenje. Ovi segmenti se oslobađaju pri povratku na pozivnu UDR funkciju.

Što učiniti ako nešto pođe po zlu?

Praćenje korištenja stoga

Svrha nadzora je identificirati određeni UDR koji uzrokuje prekoračenje stoga tako da možete promijeniti vrijednost STACK-a posebno za taj određeni UDR.

    Praćenje korištenja stoga s naredbom "onstat -g sts".

    Praćenje sesije koja izvršava SQL upit pomoću "onstat -g ses session_id"

Nakon identifikacije SQL upit koji završava preljevom stoga, trebali biste odrediti upotrebu stoga zasebnim izvršavanjem upita s UDR-ovima koji su dio izvornog upita.

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

promijeniti funkciju MyFoo (lvarchar,lvarchar) s (dodaj stog=131072);

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

Povećaj STACKSIZE

Alternativno, pokušajte povećati vrijednost STACKSIZE. Provjerite rješava li to problem. (Ne zaboravite kasnije vratiti staru vrijednost).

Ako povećanje STACKSIZE ne pomaže, problem je najvjerojatnije u oštećenju memorije. Evo nekoliko prijedloga:

    Omogući škrabanje memorije i provjeru spremišta memorije. Odjeljak "Problemi s otklanjanjem pogrešaka" u članku Dodjela memorije za UDR-ove objašnjava kako to učiniti.

    Ponovno razmislite o korištenju mi_lvarchar. Posebnu pozornost treba obratiti na mjesta gdje se mi_lvarchar prosljeđuje funkciji koja očekuje primiti null-terminirani niz kao argument.

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

mi_print_stack() -- Solaris

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

/tmp/default.stack

Ne možete promijeniti naziv izlazne datoteke, ali možete promijeniti njezinu lokaciju promjenom vrijednosti varijabla okoline DBTEMP. Uvjerite se da informix korisnik može pisati u direktorij $DBTEMP. Sve pogreške do kojih dođe tijekom izvođenja mi_print_stack() prijavljuju se $MSGPATH.

Ova je značajka dostupna samo za OC Solaris.

Glosar

Izrazi i kratice korišteni u ovom članku:

UDRKorisnički definirana rutina
V.P.Virtualni procesor

14.04.2016. Verzija 3.22 Promijenjeno je sučelje, ispravljene su greške prilikom prijenosa registara, 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 Uočene pogreške su ispravljene. Platforma 8.3.8.1747 BP 3.0.43.241
16.06.2016. Verzija 3.26 Uočene greške su ispravljene. Platforma 8.3.8.2088 BP 3.0.44.123
16.10.2016. Verzija 4.0.1.2 Ispravljen prijenos pohrane 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 Algoritam prijenosa registara povezanih s imenicima je promijenjen, uočene greške su ispravljene, prijenos s prepisivanjem poveznica je popravljen.
29.05.2017 Verzija 4.0.4.5 Promijenjen prijenos kretanja, dodan pregled kretanja prenesenih dokumenata, još nešto...
30.5.2017. Verzija 4.0.4.6 Ispravljena pogreška prilikom popunjavanja popisa postojećih direktorija u izvoru (hvala stidljivo)
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 iz BP 2.0 je promijenjen. Neočekivano, prijenos iz UT 10.3 izvršio je Smilegm, u ovoj verziji prijenos je malo ispravljen za ovu situaciju)))
08/10/2017 Verzija 4.0.5.5 Ispravljene pogreške prilikom prijenosa s BP 2.0
19.09.2017. Verzija 4.4.5.7 Ispravljena provjera veze za 3.0.52.*
28.11.2017. Verzija 4.4.5.9 Ispravljene prijavljene pogreške
12/06/2017 Verzija 5.2.0.4 Redizajniran je algoritam pretraživanja poveznica. Dodani su postupci prijenosa iz BP 1.6; više nema striktne veze s BP-om - možete ga jednostavno koristiti za prijenos podataka "gotovo" identičnih konfiguracija. Pokušat ću odmah ispraviti sve komentare.
12/08/2017 Verzija 5.2.1.3 Dodan algoritam za prijenos izvoda plaća iz BP.2.0 u BP 3.0. Uključene promjene za dijeljenje između identičnih konfiguracija.
19. 12. 2017. Verzija 5.2.2.2 Prilagođen je prijenos samostalnih informacijskih registara za imenike koji se nalaze u gabaritima tih registara.

12/06/2017 Nova verzija obrade 5.2.0.4. Među značajnim promjenama je mogućnost prelaska s BP 1.6 na BP 3.0. Glavna promjena je upravljanje pretraživanjem veza imenika - u prethodne verzije pretraživanje je bilo po GUID-u, ali u ovoj verziji možete omogućiti pretraživanje “Po detaljima”:

17.01.2018. Verzija 5.2.2.3 Popravljeno - uočene pogreške podređeni imenici i registri periodičnih informacija.

07/19/2018 Verzija 5.2.2.8 Uočene greške su ispravljene.

u kojem možete postaviti detalje pretraživanja za bilo koji imenik. Sam ovaj način je “izronio” na brojne zahtjeve radnika, za slučajeve kada je potrebna razmjena u već postojeću bazu koja već ima podatke (npr. za spajanje računovodstvenih evidencija za dvije organizacije u jednu bazu).

21.12.2015. Objavljena je platforma 8.3.7.1805, odnosno BP 3.0.43.29 nova verzija obrada 3.1:-) (opis u nastavku). Nova funkcionalnost- mogućnost usporedbe stanja i prometa između dvije BP baze podataka (za sve račune, ako se kontni planovi poklapaju, ili za pojedinačne povezane računovodstvene račune, sa ili bez analitike).
01/03/2016 Verzija 3.5 - promijenjen je mehanizam povezivanja na izvornu bazu - usklađen s BSP 2.3.2.43. Ispravljene manje greške. Platforma 8.3.7.1845, BP 3.0.43.50
16.02.2016. Verzija 3.6 - Dodana je oznaka "Postavi ručnu korekciju" za dokumente koji se prenose s pokretima. Fiksni prijenos kretanja - dokumenti s datumom manjim od početka razdoblja prenose se bez kretanja. Platforma 8.3.7.1917., BP 3.0.43.116
22.3.2016. Verzija 3.10 - Dodana je zastavica "Uvijek prepiši reference" za obavezno ponovno pisanje referenciranih objekata (brzina prijenosa značajno je smanjena, ali ponekad je neophodna). Dodana je kartica "Priprema" u kojoj možete konfigurirati korespondenciju izvornog i odredišnog kontnog plana (na istoj razini kao i šifre računa) i prijenos konstanti. Platforma 8.3.7.1970., BP 3.0.43.148

03.04.2016. Verzija 3.11 Promijenjeno je popunjavanje popisa dokumenata koji postoje u izvoru: popunjavalo se kretanjem prema kontnom planu, jednostavno poveznicama za razdoblje, kao u // stranica/public/509628/

Obrada je namijenjena prijenosu podataka za bilo koje razdoblje na isti način kao i “Uploading MXL” s ITS-om, samo bez korištenja XML, JSON i ostalih međudatoteka - razmjena iz baze u bazu putem COM-a. U verzijama starijim od 3.10, veza se koristi pomoću algoritma iz BSP-a, koji predviđa registraciju comcntr.dll (ako OS to “dopušta”), kao i razne poruke kada je nemoguće uspostaviti vezu, tj. primjer - “Informacijska baza je u procesu ažuriranja” itd. . Dodana provjera odabira prijamnika kao IS izvora - izdaje se upozorenje.

Može se koristiti za:

1. Prijenos regulatornih referentnih informacija (RNI) od izvora IS-a do odredišta IS-a (prijenos svih referentnih informacija provodi se na zahtjev korisnika, potrebne referentne knjige itd. prenose se poveznicama tijekom bilo kakvih prijenosa).

2. Prijenos dokumenata za bilo koje odabrano razdoblje.

3. Prijenos svih informacija iz "pokvarenog" informacijskog sigurnosnog sustava ako je pokrenut u 1C:Enterprise modu, a učitavanje podataka ili pokretanje Konfiguratora je nemoguće.

Značajka obrade - informacijska sigurnost prijemnika i izvora može biti drugačija; prijenos s 2.0 na 3.0 - izdanja su različita, ali prijenos radi!!! Nepodudarni detalji se zanemaruju ili se za njih moraju navesti algoritmi prijenosa.

Komentar: Pretvorba podataka se NE KORISTI! I ne pitajte zašto!!! Za one koji su posebno izbirljivi - BP 3.0 se mijenja gotovo svaki dan, više nema snage za ažuriranje pravila prijenosa - ovdje je sve jednostavnije :-).

Još jedna značajka obrade je da se pokreće u informacijskoj sigurnosti prijamnika (analozi koji su najbliži po funkcionalnosti rade obrnuto - od izvora do prijamnika).

Početak - morate odrediti razdoblje obrade, navesti organizaciju iz izvora, bit će prebačeno na odredište.

Prilikom prijenosa organizacije prenose se računovodstvene politike i "povezani" registri informacija. Stoga, kada prvi put odaberete organizaciju u izvoru, proći će neko vrijeme prije nego što se pojavi u prijemniku.

Kontni planovi izvora i odredišta moraju biti isti, nikakvi različiti konti u verziji 2.* se ne prenose na odredište, u budućnosti se planira omogućiti usklađivanje odgovarajućih konta i analitike. Računi se prenose pomoću kodova koji se ne nalaze u prijemniku NE MOGU SE KREIRATI!!!

Preostali objekti se prenose pomoću internih identifikatora (GUID), pa biste trebali obratiti pozornost na neke ključne direktorije, na primjer - Valute.

Ako planirate razmjenu s "čistom" bazom podataka, onda je bolje izbrisati direktorije popunjene tijekom prvog pokretanja prije razmjene. Zašto postoji stranica u obradi gdje možete dobiti te elemente imenika i izbrisati ih. U najmanju ruku morate ukloniti valutu "rub". - jer dupliciranje je gotovo neizbježno (u principu, to se lako ispravlja nakon dijeljenja pretraživanja i zamjene duplikata ugrađenih u BP 3.0).

Obrada predviđa pozivanje stranice za brisanje imenika kada je otvoren početni obrazac za ispunjavanje:

Kada otvorite obradu, prikazat će vam se stranica za brisanje imenika popunjenih tijekom početnog popunjavanja:

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


Važno je provjeriti podudarnost Kontnog plana izvora i primatelja i obavezno navesti podudarnost računa.

Nema potrebe za brisanjem unaprijed definiranih elemenata imenika - oni se prenose konfiguracijskim identifikatorima (ne GUID-ovima).

Objekte za prijenos možete odabrati pomoću obrasca za odabir iz imenika i dokumenata (informacijski registri pridruženi ovim objektima bit će automatski preneseni, tako da ih nije potrebno posebno birati).Prijenos upisnika, redukcija je privremeno onemogućena - potrebno je izraditi popis upisnika za prijenos - nešto treba prenijeti, nešto ne, u ovoj fazi dovoljno je ono što se prenosi u imenicima, popis upisnika za prijenos bit će u predlošku u budućim verzijama.

Prilikom razmjene s 2.0, neki od detalja (npr. Podaci za kontakt) prenosi se prema algoritmu ugrađenom u obradu, jer za 2.0 i 3.0 pohranjuju se drugačije. Slična je situacija i s nizom dokumenata (primjerice Ispravak duga).

Popis tipova objekata može se popuniti drugačije u verziji 3.22, to se nalazi u podizborniku, promjene su prikazane na slici:

Postoji pojednostavljenje korištenja obrade - ne možete odabrati imenike za razmjenu, već jednostavno ispuniti popis tipova u prijemniku samo onim tipovima imenika koji imaju barem jedan unos u izvoru.

Obrada ima ugrađeni izgled koji navodi direktorije koje nije potrebno prenijeti iz izvora u odredište (izgled "Isključi iz prijenosa"). U ovaj izgled možete dodati (ukloniti) bilo koje direktorije. Ukoliko ne trebate prenositi sve referentne podatke, dovoljno je prenijeti dokumente, čiji popis možete dobiti i bez odabira vrste, jednostavno ispunite sve izvorne dokumente za koje postoje transakcije.

Predviđen je prijenos dokumenata s prometima, za razmjene 3.0 na 3.0 i korespondenciju kontnih planova radi jedan na jedan, kod razmjene 2.0 na 3.0 moguće su greške, pa se preporučuje prijenos dokumenata bez kretanja, a zatim jednostavno ih prenesite na prijemnik. Prilikom prijenosa dokumenata s pokretima, postavljena je zastavica "Ručno podešavanje".

Atribut "Knjiženo" postavljen je u dokumentima primatelja na isti način kao u izvoru, ali će se kretanja (ako nisu prenesena) pojaviti tek nakon obrade dokumenata, na primjer, pomoću obrade ugrađene u BP 3.0 Grupno knjiženje dokumenata (preporučena opcija), ili iz ove obrade (ovdje postoji gumb "Objavi dokumente").

Ako se obrada planira koristiti za trajnu razmjenu, može se registrirati u informacijskoj sigurnosti primatelja (gumb "Registracija"). Za “jednokratne” prijenose, možete ga jednostavno koristiti putem File - Open.

21.12.2015. - Verzija 3.1 platforma 8.3.7.1805 i jedinica napajanja 3.0.43.29 (verzija 2.15 za 3.0.43.* ne radi - konfiguracija je dosta promijenjena).

Promijenjeno:

Dijalog za odabir opcije povezivanja, zastavica Klijent-poslužitelj je uvijek dostupna, ovisno o njegovoj instalaciji, dostupan je odabir mape ili baza podataka datoteka, ili polja s nazivom baze podataka na poslužitelju i nazivom samog poslužitelja (ispravljena je dijaloška greška u verziji 2.15)

- NOVA FUNKCIONALNOST: Mehanizam za usklađivanje stanja i prometa između baze podataka izvora i primatelja u različitim stupnjevima detalja:


Mislim da je izbor opcija provjere jasan sa slike:


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


U tankom klijentu se nisam zamarao programskim pritiskanjem gumba, predlažem jednostavnu opciju za prikaz usporednog prozora:


Usporedba u tanak klijent, IMHO, prikladnije, jer ima navigacijske gumbe za razlike, što je praktičnije za velike tablice nego listanje mišem:

22.3.2016. Verzija 3.10 - Dodana je zastavica "Uvijek prepiši reference" za obavezno ponovno pisanje referenciranih objekata (brzina prijenosa značajno je smanjena, ali ponekad je neophodna). Dodana je kartica "Priprema" u kojoj možete konfigurirati korespondenciju izvornog i odredišnog kontnog plana (na istoj razini kao i šifre računa) i prijenos konstanti. Platforma 8.3.7.1970., BP 3.0.43.148

- NOVA FUNKCIONALNOST: Prije prijenosa dokumenata preporuča se provjeriti dosljednost kontnog plana u izvoru i odredištu, kao i usklađenost s utvrđenim konstantama.

U tu svrhu dodana je kartica “Priprema” u kojoj možete postaviti ove korespondencije:


Algoritam za popunjavanje tablice podudaranja računa je jednostavan - analizira se promet koji postoji u izvoru, a za svaki račun koji se tamo nađe pronalazi se podudaranje u primatelju po kodu; ako podudaranje nije pronađeno, redak s računom kod je prikazan u tablici, pomoću kojeg trebate odabrati račun primatelja, koji će se koristiti prilikom prijenosa. Usklađenost s Pokeom uspostavljena je na razini koda.

Za provjeru i prijenos korespondencije utvrđenih konstanti koristi se odgovarajuća tablica:

Ispunjavamo ga i po potrebi prenosimo. Prenose se samo konstante označene zastavicom...

Stog je, u ovom kontekstu, posljednji u prvom međuspremniku koji dodjeljujete tijekom izvođenja vašeg programa. Zadnja, prva (LIFO) znači da je zadnja stvar koju stavite uvijek prva stvar koju iskočite natrag - ako izbacite 2 stavke na hrpi, "A" i zatim "B", onda je prva stvar koju iskočite sa hrpe bit će "B", a sljedeća stvar će biti "A".

Kada pozovete funkciju u svom kodu, sljedeća naredba nakon poziva funkcije pohranjuje se na stog i bilo koji memorijski prostor koji se može prebrisati pozivom funkcije. Odabrana funkcija može koristiti više hrpa za vlastite lokalne varijable. Kada se to učini, oslobodit će prostor lokalne varijable koji je koristio i zatim se vratiti na prethodnu funkciju.

Stack Overflow

Prelijevanje stoga je kada ste upotrijebili više memorije na stogu nego što je vaš program namjeravao koristiti. Na ugrađenim sustavima možete imati samo 256 bajtova za stog, a ako svaka funkcija zauzima 32 bajta, tada možete imati samo 8 poziva funkcije za funkciju 2 s funkcijom duboke funkcije 1, koja poziva funkciju 3, koja poziva funkciju 4. ..tko poziva funkciju 8, koja poziva funkciju 9, ali funkcija 9 prepisuje memoriju izvan stoga. Ovo može prebrisati memoriju, kod itd.

Mnogi programeri čine ovu pogrešku pozivanjem funkcije A, koja zatim poziva funkciju B, koja zatim poziva funkciju C, koja zatim poziva funkciju A. Možda radi većinu vremena, ali samo jedan pogrešan unos uzrokovat će da zauvijek kruži dok računalo ne fails otkriva da je stog pun.

Rekurzivne funkcije također su uzrok tome, ali ako pišete rekurzivno (tj. vaša funkcija poziva samu sebe) tada morate biti svjesni toga i koristiti statičke/globalne varijable kako biste spriječili beskonačnu rekurziju.

Tipično, OS i programski jezik koji koristite upravlja hrpom i nije u vašim rukama. Trebali biste pogledati svoj grafikon poziva (struktura stabla koja iz vaše glavne točke prikazuje što svaka funkcija poziva) da biste vidjeli koliko su duboki vaši pozivi funkcija i identificirali petlje i rekurziju koji nisu predviđeni. Namjerne petlje i rekurzija moraju se umjetno provjeriti na pogreške ako pozivaju jedna drugu previše puta.

Osim dobre prakse programiranja, statičkog i dinamičkog testiranja, ne možete puno učiniti u ovim sustavima visoke razine.

Ugrađeni sustavi

U ugrađenom svijetu, posebno u kodu sa visoka pouzdanost(automobili, zrakoplovstvo, zrakoplovstvo), provodite opsežna testiranja i pregled koda, ali također radite sljedeće:

  • Onemogući rekurziju i petlje - usklađenost s pravilima i testiranjem
  • Držite kod i hrpu daleko jedan od drugoga (kod u flashu, hrpa u RAM-u i nikada se neće podudarati)
  • Postavite zaštitne trake oko hrpe - prazno područje memorije koje ispunite čarobnim brojem (obično rutina prekida, ali ovdje ima mnogo varijacija) i stotine ili tisuće puta u sekundi pogledate zaštitne trake da biste sigurni da nisu prepisani.
  • Koristite zaštitu memorije (tj. nemojte izvršavati na stogu, nemojte čitati ili pisati izravno iza stoga)
  • Prekidi ne pozivaju sekundarne funkcije - oni postavljaju zastavice, kopiraju podatke i prepuštaju aplikaciji da se pobrine za rukovanje njima (inače biste mogli završiti 8 duboko u stablu poziva funkcija, imati prekid, a zatim imati još nekoliko funkcija unutra izlaz prekida, uzrokujući bacanje). Imate više stabala poziva - jedno za glavne procese i jedno za svaki prekid. Ako vaši prekidi mogu prekidati jedno drugo... pa, postoje zmajevi...

Jezici i sustavi visoke razine

Ali u jezicima visoke razine koji rade na operativnim sustavima:

  • Smanjite pohranu lokalnih varijabli (lokalne varijable su pohranjene na stogu), iako su prevoditelji prilično pametni u vezi s tim i ponekad će staviti velike dijelove na hrpu ako je vaše stablo poziva plitko)
  • Izbjegavajte ili strogo ograničite rekurziju
  • Nemojte previše prekidati svoje programe u sve manje i manje funkcije - čak i bez razmatranja lokalnih varijabli, svaki poziv funkcije troši do 64 bajta na stogu (32-bitni procesor, spremanje polovice procesorskih registara, zastavica itd.).
  • Neka stablo poziva bude plitko (slično gornjem opisu)

Web poslužitelji

Ovisi o sandboxu koji imate možete li kontrolirati ili čak vidjeti hrpu. Velike su šanse da možete upravljati web poslužiteljima kao bilo kojim drugim jezikom i operativnim sustavom visoke razine - to uglavnom nije u vašim rukama, ali provjerite jezik i hrpu poslužitelja koje koristite. Na primjer, možete podijeliti stog na vašem SQL poslužitelju.

Programski stog je posebno područje memorija organizirana prema LIFO (Last in, first out) principu čekanja. Naziv "skup" dolazi od analogije principa njegove konstrukcije sa snopom ploča - ploče možete staviti jednu na drugu (metoda dodavanja u snop, "gurati", "gurati"), a zatim oduzmite ih, počevši od vrha (metoda dobivanja vrijednosti sa steka, "iskakanje", "iskakanje"). Programski stog naziva se i pozivni stog, izvršni stog ili strojni stog (kako ga ne bi brkali sa "stogom" - apstraktnom strukturom podataka).

Čemu služi stog? Omogućuje vam prikladno organiziranje poziva potprograma. Kada se pozove, funkcija prima neke argumente; također mora negdje pohraniti svoje lokalne varijable. Osim toga, moramo uzeti u obzir da jedna funkcija može pozvati drugu funkciju, koja također treba proslijediti parametre i pohraniti svoje varijable. Koristeći stog, prilikom prosljeđivanja parametara samo ih trebate staviti na stog, a zatim ih pozvana funkcija može "izbaciti" od tamo i koristiti. Tu se mogu pohraniti i lokalne varijable - na početku svog koda funkcija dodjeljuje dio memorije steka, a kada se kontrola vrati, briše je i oslobađa. Programeri na jezicima visoke razine obično ne razmišljaju o takvim stvarima - kompajler generira sav potreban rutinski kod za njih.

Posljedice greške

Sada smo gotovo blizu problema. Apstraktno gledano, hrpa je beskonačno spremište u koje se nove stavke mogu beskrajno dodavati. Nažalost, u našem svijetu sve je konačno - a memorija stogova nije iznimka. Što se događa ako završi kada se argumenti funkcije gurnu na stog? Ili funkcija dodjeljuje memoriju za svoje varijable?

Dogodit će se pogreška koja se zove preljev stoga. Budući da je stog potreban za organiziranje pozivanja korisnički definiranih funkcija (a gotovo svi programi u modernim jezicima, uključujući objektno orijentirane, izgrađeni su na temelju funkcija na ovaj ili onaj način), oni više neće moći biti pozvan. Stoga operativni sustav preuzima kontrolu, čisti stog i prekida program. Ovdje možemo naglasiti razliku između stack overflowa i stack overflowa - u prvom slučaju dolazi do pogreške prilikom pristupa netočnom memorijskom području, a ako nema zaštite u ovoj fazi, ona se ne manifestira u tom trenutku - s uspješnim splet okolnosti, program može raditi normalno. Ako je zaštićena samo memorija kojoj se pristupa, . U slučaju stoga, program svakako završava.

Da budemo potpuno precizni, treba napomenuti da takav opis događaja vrijedi samo za prevoditelje koji prevode u nativni kod. U upravljanim jezicima virtualni stroj postoji stog za upravljane programe, čije je stanje puno lakše pratiti, a čak si možete priuštiti i izbacivanje iznimke programu kada dođe do preljeva. U jezicima C i C++ ne možete računati na takav "luksuz".

Razlozi za grešku

Što bi moglo dovesti do takve neugodne situacije? Na temelju gore opisanog mehanizma, jedna je mogućnost da ima previše ugniježđenih poziva funkcija. Ovaj je scenarij osobito vjerojatan kada se koristi rekurzija. Beskonačna rekurzija (u nedostatku lijenog mehanizma evaluacije) se prekida na ovaj način, za razliku od , koji ponekad ima korisne primjene. Međutim, s malom količinom memorije dodijeljenom stogu (što je, na primjer, tipično za mikrokontrolere), jednostavan niz poziva može biti dovoljan.

Druga opcija su lokalne varijable, koje zahtijevaju puno memorije. Imati lokalni niz od milijun elemenata ili milijun lokalnih varijabli (nikad ne znate što se događa) nije najbolja ideja. Čak i jedan poziv tako pohlepne funkcije može lako uzrokovati prelijevanje stoga. Za dobivanje velike količine podataka, bolje je koristiti mehanizme dinamičke memorije, koji će vam omogućiti da se nosite s pogreškom njenog nedostatka.

Međutim, dinamička memorija prilično je spora u smislu dodjele i poništavanja (budući da to rješava operativni sustav), a s izravnim pristupom morate je ručno dodijeliti i poništiti. Memorija na stogu se dodjeljuje vrlo brzo (zapravo, samo trebate promijeniti vrijednost jednog registra); osim toga, objekti alocirani na stogu imaju destruktore koji se automatski pozivaju kada se kontrola nad funkcijom vrati i stog se očisti. Naravno, odmah se javlja želja za dobivanjem memorije iz hrpe. Stoga je treći način prelijevanja programerova vlastita dodjela memorije na stogu. C biblioteka nudi funkciju alloca posebno za ovu svrhu. Zanimljivo je primijetiti da ako funkcija za dodjelu dinamičke memorije malloc ima svog "blizanca" za oslobađanje, free, onda ga funkcija alloca nema - memorija se automatski oslobađa nakon povratka kontrole nad funkcijom. Možda to samo komplicira situaciju - nakon svega, neće biti moguće osloboditi memoriju prije izlaska iz funkcije. Iako je, prema man stranici, "funkcija alloca ovisna o stroju i kompajleru; na mnogim je sustavima njezina implementacija problematična i s greškama; njezina je upotreba vrlo neozbiljna i na nju se ne gleda" - još uvijek se koristi.

Primjeri

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

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

Ova funkcija dobiva popis datoteka u navedenom direktoriju, a zatim poziva samu sebe za one elemente popisa koji su direktoriji. Prema tome, s dovoljno dubokim stablom sustav datoteka, dobivamo prirodan rezultat.

Primjer drugog pristupa, preuzet iz pitanja "Zašto dolazi do prekoračenja stoga?" sa stranice koja se zove Stack Overflow (stranica je zbirka pitanja i odgovora o bilo kojoj temi programiranja, a ne samo o Stack Overflowu, kako bi se moglo činiti):

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

Kao što vidite, glavna funkcija alocira memoriju na stogu za nizove tipa int i float, svaki s milijun elemenata, što ukupno daje nešto manje od 8 megabajta. Ako uzmete u obzir da prema zadanim postavkama Visual C++ rezervira samo 1 megabajt za stog, odgovor postaje očit.

Evo primjera preuzetog iz GitHub repozitorija projekta Lightspark Flash player:

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

Možete se nadati da h.getLength()-7 nije preveliki broj kako ne bi došlo do prelijevanja u sljedećem retku. Ali je li vrijeme ušteđeno na dodjeli memorije vrijedno "potencijalnog" pada programa?

Poanta

Stack Overflow - fatalna greška, što najčešće utječe na 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 veličine lokalnih varijabli ili pogreške u ručnoj dodjeli memorije na stogu. Sva klasična pravila ostaju na snazi: ako postoji izbor, bolje je izabrati iteraciju umjesto rekurzije, a također ne raditi ručni rad umjesto prevoditelja.

Bibliografija

  • E. Tanenbaum. Arhitektura računala.
  • Wikipedia. Stack overflow.
  • Stack Overflow. Stack overflow C++.

Ovaj članak još jednom pokazuje da svaki skup sigurnosnih mjera mora pokriti sve faze implementacije: razvoj, implementaciju, administraciju sustava i, naravno, organizacijske mjere. U informacijskim sustavima "ljudski faktor" (uključujući korisnike) je glavna sigurnosna prijetnja. Ovaj skup mjera mora biti razuman i uravnotežen: nema smisla i malo je vjerojatno da će se izdvojiti dovoljno sredstava za organizaciju zaštite koja premašuje troškove samih podataka.

Uvod

1C:Enterprise je najčešći računovodstveni sustav u Rusiji, ali unatoč tome, do verzije 8.0 njegovi programeri obraćali su vrlo malo pažnje na sigurnosna pitanja. Uglavnom, naravno, to je diktirano cjenovnom nišom proizvoda i fokusom na male tvrtke u kojima nema kvalificiranih IT stručnjaka, a mogući trošak postavljanja i održavanja sigurnog sustava bio bi previsoko skup za poduzeće. S izdavanjem verzije 8.0, naglasak se morao promijeniti: 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 vrlo je individualno pitanje. Glavni informacijski sustav modernog poduzeća mora zadovoljiti najmanje sljedeće sigurnosne zahtjeve:

  • Prilično mala vjerojatnost kvara sustava zbog unutarnjih razloga.
  • Pouzdana autorizacija korisnika i zaštita podataka od pogrešnih radnji.
  • Učinkovit sustav za dodjelu korisničkih prava.
  • Operacijski sustav backup i oporavak u slučaju kvara.

Zadovoljavaju li rješenja temeljena na 1C:Enterprise 8.0 ove zahtjeve? Ne postoji jasan odgovor. Unatoč značajnim promjenama u sustavu kontrole pristupa, ostala su mnoga neriješena pitanja. Ovisno o tome kako je sustav dizajniran i konfiguriran, svi ovi zahtjevi možda neće biti ispunjeni ili ispunjeni u dovoljnoj mjeri za određenu implementaciju, međutim, vrijedi obratiti pažnju (i to je značajna posljedica „mladosti“ platforme ) da je za potpuno ispunjenje navedenih uvjeta potrebno uložiti uistinu herkulovske napore.

Ovaj je članak namijenjen programerima i implementatorima rješenja na platformi 1C:Enterprise, kao i administratori sustava organizacije u kojima se koristi 1C:Enterprise, te opisuje neke aspekte razvoja i konfiguracije klijent-poslužiteljske verzije sustava sa stajališta organizacije sigurnost informacija. Ovaj se članak ne može koristiti kao zamjena za dokumentaciju, već samo ukazuje na neke točke koje u njemu još nisu sadržane. I, naravno, niti ovaj članak niti sva dokumentacija neće moći odražavati složenost problema izgradnje sigurnog informacijski sistem, koji mora istovremeno zadovoljiti proturječne zahtjeve za sigurnost, performanse, praktičnost i funkcionalnost.

Klasifikacija i terminologija

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

Informacijska prijetnja– mogućnost situacije u kojoj će se podaci neovlašteno čitati, kopirati, mijenjati ili blokirati.

I, na temelju ovu definiciju, u članku su informacijske prijetnje klasificirane na sljedeći način:

  • Neovlašteno uništavanje podataka
  • Neovlaštena promjena podataka
  • Neovlašteno kopiranje podataka
  • Neovlašteno čitanje podataka
  • Nedostupnost podataka

Sve prijetnje dijele se na namjerne i nenamjerne. Realiziranu informacijsku prijetnju nazvat ćemo incident. Značajke sustava su:

Ranjivosti– značajke koje dovode do incidenata Mjere zaštite– značajke koje blokiraju mogućnost incidenta

Uglavnom, razmatraju se samo oni slučajevi čija je vjerojatnost uzrokovana korištenjem tehnološke platforme 1C:Enterprise 8.0. klijent-poslužitelj verzija(dalje, u slučajevima kada to nije u suprotnosti sa značenjem jednostavno 1C ili 1C 8.0). Definirajmo sljedeće glavne uloge u odnosu na korištenje sustava:

  • Operatori– korisnici koji imaju prava pregleda i izmjene podataka ograničena ulogom aplikacije, ali nemaju administrativne funkcije
  • Administratori sustava– korisnici koji imaju administrativna prava u sustavu, uključujući administrativna prava u operativnim sustavima aplikacijskog poslužitelja i MS SQL poslužitelja, administrativna prava u MS SQL i dr.
  • Administratori informacijske sigurnosti– korisnici kojima su delegirane određene administrativne funkcije u 1C informacijskoj bazi (poput dodavanja korisnika, testiranja i ispravljanja, sigurnosna kopija, postavka aplikacijsko rješenje i tako dalje.)
  • Programeri sustava– korisnici koji razvijaju aplikativno rješenje. Općenito, možda nemaju pristup radnom sustavu.
  • Osobe koje nemaju izravan pristup sustavu– korisnici kojima nisu delegirana prava pristupa 1C, ali koji mogu, u određenoj mjeri, utjecati na rad sustava (obično su to svi korisnici iste domene Active Directory u kojoj je sustav instaliran). Ova se kategorija primarno smatra identificiranjem potencijalno opasnih subjekata u sustavu.
  • Automatizirane administrativne skripte– programi kojima su delegirane određene funkcije, dizajnirani za automatsko obavljanje određenih radnji (primjerice uvoz-izvoz podataka)

Ovdje je potrebno napomenuti dvije stvari: prvo, ovu klasifikaciju vrlo grubo i ne uzima u obzir podjele unutar svake skupine - takva podjela će biti napravljena za neke specifične slučajeve, a drugo, pretpostavlja se da druge osobe ne mogu utjecati na rad sustava, što se mora osigurati sredstvima izvana 1C.

Svaki sigurnosni sustav mora biti dizajniran imajući na umu izvedivost i trošak vlasništva. Općenito, kod razvoja i implementacije informacijskog sustava potrebno je da cijena zaštite sustava odgovara:

  • vrijednost zaštićenih podataka;
  • troškovi stvaranja incidenta (u slučaju namjerne prijetnje);
  • financijski rizici u slučaju incidenta

Besmisleno je i štetno organizirati obranu koja je mnogo skuplja od procjene njezine financijske učinkovitosti. Postoji nekoliko metoda za procjenu rizika od gubitka informacija, ali se o njima ne govori u okviru ovog članka. Drugi važan aspekt je održavanje ravnoteže često suprotstavljenih zahtjeva za informacijskom sigurnošću, performansama sustava, praktičnošću i lakoćom rada sa sustavom, brzinom razvoja i implementacije te ostalim zahtjevima za informacijske sustave poduzeća.

Glavne značajke mehanizma informacijske sigurnosti sustava

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

  • Podaci i konfiguracija pohranjeni su u datoteci koju mogu čitati i pisati svi korisnici sustava.
  • Kao što će biti prikazano u nastavku, autorizacija sustava se vrlo lako zaobilazi.
  • Integritet sustava osigurava samo kernel klijentskog dijela.

U verziji klijent-poslužitelj za pohranu informacija koristi se MS SQL Server koji omogućuje:

  • Pouzdanija pohrana podataka.
  • Izolacija datoteka od izravnog pristupa.
  • Napredniji mehanizmi transakcija i zaključavanja.

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

  • Autorizacija korisnika pomoću lozinke navedene u 1C.
  • Autorizacija korisnika od strane trenutnom korisniku Windows.
  • Dodjeljivanje uloga korisnicima sustava.
  • Ograničavanje administrativnih funkcija ulogom.
  • Dodjela dostupnih sučelja po ulogama.
  • Ograničavanje pristupa objektima metapodataka prema ulozi.
  • Ograničavanje pristupa detaljima objekta prema ulozi.
  • Ograničavanje pristupa podatkovnim objektima ulogama i parametrima sesije.
  • Ograničavanje interaktivnog pristupa podacima i izvršnim modulima.
  • Neka ograničenja izvršavanja koda.

Općenito, korištena shema pristupa podacima prilično je tipična za informacijske sustave ove razine. Međutim, u odnosu na ovu implementaciju troslojne klijentsko-poslužiteljske arhitekture, postoji nekoliko temeljnih aspekata koji dovode do relativno velikog broja ranjivosti:

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

    Donekle pojednostavljeni dijagram sigurnosnih značajnih faza obrade podataka prikazan je na slici 1. Opće pravilo za 1C je smanjiti ograničenja kako se krećete niz ovu shemu, stoga korištenje ranjivosti na jednoj od viših razina može poremetiti rad sustava na svim razinama.

  2. Nedovoljno uspostavljene procedure za praćenje prenesenih podataka pri prelasku s razine na razinu.

    Nažalost, nisu svi interni mehanizmi sustava savršeno otklonjeni, posebno za neinteraktivne mehanizme, čije je otklanjanje pogrešaka uvijek zahtjevnije s jedne strane, ali odgovornije s druge strane. Ova "bolest" nije problem isključivo s 1C; nalazi se u mnogim poslužiteljskim proizvodima većine dobavljača. Tek se posljednjih godina pozornost na ove probleme značajno 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 te na rad u malim organizacijama, stoga ne čudi da se povijesno razvilo da je značajan dio “developera” aplikativnih rješenja i “administratora” sustava nemaju dovoljno znanja i vještina za rad s puno složenijim proizvodom, a to je verzija 8.0. Problem je pogoršan praksom franšiznih tvrtki podučavanja „u borbi“ na račun klijenata, bez sustavnog pristupa ovoj temi. Potrebno je odati priznanje tvrtki 1C da se u posljednjih nekoliko godina ova situacija postupno ispravljala: ozbiljne tvrtke franšize počele su odgovornije pristupati problemu odabira i obuke osoblja, razini podrške informacijske tehnologije od tvrtka 1C značajno se povećala, pojavili su se programi certifikacije usmjereni na visoka razina servis; ali situacija se ne može trenutno popraviti, pa ovaj faktor treba uzeti u obzir pri analizi sigurnosti sustava.

  4. Platforma je relativno mlada.

    Među proizvodima sličnog usmjerenja i namjene, ovo je jedno od najmlađih rješenja. Funkcionalnost platforme je više-manje uspostavljena prije nepunih godinu dana. Istodobno, svako izdanje platforme, počevši od 8.0.10 (u ovom su izdanju implementirane gotovo sve trenutne mogućnosti sustava) postalo je znatno stabilnije od prethodnih. Funkcionalnost standardnih aplikacijskih rješenja i dalje vrtoglavo raste, iako se koristi samo polovica mogućnosti platforme. Naravno, u takvim uvjetima možemo govoriti o stabilnosti prilično uvjetno, ali općenito se mora priznati da su u mnogim aspektima rješenja na platformi 1C 8.0 značajno ispred u funkcionalnosti i performansama (a često i u stabilnosti) sličnih rješenja na 1C. 7.7 platforma.

Dakle, sustav (i, po mogućnosti, standardno aplikativno rješenje) je postavljen u poduzeću i instaliran na računalima. Prije svega, potrebno je stvoriti okruženje u kojem postavljanje 1C sigurnosti ima smisla, a za to mora biti konfigurirano na način da je ispunjena pretpostavka da na sigurnost sustava značajno utječu postavke sustava.

Slijedite opća pravila za postavljanje sigurnosti.

Ne može biti govora ni o kakvoj informacijskoj sigurnosti sustava ako se poštuju osnovni principi kreiranja sigurni sustavi. Budite sigurni da su ispunjeni barem sljedeći uvjeti:

  • Pristup poslužiteljima je fizički ograničen te je osiguran njihov nesmetan rad:
    • poslužiteljska oprema zadovoljava zahtjeve pouzdanosti, zamjena neispravne poslužiteljske opreme je otklonjena, redundantni sklopovi se koriste za posebno kritična područja hardver(RAID, napajanje iz više izvora, više komunikacijskih kanala itd.);
    • poslužitelji se nalaze u zaključanoj prostoriji, a ta je soba otvorena samo za vrijeme trajanja radova koji se ne mogu obavljati na daljinu;
    • Samo jedna ili dvije osobe imaju pravo otvoriti serversku sobu, u slučaju nužde razvijen je sustav obavješćivanja odgovornih osoba;
    • osigurano je neprekidno napajanje poslužitelja
    • osigurani su normalni klimatski uvjeti za rad opreme;
    • postoji požarni alarm u serverskoj sobi, nema opasnosti od poplave (posebno za prvi i zadnji kat);
  • Postavke mreže i informacijske infrastrukture poduzeća su ispravno dovršene:
    • Vatrozidi su instalirani i konfigurirani na svim poslužiteljima;
    • svi korisnici i računala su autorizirani na mreži, lozinke su dovoljno složene da se ne mogu pogoditi;
    • operateri sustava imaju dovoljno prava za normalan rad s njim, ali nemaju prava na administrativne radnje;
    • antivirusni alati su instalirani i uključeni na svim računalima u mreži;
    • Poželjno je da korisnici (osim mrežnih administratora) nemaju administratorska prava na klijentskim radnim stanicama;
    • pristup Internetu i prijenosni medij informacije trebaju biti regulirane i ograničene;
    • revizija sustava sigurnosnih događaja mora biti konfigurirana;
  • Glavna organizacijska pitanja su riješena:
    • korisnici imaju dovoljne kvalifikacije za rad s 1C i hardverom;
    • korisnici su obaviješteni o odgovornosti za kršenje pravila rada;
    • za svaki bitni element informacijskog sustava imenovane su financijski odgovorne osobe;
    • svi jedinice sustava zapečaćeno i zatvoreno;
    • Obratite posebnu pozornost na upućivanje i nadzor čistačica, građevinskih radnika i električara. Te osobe mogu nepažnjom uzrokovati štetu koja se ne može usporediti s namjernom štetom koju prouzroči nesavjesni korisnik sustava.

Pažnja! Ovaj popis nije iscrpan, već samo opisuje ono što se često propušta prilikom postavljanja bilo kojeg prilično složenog i skupog informacijskog sustava!

  • MS SQL poslužitelj, aplikacijski poslužitelj i klijentski dio pokreću se na različitim računalima, poslužiteljske aplikacije pokreću se pod pravima posebno stvorenih Windows korisnici;
  • Za MS SQL Server
    • postavljen je mješoviti način autorizacije
    • Korisnici MS SQL uključeni u ulogu administratora poslužitelja ne sudjeluju u radu 1C,
    • za svaki IB 1C kreiran je poseban MS SQL korisnik koji nema privilegiran pristup poslužitelju,
    • MS SQL korisnik jednog IS-a nema pristup drugom IS-u;
  • Korisnici nemaju izravan pristup datotekama poslužitelja aplikacija i MS SQL poslužitelja
  • Radne stanice operatera opremljene su Windows 2000/XP (ne Windows 95/98/Me)

Nemojte zanemariti preporuke programera sustava i čitanje dokumentacije. Važni materijali o postavljanju sustava objavljeni su na ITS diskovima u odjeljku "Metodološke preporuke". Obratite posebnu pozornost na sljedeće članke:

  1. Značajke aplikacija koje rade s poslužiteljem 1C: Enterprise
  2. Smještaj podataka 1C:Enterprise 8.0
  3. Korisnici ažuriraju 1C:Enterprise 8.0 Microsoft Windows bez administratorskih prava
  4. Uređivanje popisa korisnika u ime korisnika koji nema administratorska prava
  5. postavke Vatrozid za Windows XP SP2 za pokretanje SQL Servera 2000 i SQL Server Desktop Engine (MSDE)
  6. Konfiguriranje parametara COM+ Windows XP SP2 za rad poslužitelja 1C:Enterprise 8.0
  7. Konfiguriranje postavki vatrozida Windows XP SP2 za poslužitelj 1C:Enterprise 8.0
  8. Konfiguriranje postavki vatrozida Windows XP SP2 za HASP License Manager
  9. Stvaranje sigurnosne kopije informacijska baza koristeći SQL Server 2000
  10. Problemi s instalacijom i konfiguracijom 1C:Enterprise 8.0 u verziji "klijent-poslužitelj".(jedan od najvažnijih članaka)
  11. Osobitosti Windows postavke Server 2003 prilikom instalacije poslužitelja 1C:Enterprise 8.0
  12. Reguliranje pristupa korisnika informacijskoj bazi u klijent-poslužiteljskoj verziji(jedan od najvažnijih članaka)
  13. Poslužitelj 1C:Enterprise i SQL poslužitelj
  14. Detaljan postupak instalacije za 1C:Enterprise 8.0 u verziji "klijent-poslužitelj"(jedan od najvažnijih članaka)
  15. Korištenje ugrađenog jezika na poslužitelju 1C:Enterprise

Ali kada čitate dokumentaciju, budite kritični prema primljenim informacijama, na primjer, članak "Problemi instaliranja i konfiguriranja 1C: Enterprise 8.0 u verziji klijent-poslužitelj" ne opisuje točno prava koja su potrebna za korisnika USER1CV8SERVER. Bit će poveznice na popis ispod, na primjer [ITS1] znači članak "Značajke aplikacija koje rade s poslužiteljem 1C:Enterprise". Sve poveznice na članke dane su na najnovije izdanje ITS-a u vrijeme pisanja (siječanj 2006.)

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

Od dva moguća načina autorizacije korisnika: ugrađeni 1C i kombinirani s autorizacijom OS Windows, ako je moguće, trebali biste odabrati kombiniranu autorizaciju. To će omogućiti korisnicima da ne budu zbunjeni s višestrukim lozinkama pri radu, ali neće smanjiti razinu sigurnosti sustava. Međutim, čak i za korisnike koji koriste samo Windows autorizaciju, vrlo je preporučljivo postaviti lozinku prilikom kreiranja, a tek nakon toga onemogućiti 1C autorizaciju za dati korisnik. Kako bi se osigurao oporavak sustava u slučaju uništenja strukture Active Directory, potrebno je ostaviti barem jednog korisnika koji se može prijaviti u sustav pomoću 1C autorizacije.

Kada kreirate uloge aplikacijskog rješenja, nemojte dodavati prava "u rezervi"

Svaka uloga aplikacijskog rješenja mora odražavati minimalni potrebni skup prava za izvođenje radnji definiranih ovom ulogom. Međutim, neke se uloge ne mogu koristiti neovisno. Na primjer, za interaktivno pokretanje vanjski tretmani Možete stvoriti zasebnu ulogu i dodati je svim korisnicima koji trebaju koristiti vanjsku obradu.

Redovito pregledavajte zapisnike i protokole rada sustava

Ako je moguće, regulirajte i automatizirajte pregled logova i protokola rada sustava. Uz pravilnu konfiguraciju i redoviti pregled zapisa (filtriranje samo po važnim događajima), neovlaštene radnje mogu se rano otkriti ili čak spriječiti tijekom pripremne faze.

Neke značajke klijent-poslužitelj verzije

Ovaj odjeljak opisuje neke od operativnih značajki opcije klijent-poslužitelj i njihov utjecaj na sigurnost. Radi lakšeg čitanja koriste se sljedeće oznake:

Pažnja! opis ranjivosti

Pohranjivanje informacija koje kontroliraju pristup sustavu

Pohranjivanje popisa korisnika informacijske sigurnosti

Sve informacije o popisu korisnika ove informacijske sigurnosti i ulogama koje su im u njoj dostupne pohranjene su u tablici Params u MS SQL bazi podataka (vidi [ITS2]). Gledajući strukturu i sadržaj ove tablice, postaje očito da su svi podaci o korisniku pohranjeni u zapisu s vrijednošću polja FileName “users.usr”.

Budući da pretpostavljamo da korisnici nemaju pristup MS SQL bazi podataka, ova činjenica sama po sebi ne može biti korištena od strane napadača, međutim, ako je moguće izvršiti kod u MS SQL, to “otvara vrata” za dobivanje bilo kojeg (! ) pristup iz 1C . Isti mehanizam (uz manje izmjene) također se može koristiti verzija datoteke sustava, što s obzirom na karakteristike datotečne verzije u potpunosti isključuje njegovu primjenjivost u izgradnji sigurnih sustava.

Preporuka: U ovom trenutku ne postoji način da se aplikacija u potpunosti zaštiti od takvih promjena, osim korištenja okidača na razini MS SQL Servera, koji, s druge strane, mogu uzrokovati probleme prilikom ažuriranja verzije platforme ili promjene popisa korisnika. Da biste pratili takve promjene, možete koristiti 1C dnevnik (obraćajući pozornost na "sumnjive" prijave u načinu rada konfiguratora bez navođenja korisnika) ili držati SQL Profiler stalno pokrenut (što će imati izuzetno negativan utjecaj na performanse sustava) ili konfigurirati upozorenja mehanizam (najvjerojatnije zajedno pomoću okidača)

Pohranjivanje informacija o listi IS na poslužitelju

Za svaki 1C aplikacijski poslužitelj pohranjuju se informacije o popisu MS SQL baza podataka povezanih s njim. Svaka infobaza za rad koristi vlastiti konekcioni niz s aplikacijskog poslužitelja i MS SQL poslužitelja. Informacije o infobazama koje su registrirane na aplikacijskom poslužitelju, zajedno s konekcijskim stringovima, pohranjuju se u datoteku srvrib.lst koja se nalazi na poslužitelju u imeniku<Общие данные приложений>/1C/1Cv8 (na primjer, C:/Documents and Settings/All Users/Application Data/1C/1Cv8/srvrib.lst). Za svaki informacijski sigurnosni sustav pohranjuje se kompletan konekcioni niz, uključujući MS SQL korisničku lozinku kada se koristi mješoviti MS SQL model autorizacije. Prisutnost ove datoteke čini mogućim strah od neovlaštenog pristupa MS SQL bazi podataka, a ako se, suprotno preporukama, koristi privilegirani korisnik (na primjer, “sa”) za pristup barem jednoj bazi podataka, tada u osim prijetnje sigurnosti jedne informacije, postoji prijetnja cijelom sustavu korištenjem MS SQL-a.

Zanimljivo je primijetiti da korištenje mješovite autorizacije i Windows autorizacije na MS SQL poslužitelju dovodi do različitih vrsta problema prilikom dobivanja pristupa datoteci. Dakle, ključna negativna svojstva Windows autorizacije bit će:

  • Rad cjelokupne informacijske sigurnosti na aplikacijskom poslužitelju i na MS SQL poslužitelju pod jednim setom prava (najvjerojatnije redundantnim)
  • Iz procesa poslužitelja aplikacija 1C (ili općenito od korisnika USER1CV8SERVER ili njegovog ekvivalenta) bez navođenja lozinke, možete se jednostavno povezati s bilo kojom informacijskom sigurnošću bez navođenja lozinke

S druge strane, napadač bi mogao izvesti proizvoljni kod iz korisničkog konteksta USER1CV8SERVER može biti teže od dohvaćanja navedene datoteke. Usput, prisutnost takve datoteke još je jedan argument za distribuciju funkcija poslužitelja na različitim računalima.

Preporuka: Datoteci srvrib.lst treba pristupiti samo proces poslužitelja. Obavezno konfigurirajte reviziju za promjenu ove datoteke.

Nažalost, prema zadanim postavkama ova datoteka gotovo nije zaštićena od čitanja, što se mora uzeti u obzir prilikom postavljanja sustava. Idealna opcija bila bi da aplikacijski poslužitelj spriječi čitanje i pisanje ove datoteke tijekom rada (uključujući čitanje i pisanje korisničkih veza koje se izvode na ovom poslužitelju).

Nedostatak autorizacije prilikom stvaranja informacijske sigurnosti na poslužitelju

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

Vjerojatno najveća ranjivost ovaj odjeljak je mogućnost gotovo neograničenog dodavanja informacijske sigurnosti aplikacijskom poslužitelju, pri čemu svaki korisnik koji ima pristup konekciji s aplikacijskim poslužiteljem automatski dobiva mogućnost pokretanja proizvoljnog koda na aplikacijskom poslužitelju. Pogledajmo ovo na primjeru.

Sustav se mora instalirati na sljedeći način

  • MS SQL Server 2000 (na primjer, naziv mreže SRV1)
  • Poslužitelj 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 KORISNIK) koji radi na WS-u ima barem minimalan pristup jednom od informacijskih sigurnosnih sustava registriranih na SRV2, ali nema povlašteni pristup SRV1 i SRV2. Općenito, kombinacija funkcija navedenih računala ne utječe na situaciju. Sustav je konfiguriran 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 samo 1C korisnici imaju pravo povezivanja na proces aplikacijskog poslužitelja (više detalja [ITS12]);
  • datoteka srvrib.lst mora biti samo za čitanje za korisnika USER1CV8SERVER (za dodavanje nove informacijske sigurnosti na poslužitelj, privremeno dopustite pisanje);
  • Za spajanje na MS SQL koristite samo TCP/IP protokol, u ovom slučaju možete:
    • ograničiti veze pomoću vatrozida;
    • konfigurirajte korištenje nestandardnog TCP porta, što će zakomplicirati vezu "autsajdera" IB 1C;
    • koristiti enkripciju prenesenih podataka između aplikacijskog poslužitelja i SQL poslužitelja;
  • konfigurirajte vatrozid poslužitelja tako da je nemoguće koristiti MS SQL poslužitelje trećih strana;
  • koristite intranet sigurnosne alate kako biste eliminirali mogućnost pojavljivanja neovlaštenog računala lokalna mreža(IPSec, grupna sigurnosna pravila, vatrozidi itd.);
  • Ni pod kojim okolnostima ne dodijelite korisniku USER1CV8SERVER administrativna prava na aplikacijskom poslužitelju.

Korištenje koda koji se izvodi na poslužitelju

Kada koristite verziju klijent-poslužitelj 1C, programer može distribuirati izvršenje koda između klijenta i aplikacijskog poslužitelja. Da bi se kod (postupak ili funkcija) izvršavao samo na poslužitelju, potrebno ga je smjestiti u opći modul za koji je postavljeno svojstvo “Poslužitelj” te, u slučaju kada je izvođenje modula dopušteno ne samo na poslužitelja, postavite kod u ograničeni odjeljak "#If Server ":

#Ako poslužitelj Onda
Funkcija OnServer(Param1, Param2 = 0) Export // Ova se funkcija, unatoč svojoj jednostavnosti, izvršava na poslužitelju
Param1 = Param1 + 12;
Vrati Param1;
EndFunction
#Završi ako

Kada koristite kod koji se izvodi na poslužitelju, morate uzeti u obzir sljedeće:

  • kod se izvodi s pravima USER1CV8SERVER na poslužitelju aplikacija (dostupni su COM objekti i datoteke poslužitelja);
  • sve korisničke sesije izvršava jedna instanca usluge, tako da će, na primjer, prekoračenje stoga na poslužitelju uzrokovati prekid veze svih aktivnih korisnika;
  • otklanjanje pogrešaka modula poslužitelja je teško (na primjer, ne možete postaviti prijelomnu točku u programu za ispravljanje pogrešaka), ali mora se učiniti;
  • prijenos kontrole s klijenta na aplikacijski poslužitelj i natrag može zahtijevati značajne resurse s velikim količinama prenesenih parametara;
  • korištenje interaktivnih alata (obrasci, tablični dokumenti, dijaloški okviri), vanjski izvještaji i obrada u kodu na aplikacijskom poslužitelju su nemogući;
  • nije dopuštena uporaba globalnih varijabli (varijabli modula aplikacije deklarirane s naznakom "Izvoz");

Za više detalja pogledajte [ITS15] i druge ITS članke.

Aplikacijski poslužitelj mora imati posebne zahtjeve pouzdanosti. U ispravno izgrađenom sustavu klijent-poslužitelj moraju biti zadovoljeni sljedeći uvjeti:

  • nikakve radnje klijentske aplikacije ne smiju prekidati rad poslužitelja (osim administrativnih slučajeva);
  • poslužitelj ne može izvršiti programski kod primljen od klijenta;
  • resursi moraju biti "pravedno" raspodijeljeni klijentske veze, osiguravajući dostupnost poslužitelja bez obzira na trenutno opterećenje;
  • u nedostatku blokiranja podataka, veze klijenata ne bi trebale utjecati na rad drugih;
  • ne na serveru korisničko sučelje, ali moraju se razviti alati za praćenje i bilježenje;

Općenito, 1C sustav izgrađen je na takav način da se približi ovim zahtjevima (na primjer, nemoguće je prisilno izvršiti vanjsku obradu na poslužitelju), ali još uvijek postoji nekoliko neugodnih značajki, dakle:

Preporuka: Prilikom razvoja runtime poslužitelja preporuča se pridržavati se načela minimalnog sučelja. Oni. broj ulazaka u poslužiteljske module iz klijentske aplikacije treba biti vrlo ograničen, a parametri strogo regulirani. Preporuka: Prilikom zaprimanja parametara procedura i funkcija na poslužitelju potrebno je validirati parametre (provjeriti da parametri odgovaraju očekivanom tipu i rasponu vrijednosti). To se ne radi u standardnim rješenjima, ali je vrlo poželjno uvesti obveznu validaciju u vlastite razvoje. Preporuka: Prilikom generiranja teksta zahtjeva (a posebno parametra naredbe Run) na strani poslužitelja nemojte koristiti nizove primljene od klijentske aplikacije.

Opća bi preporuka bila da se upoznate s načelima sigurne izgradnje mreža-aplikacije baze podataka i rade na sličnim principima. Sličnosti su doista značajne: prvo, kao i web aplikacija, aplikacijski poslužitelj je posredni sloj između baze podataka i korisničkog sučelja (glavna razlika je u tome što web poslužitelj tvori korisničko sučelje); drugo, sa sigurnosne točke gledišta, ne možete vjerovati podacima primljenim od klijenta, jer moguće je pokrenuti vanjska izvješća i obrade.

Prijenos parametara

Prosljeđivanje parametara funkciji (proceduri) koja se izvršava na poslužitelju prilično je delikatno pitanje. To je prvenstveno zbog potrebe za njihovim prijenosom između aplikacijskog poslužitelja i klijentskih procesa. Kada kontrola prijeđe sa strane klijenta na stranu poslužitelja, svi preneseni parametri se serijaliziraju, prenose na poslužitelj, gdje se “raspakiraju” i koriste. Kod prelaska sa strane poslužitelja na stranu klijenta, proces je obrnut. Ovdje treba napomenuti da ova shema ispravno obrađuje prosljeđivanje parametara prema referenci i prema vrijednosti. Prilikom prosljeđivanja parametara vrijede sljedeća ograničenja:

  • Samo nepromjenjive vrijednosti mogu se prenositi između klijenta i poslužitelja (u oba smjera): primitivni tipovi, reference, univerzalne kolekcije, sustav enum vrijednosti, pohrana vrijednosti. Ako pokušate proslijediti nešto drugo, klijentska aplikacija se ruši (čak i ako poslužitelj pokuša proslijediti netočan parametar).
  • Ne preporučuje se prosljeđivanje parametara prilikom prosljeđivanja velike količine podatke (na primjer, nizove s više od milijun znakova), to može negativno utjecati na performanse poslužitelja.
  • Ne možete proslijediti parametre koji sadrže cikličku referencu, od poslužitelja do klijenta i natrag. Ako pokušate proslijediti takav parametar, klijentska aplikacija se ruši (čak i ako poslužitelj pokuša proslijediti netočan parametar).
  • Ne preporučuje se prijenos vrlo složenih zbirki podataka. Kada pokušate proslijediti parametar s vrlo velikom razinom ugniježđenja, poslužitelj se ruši (!).

Pažnja! Najneugodnija značajka u ovom trenutku vjerojatno je pogreška u prosljeđivanju složenih kolekcija vrijednosti. Tako, na primjer, kod: Razina ugniježđenja = 1250;
M = Novi niz;
PassedParameter = M;
Za račun = 1 prema razini ciklusa ugniježđivanja
MVInt = Novi niz;
M.Dodaj(MVInt);
M = MVint;
EndCycle;
ServerFunction(PassedParameter);

Dovodi do hitnog zaustavljanja 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 ugrađeni jezični alati koristiti u kodu koji se izvodi na aplikacijskom poslužitelju, ali čak i među dostupnim alatima postoji mnogo "problematičnih" konstrukcija koje se mogu grubo klasificirati na sljedeći način:

  • sposoban pružiti mogućnost izvršavanja koda koji nije sadržan u konfiguraciji (skupina "Izvršenje koda")
  • sposoban pružiti klijentskoj aplikaciji informacije o datoteci i operacijski sustav korisnika ili obavljati radnje koje nisu vezane uz rad s podacima (“Kršenje prava”)
  • sposoban izazvati pad poslužitelja ili koristiti vrlo velika sredstva(grupa "Kvar poslužitelja")
  • može uzrokovati kvar klijenta (skupina kvara klijenta) – ovaj tip nije uzeto u obzir. Primjer: prosljeđivanje promjenjive vrijednosti poslužitelju.
  • pogreške u programskim algoritmima (beskrajne petlje, neograničena rekurzija, itd.) (“Programske pogreške”)

Glavni problematični dizajni koji su mi poznati (s primjerima) navedeni su u nastavku:

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

Izvršavanje koda. Omogućuje vam da izvršite dio koda koji mu se prosljeđuje kao vrijednost niza. Kada se koristi na poslužitelju, morate osigurati da se podaci primljeni od klijenta ne koriste kao parametar. Na primjer, sljedeća upotreba nije dopuštena:

#Ako poslužitelj Onda
ProcedureOnServer(Param1) Izvoz
Izvrši(Param1);
Kraj postupka
#Završi ako

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

Kreira vanjski aplikacijski COM objekt s USER1CV8SERVER pravima na aplikacijskom poslužitelju (ili drugom navedenom računalu). Kada se koristi na poslužitelju, provjerite da se parametri ne prosljeđuju iz klijentske aplikacije. Međutim, na strani poslužitelja učinkovito je koristiti ovu značajku prilikom uvoza/izvoza, slanja podataka putem interneta, implementacije nestandardnih funkcija itd.

Funkcija GetCOMObject(<Имя файла>, <Имя класса COM>)
Kršenje prava i izvršavanje koda. Slično prethodnom, dobiva se samo COM objekt koji odgovara datoteci.
Procedure i funkcije ComputerName(), TemporaryFileDirectory(), ProgramDirectory(), WindowsUsers()
Kršenje prava. Izvršavajući ih na poslužitelju, omogućuju vam da saznate detalje organizacije podsustava poslužitelja. Kada se koriste na poslužitelju, provjerite da se podaci ili ne prenose na klijenta ili da nisu dostupni operaterima bez odgovarajućeg dopuštenja. Obratite posebnu pozornost na činjenicu da se podaci mogu vratiti u parametru proslijeđenom referencom.
Postupci i funkcije za rad s datotekama (CopyFile, FindFiles, MergeFiles i mnoge druge), kao i vrste datoteka.

Kršenje prava. Omogućuje, njihovim izvršavanjem na poslužitelju, primanje opći pristup na lokalne (i mrežne) datoteke dostupne pod korisničkim pravima USER1CV8SERVER. Ako se koristi svjesno, tada je moguće učinkovito implementirati zadatke poput uvoza/izvoza podataka na poslužitelju.

Svakako provjerite svoja korisnička prava za 1C prije korištenja ovih funkcija. Za provjeru korisničkih prava možete koristiti sljedeću konstrukciju u modulu poslužitelja:

#Ako poslužitelj Onda
Procedura PerformWorkWithFile() Export
RoleAdministrator = Metadata.Roles.Administrator;
Korisnik = Parametri sesije.Trenutni korisnik;
Ako User.Roles.Contains(RoleAdministrator) Onda
//Ovdje se izvršava kôd za rad s datotekama
završi ako;
#Završi ako

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

Put = "C:\Documents and Settings\All Users\Application Data\1C\1Cv8\";
MoveFile(Path + "srvrib.lst", Path + "Ovdje je kamodatoteka ide");

Nakon izvršavanja takvog koda na poslužitelju, ako korisnik USER1CV8SERVER ima prava mijenjati ga, kao što je gore opisano, i nakon ponovnog pokretanja procesa poslužitelja (prema zadanim postavkama, 3 minute nakon što svi korisnici izađu), pojavit će se VELIKO pitanje o pokretanju poslužitelja . Ali moguće je potpuno uklanjanje datoteke...

Vrste "XBase", "BinaryData", "XML Reader", "XML Writer", "XSL Transformation", "ZipFile Writer", "ZipFile Reader", "Text Reader", "Text Writer"
Kršenje prava. Omogućuju, izvršavajući ih na poslužitelju, pristup lokalnim (i lociranim na mreži) datotekama određenih vrsta i čitanje/pisanje pod korisničkim pravima USER1CV8SERVER. Ako se koristi svjesno, moguće je učinkovito implementirati zadatke kao što su uvoz/izvoz podataka na poslužitelju, bilježenje rada određenih funkcija i rješavanje administrativnih zadataka. Općenito, preporuke se podudaraju s prethodnim odlomkom, ali trebali biste razmotriti mogućnost prijenosa podataka iz ovih datoteka (ali ne objekata svih ovih vrsta) između klijentskog i poslužiteljskog dijela.
Upišite "Informacije o sustavu"
Kršenje prava. Omogućuje dobivanje podataka o aplikacijskom poslužitelju u slučaju nepravilnog korištenja i prijenosa podataka u klijentski dio aplikacije. Preporučljivo je ograničiti pravo korištenja prilikom korištenja.
Tipovi "InternetConnection", "InternetMail", "InternetProxy", "HTTPConnection", "FTTPConnection"

Kršenje prava. Kada se koristi na poslužitelju, povezuje se s udaljenim računalom s aplikacijskog poslužitelja pod pravima USER1CV8SERVER. Preporuke:

  • Kontrola parametara pri pozivanju metoda.
  • Kontrola korisničkih prava 1C.
  • Ozbiljna ograničenja prava korisnika USER1CV8SERVER za pristup mreži.
  • Ispravna postavka vatrozid na poslužitelju aplikacija 1C.

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

Tipovi "InformationBaseUserManager", "InformationBaseUser"

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

Format funkcije

Pad poslužitelja. Da! Ova naizgled bezopasna funkcija, ako se njezini parametri ne kontroliraju i ne izvršavaju na poslužitelju, može uzrokovati rušenje poslužiteljske aplikacije. Greška se javlja kod formatiranja brojeva i korištenja moda za prikaz vodećih nula i velikog broja znakova, npr.

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

Nadam se da će ova greška biti ispravljena u sljedećim izdanjima platforme, ali u međuvremenu, u svim pozivima ove funkcije koji se mogu izvršiti na poslužitelju, provjerite parametre poziva.

Procedure i funkcije za spremanje vrijednosti (ValueInRowInt, ValueInFile)
Pad poslužitelja. Ove funkcije ne obrađuju kružne reference u zbirkama ili vrlo duboko gniježđenje, tako da se mogu srušiti u nekim vrlo posebnim slučajevima.

Pogreške u vrijednostima granica i posebnih parametara u funkcijama. Kontrola izvršenja.

Jedan od problema s kojim se možete susresti pri korištenju poslužitelja je velika “odgovornost” funkcija poslužitelja (mogućnost hitnog prekida svega poslužiteljska aplikacija zbog greške u jednoj vezi i korištenja istog "prostora resursa" za sve veze). Stoga postoji potreba za kontrolom glavnih parametara vremena izvođenja:

  • Za ugrađene jezične funkcije, provjerite njihove parametre pokretanja (dobar primjer je funkcija "Format")
  • Kada koristite petlje, provjerite je li uvjet izlaza iz petlje zadovoljen. Ako je petlja potencijalno beskonačna, umjetno ograničite broj ponavljanja: MaximumIterationCounterValue = 1000000;
    Brojač ponavljanja = 1;
    Pozdrav
    Funkcija koja ne smije vratiti lažnu vrijednost ()
    I (Broj ponavljanja<МаксимальноеЗначениеСчетчикаИтераций) Цикл

    //.... Tijelo petlje
    Brojač ponavljanja = Brojač ponavljanja + 1;
    EndCycle;
    Ako brojač ponavljanja>maksimalna vrijednost brojača ponavljanja Onda
    //.... obraditi događaj pretjerano dugog izvođenja petlje
    završi ako;

  • Kada koristite rekurziju, ograničite maksimalna razina gniježđenje.
  • Prilikom formiranja i izvršavanja upita, pokušajte spriječiti jako duge odabire i odabire velike količine informacija (na primjer, kada koristite uvjet "U HIJERARHIJI", nemojte koristiti praznu vrijednost)
  • Kada dizajnirate informacijsku bazu, osigurajte dovoljno veliku rezervu bitne dubine za brojeve (inače zbrajanje i množenje postaju nekomutativni i neasocijativni, što otežava otklanjanje pogrešaka)
  • U izvršnim upitima provjerite prisutnost u logici operacija NULL vrijednosti i ispravan rad uvjeta i izraza upita koristeći NULL.
  • Kada koristite zbirke, kontrolirajte mogućnost njihovog prijenosa između aplikacijskog poslužitelja i strane klijenta.

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

Često možete pronaći preporuke za korištenje pristupa terminalu za ograničavanje pristupa podacima i poboljšanje performansi izvršavanjem koda na strani klijenta na terminalskom poslužitelju. Da, ako je ispravno konfiguriran, korištenje terminalskog pristupa doista može povećati ukupnu razinu sigurnosti sustava, ali nažalost, često se možete susresti s činjenicom da kada praktičnu upotrebu Sigurnost sustava samo se smanjuje. Pokušajmo shvatiti s čime je to povezano. Sada postoje dva uobičajena načina organiziranja terminalskog pristupa, to su Microsoft Terminal Services (RDP protokol) i Citrix Metaframe Server (ICA protokol). Općenito, Citrixovi alati pružaju puno fleksibilnije mogućnosti administracije pristupa, ali je cijena tih rješenja puno viša. Razmotrit ćemo samo osnovne značajke zajedničke za oba protokola koje mogu smanjiti ukupnu razinu sigurnosti. Postoje samo tri glavne opasnosti pri korištenju pristupa terminalu:
  • Mogućnost blokiranja rada drugih korisnika oduzimanjem prekomjernih količina resursa
  • Pristup podacima drugih korisnika.
  • Neovlašteno kopiranje podataka s terminalskog poslužitelja na računalo korisnika

U svakom slučaju, Terminal Services omogućuje vam sljedeće:

  • Povećati pouzdanost rada (ako dođe do kvara na terminalskom računalu, korisnik može naknadno nastaviti rad s istog mjesta)
  • Ograničite pristup klijentskoj aplikaciji i datotekama koje sprema.
  • Prijenos računalnog opterećenja s korisničke radne stanice na terminalski pristupni poslužitelj
  • Centraliziranije upravljajte postavkama sustava. Za korisnike će spremljene postavke vrijediti bez obzira s kojeg su se računala prijavili u sustav.
  • U nekim slučajevima možete koristiti terminalsko rješenje za daljinski pristup sustavu.

Potrebno je ograničiti broj mogućih veza na terminalski poslužitelj za jednog korisnika

Zbog "proždrljivosti" 1C klijentske aplikacije u pogledu resursa, potrebno je ograničiti maksimalna količina simultane veze jednog korisnika (operatora) na terminalski poslužitelj. Aktivno korištena veza može koristiti do 300 MB memorije sa samo jednom instancom aplikacije. Osim memorije, aktivno se koristi CPU vrijeme, što također ne doprinosi stabilnosti korisnika ovog poslužitelja. Istodobno s sprječavanjem prekomjerne upotrebe resursa poslužitelja, takvo ograničenje može spriječiti korištenje tuđih račun. Implementirano standardnim postavkama terminalskog poslužitelja.

Ne biste trebali dopustiti da više od jedne ili dvije 1C klijentske aplikacije rade istovremeno u jednoj vezi

Diktirano istim razlozima kao u prethodnom paragrafu, ali tehnički teže izvedivo. Problem je u tome što je gotovo nemoguće spriječiti ponovno pokretanje 1C pomoću alata terminalskog poslužitelja (zašto će biti objašnjeno u nastavku), tako da ovu značajku morate implementirati na razini aplikacijskog rješenja (što također nije dobra odluka, jer sesije mogu ostati "visjeti" neko vrijeme kada netočan prekid aplikacija i postoji potreba za doradom aplikacijskog rješenja u aplikacijskom modulu i nekim referentnim knjigama, što će zakomplicirati korištenje ažuriranja iz 1C). Vrlo je poželjno ostaviti korisniku mogućnost pokretanja 2 aplikacije kako bi mogao pokrenuti neke radnje (na primjer, generiranje izvješća) u pozadina– klijentska aplikacija je, nažalost, zapravo jednonitna.

Ne preporučuje se davanje prava pristupa terminalskom poslužitelju korisnicima koji imaju pravo pokretati računalne zadatke koji zahtijevaju velike resurse u 1C ili spriječiti takvo pokretanje dok drugi korisnici aktivno rade.

Naravno, pristup terminalski poslužitelj Bolje ga je prepustiti samo korisnicima koji ne koriste zadatke poput data mininga, geografskih dijagrama, import/exporta i drugih zadataka koji ozbiljno opterećuju klijentski dio aplikacije. Ako ipak postoji potreba za dopuštanjem takvih zadataka, tada je potrebno: obavijestiti korisnika da ti zadaci mogu utjecati na performanse drugih korisnika, zabilježiti početak i završetak takvog procesa u dnevniku, dopustiti izvršenje samo na reguliranom vrijeme itd.

Potrebno je osigurati da svaki korisnik ima pravo pisanja samo u strogo definirane direktorije na terminalskom poslužitelju i da im drugi korisnici nemaju pristup.

Prvo, ako ne ograničite mogućnost pisanja u dijeljene direktorije (kao što je direktorij u kojem je instaliran 1C), napadaču ostaje moguće promijeniti ponašanje programa za sve korisnike. Drugo, podaci jednog korisnika (privremene datoteke, datoteke za spremanje postavki izvješća, itd.) ni pod kojim okolnostima ne bi smjeli biti dostupni drugom korisniku terminalskog poslužitelja - općenito, tijekom normalne konfiguracije, to se pravilo poštuje. Treće, napadač još uvijek ima priliku "zatrpati" particiju tako da na tvrdom disku ne ostane više mjesta. Znam da će mi prigovoriti da operativni sustav Windows, počevši od Windowsa 2000, ima mehanizam kvota, ali to je prilično skup mehanizam i praktički nikad nisam vidio njegovu pravu primjenu.

Ako su prethodna pitanja postavljanja pristupa općenito bila prilično jednostavna za implementaciju, onda tako (naizgled) jednostavan zadatak kao što je reguliranje korisničkog pristupa datotekama nije trivijalno implementiran. Prvo, ako se ne koristi mehanizam kvota, mogu se spremiti velike datoteke. Drugo, sustav je izgrađen na takav način da će gotovo uvijek biti moguće spremiti datoteku tako da bude dostupna drugom korisniku.

S obzirom da je zadatak teško u potpunosti riješiti, preporuča se revidirati većinu događaja datoteke

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 diskovi, pisači, međuspremnik com portovi terminalnog računala na poslužitelj. Ako ova prilika postoji, tada je gotovo nemoguće spriječiti pokretanje stranog koda na terminalskom poslužitelju i spremanje podataka iz 1C na klijentu terminalskog pristupa. Dopusti ove značajke samo onima s administratorskim pravima.

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

Ako se to ne učini, korisnik će ponovno moći pokrenuti neželjeni kod ili spremiti podatke. Budući da redovni dnevnik ne prati događaje u datotekama (usput, dobra ideja za implementaciju od strane programera platforme), a gotovo je nemoguće postaviti reviziju sustava u cijeloj mreži (nema dovoljno resursa za održavanje), bolje je da korisnik može poslati podatke ili za ispis, ili putem e-pošte. Obratite posebnu pozornost na to da terminalski poslužitelj ne radi izravno s prijenosnim medijima korisnika.

Ni pod kojim okolnostima ne smijete ostavljati aplikacijski poslužitelj na terminalskom poslužitelju prilikom stvaranja sigurnog sustava.

Ako aplikacijski poslužitelj radi na istom računalu kao i klijentske aplikacije, tada postoji mnogo mogućnosti da se poremeti njegov normalan rad. Ako iz nekog razloga nije moguće razdvojiti funkcije terminalskog poslužitelja i aplikacijskog poslužitelja, tada posebnu pozornost obratite na pristup korisnika datotekama koje koristi aplikacijski poslužitelj.

Potrebno je isključiti mogućnost pokretanja svih aplikacija osim 1C:Enterprise na terminalskom poslužitelju.

To je jedna od najtežih želja za ostvariti. Počnimo s činjenicom da morate ispravno konfigurirati politiku pravila grupe sigurnost u domeni. Potrebno je ispravno konfigurirati sve "Administrative Templates" i "Policies" ograničena uporaba programe." Da biste se testirali, provjerite jesu li blokirane barem sljedeće značajke:

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

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

Očito, budući da korisnici otvaraju 1C u terminalskom načinu rada, tada će terminalski poslužitelj biti zabilježen u dnevniku. Dnevnik ne pokazuje s kojeg se računala korisnik povezao.

Terminalni poslužitelj – zaštita ili ranjivost?

Dakle, nakon razmatranja glavnih značajki terminala sjever, možemo reći da terminal sjever potencijalno može pomoći u automatizaciji raspodjele računalnog opterećenja, ali izgradnja sigurnog sustava prilično je teška. Jedan od slučajeva kada je korištenje terminalskog poslužitelja najučinkovitije je pokretanje 1C bez njega Windows Explorer u načinu cijelog zaslona za korisnike s ograničenom funkcionalnošću i specijaliziranim sučeljem.

Rad klijentskog dijela

Korištenje Internet Explorera (IE)

Jedan od uvjeta za normalan rad 1C klijentskog dijela je korištenje komponenti Internet Explorer. Morate biti vrlo oprezni s ovim komponentama.

Pažnja! Prvo, ako je spyware ili adware modul "pripojen" na IE, tada će se učitati čak i ako vidite bilo koju HTML datoteku u 1C. Do sada nisam vidio nikakvu svjesnu upotrebu ove značajke, ali sam u jednoj od organizacija vidio učitani "špijunski" modul s jedne od pornografskih mreža s pokrenutim 1C (antivirusni program nije ažuriran, simptomi za što su otkriveni : prilikom postavljanja vatrozida bilo je jasno da se 1C pokušava na portu 80 spojiti na porno stranicu). Zapravo, to je još jedan argument u prilog tome da zaštita treba biti sveobuhvatna

Pažnja! Drugo, 1C sustav omogućuje korištenje flash videa, ActiveX objekata, VBScripta u prikazanim HTML dokumentima, slanje podataka na Internet, čak otvaranje PDF datoteka(!), iako u drugom slučaju pita “otvori ili spremi”... Općenito, što vam srce poželi. Primjer ne posve razumne upotrebe ugrađene mogućnosti pregledavanja i uređivanje HTML-a:

  • Napravite novi HTML dokument (File -> New -> HTML Document).
  • Idite na karticu "Tekst" praznog dokumenta.
  • Uklonite tekst (u potpunosti).
  • Idite na karticu "Prikaz" ovog dokumenta
  • Koristeći povuci i ispusti, pomakni se s otvoreni vodič u prozor dokumenta datoteku s ekstenzijom SWF (to su Flash filmske datoteke), na primjer iz predmemorije preglednika, iako za zabavu možete koristiti i FLASH igračku.
  • Kako lijepo! Možete pokrenuti igračku na 1C!

Sa stajališta sigurnosti sustava, to je potpuno pogrešno. Do sada nisam vidio nikakve posebne napade na 1C kroz ovu ranjivost, ali najvjerojatnije će to biti pitanje vremena i vrijednosti vaših informacija.

Postoje neki drugi manji problemi koji se javljaju pri radu s poljem HTML dokumenta, ali glavni su dva navedena. Iako, ako ovim značajkama pristupite kreativno, možete organizirati doista nevjerojatne mogućnosti sučelja za rad s 1C.

Korištenje vanjskih izvješća i obrada.

Pažnja! Vanjska izvješća i obrade - s jedne strane - prikladan način za implementaciju dodatnih tiskani obrasci, regulatorno izvješćivanje, specijalizirana izvješća, s druge strane, potencijalni način da se zaobiđu mnoga sigurnosna ograničenja sustava i ometaju rad aplikacijskog poslužitelja (za primjer, pogledajte gore u “Parametri prosljeđivanja”). U sustavu 1C postoji poseban parametar u skupu prava za ulogu "Interaktivno otvaranje vanjske obrade", ali to ne rješava u potpunosti problem - za potpuno rješenje potrebno je suziti krug korisnika koji mogu upravljati vanjski tiskani obrasci, regulatorna izvješća i druge standardne mogućnosti standardnih rješenja implementiranih korištenjem vanjskih tretmana. Na primjer, prema zadanim postavkama u UPP-u, sve glavne korisničke uloge imaju mogućnost rada s imenikom dodatnih tiskanih obrazaca, a to je zapravo mogućnost korištenja bilo koje vanjske obrade.

Korištenje standardnih mehanizama za standardna rješenja i platforme (razmjena podataka)

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

Ispis popisa

Svaki popis (na primjer, imenik ili registar informacija) u sustavu može se ispisati ili spremiti u datoteku. Da biste to učinili, samo upotrijebite standardnu ​​značajku dostupnu iz kontekstnog izbornika i izbornika "Akcije":

Imajte na umu da se gotovo sve što korisnik vidi na popisima može prikazati u vanjske datoteke. Jedino što možemo savjetovati je da vodite dnevnik ispisa dokumenata na serverima za ispis. Za posebno kritične forme potrebno je konfigurirati akcijsku ploču povezanu sa zaštićenim poljem tablice tako da mogućnost prikaza popisa nije dostupna s ove ploče i onemogućiti kontekstni izbornik(vidi sliku 6).

Razmjena podataka u distribuiranoj bazi podataka

Format razmjene podataka je vrlo jednostavan i opisan je u dokumentaciji. Ako korisnik ima mogućnost zamijeniti nekoliko datoteka, može napraviti neovlaštene promjene u sustavu (iako je to prilično radno intenzivan zadatak). Mogućnost stvaranja periferne baze podataka pri korištenju planova razmjene distribuirane baze podataka ne bi trebala biti dostupna običnim operaterima.

Standardna zamjena XML podaci

U standardnoj razmjeni podataka, koja se koristi za razmjenu između standardnih konfiguracija (primjerice, “Trade Management” i “Enterprise Accounting”), u pravilima razmjene moguće je odrediti rukovatelje događajima za utovar i istovar objekata. Ovo se provodi dobivanjem rukovatelja iz datoteke i procedure “Run()” za standardnu ​​obradu učitavanja i pražnjenja datoteke (procedura “Run()” se pokreće na strani klijenta). Očito, nije teško stvoriti takvu lažnu datoteku za razmjenu koja će izvoditi zlonamjerne radnje. Za većinu korisničkih uloga standardnih rješenja dijeljenje je dopušteno prema zadanim postavkama.

Preporuka: ograničiti pristup XML razmjeni za većinu korisnika (prepuštajući ga samo administratorima informacijske sigurnosti). Vodite zapise o izvođenjima ove obrade, spremajući datoteku za razmjenu, na primjer, šaljući je e-poštom administrator informacijske sigurnosti prije preuzimanja.

Korištenje generičkih izvješća, posebno konzole izvješća

Drugi problem je zadani pristup korisnika generičkim izvješćima, posebno izvješću konzole izvješća. Ovo izvješće karakterizira činjenica da vam omogućuje izvršavanje gotovo svih zahtjeva za informacijskom sigurnošću, pa čak i ako je sustav prava 1C (uključujući RLS) konfiguriran prilično strogo, korisniku omogućuje dobivanje puno "dodatnih" informacija i natjerati poslužitelj da izvrši zahtjev koji će potrošiti sve resurse sustava.

Korištenje načina rada preko cijelog zaslona (način radne površine)

Jedan od učinkovite načine organiziranje specijaliziranih sučelja s ograničenim pristupom funkcionalnosti programa je način rada preko cijelog zaslona glavnog (i možda jedinog) oblika korištenog sučelja. U ovom slučaju nema problema s pristupačnošću, na primjer, izbornik "Datoteka" i sve radnje korisnika ograničene su mogućnostima korištenog obrasca. Za više detalja, pogledajte "Značajke implementacije načina rada radne površine" na ITS disku.

Sigurnosna kopija

Sigurnosno kopiranje za verziju klijent-poslužitelj 1C može se izvesti na dva načina: učitavanje podataka u datoteku s nastavkom dt i stvaranje sigurnosnih kopija pomoću SQL-a. Prva metoda ima mnogo nedostataka: potreban je ekskluzivni pristup, sama izrada kopije traje mnogo dulje, u nekim slučajevima (ako je struktura sigurnosti informacija narušena) stvaranje arhive je nemoguće, ali postoji jedna prednost - minimalna veličina arhivu. Za SQL sigurnosnu kopiju vrijedi suprotno: stvaranje kopije se odvija u pozadini pomoću SQL poslužitelja, zbog jednostavne strukture i nedostatka kompresije - ovo je vrlo brz proces, i sve dok je fizički integritet SQL-a baza podataka nije narušena, sigurnosna kopija se izvodi, ali veličina kopije odgovara stvarnoj veličini informacijske sigurnosti u proširenom stanju (kompresija se ne provodi). Zbog dodatnih prednosti MS SQL backup sustava preporučljivije je koristiti ga (dopuštene su 3 vrste backupa: puni, diferencijalni, kopija transakcijskog dnevnika; moguće je kreirati redovito izvršavane zadatke; brzo se implementira sigurnosna kopija i rezervni sustav; implementirana mogućnost predviđanja veličine potrebnog diskovnog prostora itd.). Glavne točke organiziranja sigurnosne kopije sa stajališta sigurnosti sustava su:

  • Potreba za odabirom mjesta za pohranu sigurnosnih kopija tako da nisu dostupne korisnicima.
  • Potreba za pohranjivanjem sigurnosnih kopija na fizičkoj udaljenosti od MS SQL poslužitelja (u slučaju elementarnih nepogoda, požara, napada itd.)
  • Mogućnost davanja prava za pokretanje sigurnosne kopije korisniku koji nema pristup sigurnosnoj kopiji.

Za više detalja, molimo pogledajte MS SQL dokumentaciju.

Šifriranje podataka

Za zaštitu podataka od neovlaštenog pristupa često se koriste različiti kriptografski alati (softverski i hardverski), ali njihova izvedivost uvelike ovisi o pravilnoj primjeni i ukupnoj sigurnosti sustava. Razmotrit ćemo šifriranje podataka u različitim fazama prijenosa i pohranjivanja podataka korištenjem najčešćih sredstava te glavne pogreške u dizajnu sustava korištenjem kriptografskih alata.

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

  • Prijenos podataka između klijentskog dijela sustava i aplikacijskog poslužitelja
  • Prijenos podataka između aplikacijskog poslužitelja i MS SQL Servera
  • Podaci pohranjeni na MS SQL Server (podatkovne datoteke na fizički disk)
  • Enkripcija podataka pohranjenih u informacijskoj sigurnosti
  • Vanjski podaci (u vezi sa informacijskom sigurnošću)

Za podatke pohranjene na strani klijenta i na aplikacijskom poslužitelju (spremljene korisničke postavke, popis informacijske sigurnosti itd.), enkripcija je opravdana samo u vrlo rijetkim slučajevima i stoga se ovdje ne razmatra. Pri korištenju kriptografskih alata ne smijemo zaboraviti da njihova uporaba može značajno smanjiti performanse sustava u cjelini.

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

Sve bez zaštite mrežne veze osjetljivi na neovlašteni nadzor i pristup. Kako biste ih zaštitili, možete koristiti enkripciju podataka na razini mrežnog protokola. Za šifriranje podataka koji se prenose lokalnom mrežom najčešće se koriste IPSec alati koje nudi operativni sustav.

IPSec alati omogućuju šifriranje prenesenih podataka pomoću DES i 3DES algoritama, kao i provjeru integriteta pomoću MD5 ili SHA1 hash funkcija. IPSec može raditi u dva načina: transportni način i tunelski način. Prijenosni način je prikladniji za osiguravanje veza na lokalnoj mreži. Način rada tunela može se koristiti za organiziranje VPN veza između zasebnih mrežnih segmenata ili zaštitu udaljene veze s lokalnom mrežom putem otvoreni kanali podaci.

Glavne prednosti ovog pristupa su:

  • Mogućnost centraliziranog upravljanja sigurnošću pomoću Active Directory alata.
  • Mogućnost isključivanja neovlaštenih veza s aplikacijskim poslužiteljem i MS SQL poslužiteljem (na primjer, moguće je zaštititi od neovlaštenog dodavanja informacijske sigurnosti na aplikacijskom poslužitelju).
  • Eliminacija "slušanja" mrežnog prometa.
  • Nema potrebe mijenjati ponašanje aplikacijski programi(u ovom slučaju 1C).
  • Standardna priroda takvog rješenja.

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

  • IPSec ne štiti podatke od smetnji i prisluškivanja izravno na izvornom i odredišnom računalu.
  • Količina prenesenih podataka preko mreže nešto je veća nego bez korištenja IPSec-a.
  • Kod korištenja IPSec-a, opterećenje središnjeg procesora je nešto veće.

Detaljan opis implementacije IPSec alata je izvan okvira ovog članka i zahtijeva razumijevanje osnovnih principa funkcioniranja IP protokola. Za ispravno konfiguriranje sigurnosti veze, pročitajte relevantnu dokumentaciju.

Potrebno je posebno spomenuti nekoliko aspekata licencni ugovor s 1C pri organiziranju VPN veza. Činjenica je da je, unatoč nepostojanju tehničkih ograničenja, pri povezivanju više segmenata lokalne mreže ili udaljenom pristupu pojedinog računala lokalnoj mreži obično potrebno nekoliko osnovnih potrošnih materijala.

Enkripcija podataka prilikom prijenosa između klijentskog dijela sustava i aplikacijskog poslužitelja.

Osim enkripcije na razini mrežnog protokola, moguće je šifrirati podatke i na razini COM+ protokola, što je navedeno u članku “Reguliranje pristupa korisnika informacijskoj bazi u verziji klijent-poslužitelj” ITS-a. Da biste ga implementirali, trebate postaviti razinu autentifikacije za pozive na “Packet Privacy” za aplikaciju 1CV8 u “Component Services”. Kada je postavljen na ovaj način, paket je autentificiran i šifriran, uključujući podatke te identitet i potpis pošiljatelja.

Enkripcija podataka prilikom prijenosa između aplikacijskog poslužitelja i MS SQL Servera

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

  • Moguće je koristiti Secure Sockets Layer (SSL) prilikom prijenosa podataka između aplikacijskog poslužitelja i MS SQL Servera.
  • Kada koristite multiprotocol mrežnu biblioteku, šifriranje podataka se koristi na RPC razini. Ovo je potencijalno slabija enkripcija od korištenja SSL-a.
  • Ako se koristi protokol za razmjenu dijeljene memorije (ovo se događa ako se aplikacijski poslužitelj i MS SQL Server nalaze na istom računalu), tada se enkripcija ne koristi ni u kojem slučaju.

Kako biste ustanovili potrebu šifriranja svih prenesenih podataka za određeni MS SQL poslužitelj, morate koristiti pomoćni program "Server Network Utility". Pokrenite ga i na kartici "Općenito" potvrdite okvir "Prisilno šifriranje protokola". Metoda šifriranja odabire se ovisno o onom koji koristi klijentska aplikacija (tj. 1C aplikacijski poslužitelj). Da biste koristili SSL, morate ispravno konfigurirati uslugu certifikata na vašoj mreži.

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

Vrijedno je uzeti u obzir da korištenje enkripcije u ovom slučaju može imati značajan utjecaj na performanse sustava, posebno kada se koriste upiti koji vraćaju velike količine informacija.

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

Prvo, možete postaviti port koji nije standardni (port 1433 se koristi prema zadanim postavkama). Ako odlučite koristiti nestandardni TCP priključak za razmjenu podataka, imajte na umu da:

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

Drugo, u postavkama TCP/IP protokola na MS SQL poslužitelju možete postaviti oznaku "Sakrij poslužitelj" koja zabranjuje odgovore na zahtjeve za emitiranje za ovu instancu usluge MS SQL Server.

Enkripcija MS SQL podataka pohranjenih na disku

Postoji prilično velik izbor softvera i hardvera za šifriranje podataka koji se nalazi na lokalni disk(ovo je standardna mogućnost Windowsa da koristi EFS, i korištenje eToken ključeva, i programa trećih strana kao što su Jetico Bestcrypt ili PGPDisk). Jedan od glavnih zadataka ovih alata je zaštita podataka u slučaju gubitka medija (na primjer, kada je poslužitelj ukraden). Posebno je vrijedno napomenuti da Microsoft ne preporuča pohranjivanje MS SQL baza podataka na kriptirane medije, što je sasvim opravdano. Glavni problem u ovom slučaju je značajan pad produktivnosti i mogući problemi pouzdanost od kvarova. Drugi čimbenik koji komplicira život administratora sustava je potreba da se osigura dostupnost svih datoteka baze podataka u trenutku kada im MS SQL usluga prvi put pristupi (tj. poželjno je da se isključe interaktivne radnje pri povezivanju šifriranog medija).

Kako biste izbjegli osjetan pad performansi sustava, možete koristiti mogućnost MS SQL-a za stvaranje baza podataka u nekoliko datoteka. Naravno, u ovom slučaju MS SQL baza podataka ne bi trebala biti kreirana od strane 1C poslužitelja prilikom izrade infobaze, već bi se trebala kreirati zasebno. Primjer TSQL skripte s komentarima dan je u nastavku:

KORISTI master
IĆI
-- Stvorite bazu podataka SomeData,
STVARANJE BAZE PODATAKA SomeData
-- čiji se podaci u potpunosti nalaze u datotečnoj grupi PRIMARY.
NA PRIMARU
-- Glavna podatkovna datoteka nalazi se na šifriranom mediju (logički pogon E:)
-- i ima početnu veličinu od 100 MB, može se automatski povećati na 200 MB s
-- u koracima od 20 MB
(IME = neki podaci1,
FILENAME = "E:\SomeData1.mdf",
VELIČINA = 100 MB,
MAXSIZE = 200,
RAST DATOTEKE = 2),
-- Druga podatkovna datoteka nalazi se na nekriptiranom mediju (logički pogon C:)
-- i ima početnu veličinu od 100 MB, može se automatski povećati do granice
-- prostor na disku u koracima od 5% trenutne veličine datoteke (zaokruženo na 64 KB)
(IME = SomeData2,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SomeData2.ndf",
VELIČINA = 100 MB,
MAXSIZE = NEOGRANIČENO,
RAST DATOTEKE = 5%)
PRIJAVITI SE
-- Iako se dnevnik transakcija također može podijeliti na dijelove, to se ne bi trebalo učiniti,
-- jer ova datoteka se mnogo češće mijenja i redovito se čisti (na primjer, kada
-- stvaranje sigurnosne kopije baze podataka).
(IME = SomeDatalog,
NAZIV DATOTEKE = "c:\programske datoteke\microsoft sql server\mssql\data\SomeData.ldf",
VELIČINA = 10 MB,
MAXSIZE = NEOGRANIČENO,
RAST DATOTEKE = 10)
IĆI
-- Bolje je odmah dati vlasništvo nad bazom podataka korisniku u čije ime
-- 1C će se povezati. Da bismo to učinili, moramo deklarirati trenutnu bazu
- upravo stvoreno,
KORISTITE SomeData
IĆI
-- i izvršite sp_changedbowner
EXEC sp_changedbowner @loginame = "SomeData_dbowner"

Kratka digresija o automatskom rastu veličine podatkovne datoteke. Prema zadanim postavkama, veličine datoteka za nove baze podataka povećavaju se u koracima od 10% trenutne veličine datoteke. Ovo je sasvim prihvatljivo rješenje za male baze podataka, ali nije baš dobro za velike: s veličinom baze podataka od npr. 20 GB, datoteka bi se odmah trebala povećati za 2 GB. Iako će se ovaj događaj događati prilično rijetko, može trajati nekoliko desetaka sekundi (sve ostale transakcije su zapravo u stanju mirovanja tijekom tog vremena), što, ako se dogodi tijekom aktivnog rada s bazom podataka, može uzrokovati neke kvarove. Druga negativna posljedica proporcionalnog povećanja, koje se događa kada je prostor na disku gotovo potpuno pun, je vjerojatnost preranog kvara zbog nedovoljnog slobodan prostor. Na primjer, ako je particija diska kapaciteta 40 GB u potpunosti namijenjena jednoj bazi podataka (točnije jednoj datoteci te baze podataka), tada je kritična veličina datoteke baze podataka pri kojoj je potrebno hitno (vrlo hitno, do točke prekida normalnog rada korisnika) reorganizirati pohranu podataka je podatkovna datoteka veličine 35 GB. Uz veličinu povećanja postavljenu na 10-20 MB, možete nastaviti raditi dok ne dosegnete 39 GB.

Stoga, iako gornji popis navodi povećanje veličine jedne od datoteka baze podataka u koracima od 5%, za velike veličine baze podataka bolje je postaviti fiksno povećanje od 10-20 MB. Prilikom postavljanja vrijednosti povećanja za povećanje veličine datoteke baze podataka, potrebno je uzeti u obzir da dok jedna od datoteka u grupi datoteka ne dosegne svoju maksimalnu veličinu, vrijedi pravilo: datoteke u jednoj grupi datoteka povećavaju se sve u isto vrijeme. vrijeme, kada su svi potpuno ispunjeni. Dakle, u gornjem primjeru, kada datoteka SomeData1.mdf dosegne maksimalnu veličinu od 200 MB, datoteka SomeData2.ndf bit će veličine oko 1,1 GB.

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

Naravno, ako se koristi pohranjivanje datoteka baze podataka pomoću kriptografskih sredstava, sigurnosna kopija (barem ovih datoteka) ne bi se trebala izvoditi na nešifriranom mediju. Za sigurnosno kopiranje pojedinačnih datoteka baze podataka koristite odgovarajuću sintaksu naredbe BACKUP DATABASE. Imajte na umu da iako je sigurnosnu kopiju baze podataka moguće zaštititi lozinkom (opcije "PASSWORD = " i "MEDIAPASSWORD = " naredbe "BACKUP DATABASE"), takva sigurnosna kopija ne postaje šifrirana!

Enkripcija podataka aplikacijskog poslužitelja i klijenta pohranjenih na diskovima

U većini slučajeva ne može se smatrati opravdanim pohranjivanje datoteka koje koristi 1C:Enterprise (klijentski dio i aplikacijski poslužitelj) na kriptirane medije 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. Često te datoteke mogu ostati nakon što aplikacija završi s radom, a gotovo je nemoguće jamčiti njihovo uklanjanje pomoću 1C alata. Stoga postaje potrebno šifrirati direktorij koji se koristi za privremene datoteke u 1C ili ga ne pohranjivati ​​na disk pomoću RAM pogona (potonja opcija nije uvijek moguća zbog veličine generiranih datoteka i zahtjeva RAM-a 1C:Enterprise) sama aplikacija).

Šifriranje podataka pomoću ugrađenih 1C alata.

Standardne mogućnosti korištenja enkripcije u 1C svode se na korištenje objekata za rad sa Zip datotekama s parametrima šifriranja. Dostupni su sljedeći načini enkripcije: AES algoritam s ključem od 128, 192 ili 256 bita i zastarjeli algoritam izvorno korišten u Zip arhiveru. Zip datoteke šifrirane AES-om ne mogu čitati mnogi arhivari (WinRAR, 7zip). Da biste generirali datoteku koja sadrži šifrirane podatke, morate navesti lozinku i algoritam šifriranja. Najjednostavniji primjer funkcije šifriranja-dešifriranja koje se temelje na ovoj značajki dane su u nastavku:

Funkcija EncryptData(podaci, lozinka, metoda šifriranja = nedefinirano) Izvoz

// Zapišite podatke u privremenu datoteku. Zapravo, ne mogu se svi podaci spremiti na ovaj način.
VrijednostUDatoteci(ImePrivremeneDatoteke, Podaci);

// Zapisivanje privremenih podataka u arhivu
Zip = New ZipFileRecord(TemporaryArchiveFileName, Password, EncryptionMethod);
Zip.Add(TemporaryFileName);
Zip.Write();

// Čitanje podataka iz primljene arhive u radna memorija
EncryptedData = NewValueStorage(NewBinaryData(ArchiveTemporaryFileName));

// Privremene datoteke - brisanje

Izvoz funkcije EndFunctions DecryptData(EncryptedData, Password).

// Pažnja! Ispravnost proslijeđenih parametara se ne prati

// Zapišite proslijeđenu vrijednost u datoteku
ArchiveTemporaryFileName = GetTemporaryFileName("zip");
BinaryArchiveData = EncryptedData.Get();
BinaryArchiveData.Write(ArchiveTemporaryFileName);

// Ekstrahirajte prvu datoteku upravo zapisane arhive
ImePrivremeneDatoteke = DobijImePrivremeneDatoteke();
Zip = New ReadZipFile(TemporaryArchiveFileName, Password);
Zip.Extract(Zip.Items, TemporaryFileName, ZIPFilePathRecoveryMode.Do NotRecover);

// Čitanje zapisane datoteke
Data = ValueFromFile(TemporaryFileName + "\" + Zip.Items.Name);

//Brisanje privremenih datoteka
DeleteFiles(TemporaryFileName);
DeleteFiles(ArchiveTemporaryFileName);

Povrat podataka;

EndFunction

Naravno, ova se metoda ne može nazvati idealnom - podaci se zapisuju u privremenu mapu otvorena forma, izvedba metode je, iskreno govoreći, gora nego ikad, pohrana u bazi podataka zahtijeva iznimno mnogo prostora, no ovo je jedina metoda koja se temelji samo na ugrađenim mehanizmima platforme. Osim toga, ima prednost pred mnogim drugim metodama - ova metoda istovremeno pakira podatke zajedno s enkripcijom. Ako želite implementirati enkripciju bez nedostataka koji ovu metodu, tada ih morate implementirati u vanjsku komponentu ili pristupiti postojećim bibliotekama stvaranjem COM objekata, na primjer, pomoću Microsoft CryptoAPI. Kao primjer navest ćemo funkcije šifriranja/dešifriranja niza na temelju primljene lozinke.

Funkcija EncryptStringDES(UnencryptedString, Password)

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


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

return EncryptedString;

EndFunction // EncryptStringDES()

Funkcija DecryptStringDES(EncryptedString, Password)

//Pažnja! Parametri se ne provjeravaju!

Encryption Engine = New COMObject("CAPICOM.EncryptedData");
EncryptionMechanism.SetSecret(Password);
Pokušaj
EncryptionMechanism.Decrypt(EncryptedString);
Iznimka
// Netočna lozinka!;
Povratak Nedefinirano;
EndAttempt;

ReturnEncryptionMechanism.Content;

EndFunction // DecryptStringDES()

Imajte na umu da prilikom prijenosa prazna vrijednost unos niza ili lozinke u ove funkcije će generirati poruku o pogrešci. Niz dobiven ovim postupkom enkripcije nešto je dulji od originala. Specifičnost ove enkripcije je da ako niz dvaput šifrirate, rezultirajući nizovi NEĆE biti identični.

Osnovne pogreške pri korištenju kriptografskih alata.

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

Podcjenjivanje kazne performansi pri korištenju kriptografije.

Kriptografija je zadatak koji zahtijeva prilično velik broj izračuna (posebno za algoritme kao što su DES, 3DES, GOST, PGP). Čak i pri korištenju visokoučinkovitih i optimiziranih algoritama (RC5, RC6, AES), nema bijega od nepotrebnog prijenosa podataka u memoriji i računalne obrade. A to gotovo poništava mogućnosti mnogih komponenti poslužitelja (RAID polja, mrežni adapteri). Pri korištenju hardverske enkripcije ili hardverske derivacije ključa za šifriranje, postoji dodatno moguće usko grlo performansi: brzina prijenosa podataka između dodatnog uređaja i memorije (pri čemu izvedba takvog uređaja možda nije kritična). Kod korištenja enkripcije malih količina podataka (primjerice e-mail poruke), povećanje računalnog opterećenja sustava nije toliko vidljivo, ali u slučaju potpune enkripcije svega, to može uvelike utjecati na performanse sustava u cjelini.

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

Trenutno su mogućnosti tehnologije takve da se može odabrati ključ duljine 40-48 bita mala organizacija, i ključ duljine 56-64 bita - velika organizacija. Oni. moraju se koristiti algoritmi 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 unese korisnik. U ovom slučaju ključ duljine 1024 bita možda neće pomoći. Prvo, često se koristi lozinka koju je lako pogoditi. Čimbenici koji olakšavaju odabir su: korištenje samo jedne veličine slova; korištenje riječi, imena i izraza u lozinkama; korištenje poznati datumi, rođendani itd.; korištenje "uzoraka" prilikom generiranja lozinki (na primjer, 3 slova, zatim 2 broja, zatim 3 slova u cijeloj organizaciji). Dobra lozinka trebao bi biti prilično nasumičan niz velikih i velikih slova, brojeva i interpunkcijskih znakova. Lozinke unesene s tipkovnice do 7-8 znakova, čak i uz poštivanje ovih pravila, mogu se pogoditi u razumnom roku, stoga je bolje da lozinka ima barem 11-13 znakova. Idealno rješenje je izbjegavanje generiranja ključa pomoću lozinke, npr. korištenjem raznih pametnih kartica i sl., ali je u tom slučaju potrebno predvidjeti mogućnost zaštite od gubitka medija ključa za šifriranje.

Nesigurno skladištenje ključeva i lozinki.

Uobičajeni primjeri ove pogreške su:

  • dugačke i složene lozinke ispisane na ljepljivim ceduljama zalijepljenim na monitor korisnika.
  • pohranjivanje svih lozinki u datoteku koja nije zaštićena (ili je zaštićena puno slabije od samog sustava)
  • skladištenje elektronički ključevi u javnoj domeni.
  • čest prijenos elektroničkih ključeva između korisnika.

Zašto praviti blindirana vrata ako se ključ od njih nalazi ispod otirača?

Prijenos inicijalno šifriranih podataka u nesigurno okruženje.

Prilikom postavljanja sigurnosnog sustava, provjerite radi li svoj posao. Na primjer, naišao sam na situaciju (koja nije povezana s 1C) kada je početno šifrirana datoteka, dok je program radio u čistom obliku, bila smještena u privremenu mapu, odakle se mogla sigurno čitati. Često se sigurnosne kopije šifriranih podataka u čistom obliku nalaze negdje “nedaleko” od tih podataka.

Korištenje kriptografskih alata u druge svrhe

Šifriranjem podataka u prijenosu ne možete očekivati ​​da podaci budu nedostupni tamo gdje se koriste. Na primjer, IPSec usluge ni na koji način ne sprječavaju aplikacijski poslužitelj da "njuška" mrežni promet na razini aplikacije.

Stoga, da biste izbjegli pogreške prilikom implementacije kriptografskih sustava, trebali biste (barem) učiniti sljedeće prije nego što ih postavite.

  • Saznati:
    • Što treba zaštititi?
    • Koju metodu zaštite trebate koristiti?
    • Koje dijelove sustava je potrebno osigurati?
    • Tko će kontrolirati pristup?
    • Hoće li enkripcija funkcionirati u svim ispravnim područjima?
  • Odredite gdje su informacije pohranjene, kako će se slati preko mreže i računala s kojih će se informacijama pristupati. Ovo će pružiti informacije o brzini mreže, kapacitetu i korištenju prije implementacije sustava, što je korisno za optimizaciju performansi.
  • Procijenite ranjivost sustava na različite vrste napadi.
  • Razviti i dokumentirati sigurnosni plan sustava.
  • Ocijeniti ekonomsku učinkovitost (opravdanost) korištenja sustava.

Zaključak

Naravno, u kratkom pregledu nemoguće je naznačiti sve aspekte vezane uz sigurnost u 1C, ali dopustimo sebi da izvučemo neke preliminarne zaključke. Naravno, ova se platforma ne može nazvati idealnom - ona, kao i mnoge druge, ima svoje probleme u organiziranju sigurnog sustava. Ali to nikako ne znači da se ovi problemi ne mogu zaobići, naprotiv, gotovo svi nedostaci mogu se otkloniti pravilnim razvojem, implementacijom i korištenjem sustava. Većina problema nastaje zbog nedovoljne razvijenosti pojedinog aplikativnog rješenja i njegovog izvršnog okruženja. Na primjer, standardna rješenja bez značajnih promjena jednostavno ne podrazumijevaju stvaranje dovoljno sigurnog sustava.

Ovaj članak još jednom pokazuje da svaki skup sigurnosnih mjera mora pokriti sve faze implementacije: razvoj, implementaciju, administraciju sustava i, naravno, organizacijske mjere. U informacijskim sustavima "ljudski faktor" (uključujući korisnike) je glavna sigurnosna prijetnja. Ovaj skup mjera mora biti razuman i uravnotežen: nema smisla i malo je vjerojatno da će se izdvojiti dovoljno sredstava za organizaciju zaštite koja premašuje troškove samih podataka.

Društvo je jedinstvena usluga za kupce, programere, trgovce i affiliate partnere. Osim toga, ovo je jedna od najboljih internetskih trgovina softverom u Rusiji, Ukrajini i Kazahstanu, koja kupcima nudi široku paletu proizvoda, mnogo načina plaćanja, brzu (često trenutnu) obradu narudžbi i praćenje procesa narudžbe u osobnom odjeljku .