1c built-in na language stack overflow. Stack Overflow

  • 10.01.2022

04/14/2016 Bersyon 3.22 Ang interface ay binago, ang mga error sa paglilipat ng mga rehistro ay naitama, ang pamamaraan para sa paglilipat ng isang organisasyon at mga patakaran sa accounting ay binago. Platform 8.3.7.2027 BP 3.0.43.174
03/17/2016 Bersyon 3.24 Naitama ang mga napansing error. Platform 8.3.8.1747 BP 3.0.43.241
06/16/2016 Bersyon 3.26 Ang mga napansing error ay naitama. Platform 8.3.8.2088 BP 3.0.44.123
10/16/2016 Bersyon 4.0.1.2 Nakapirming paglipat ng imbakan ng halaga, binagong patakaran sa paglilipat ng accounting para sa mga release 3.44.*. Platform 8.3.9.1818 BP 3.0.44.164.
04/19/2017 Bersyon 4.0.2.7 Ang algorithm para sa paglilipat ng mga rehistro na nauugnay sa mga direktoryo ay nabago, napansin na mga error ay naitama, ang paglipat na may overwriting ng mga link ay naayos na.
05/29/2017 Bersyon 4.0.4.5 Binago ang paglipat ng mga paggalaw, idinagdag ang pagtingin sa mga paggalaw ng mga inilipat na dokumento, iba pa...
05/30/2017 Bersyon 4.0.4.6 Nag-ayos ng error kapag pinupunan ang listahan ng mga umiiral nang direktoryo sa pinagmulan (salamat shoy)
06/17/2017 Bersyon 4.0.5.1 Ang algorithm para sa paglilipat ng mga paggalaw ay nabago.
07/19/2017 Bersyon 4.0.5.4 Ang paglipat ng CI mula sa BP 2.0 ay binago. Sa hindi inaasahan, ang paglipat mula sa UT 10.3 ay isinagawa ni Smilegm, sa bersyong ito ang paglipat ay bahagyang naitama para sa sitwasyong ito)))
08/10/2017 Bersyon 4.0.5.5 Inayos ang mga error kapag naglilipat mula sa BP 2.0
09.19.2017 Bersyon 4.4.5.7 Fixed connection check para sa 3.0.52.*
11/28/2017 Bersyon 4.4.5.9 Inayos ang mga naiulat na error
12/06/2017 Bersyon 5.2.0.4 Ang algorithm sa paghahanap ng link ay muling idinisenyo. Ang mga pamamaraan ng paglipat mula sa BP 1.6 ay naidagdag; wala nang mahigpit na koneksyon sa BP - madali mo itong magagamit upang maglipat ng data ng "halos" magkaparehong mga pagsasaayos. Susubukan kong itama ang lahat ng komento kaagad.
12/08/2017 Bersyon 5.2.1.3 Nagdagdag ng algorithm para sa paglilipat ng mga salary statement mula BP.2.0 hanggang BP 3.0. Kasama ang mga pagbabago para sa pagbabahagi sa pagitan ng magkatulad na mga configuration.
12/19/2017 Bersyon 5.2.2.2 Ang paglipat ng mga independiyenteng rehistro ng impormasyon para sa mga direktoryo na nasa mga sukat ng mga rehistrong ito ay naayos na.

12/06/2017 Bagong bersyon ng pagpoproseso 5.2.0.4. Kabilang sa mga makabuluhang pagbabago ay ang kakayahang lumipat mula sa BP 1.6 hanggang BP 3.0. Ang pangunahing pagbabago ay ang pamamahala ng paghahanap para sa mga link sa direktoryo - sa mga nakaraang bersyon ang paghahanap ay sa pamamagitan ng GUID, ngunit sa bersyong ito maaari mong paganahin ang paghahanap na "Sa pamamagitan ng mga detalye":

01/17/2018 Bersyon 5.2.2.3 Naayos - napansin ang mga error sa mga subordinate na direktoryo at pana-panahong mga rehistro ng impormasyon.

07/19/2018 Bersyon 5.2.2.8 Naitama ang mga napansing error.

kung saan maaari kang magtakda ng mga detalye ng paghahanap para sa anumang direktoryo. Ang rehimeng ito mismo ay "lumitaw" sa maraming kahilingan ng mga manggagawa, para sa mga kaso kung kailan kinakailangan ang isang palitan sa isang umiiral nang database na mayroon nang data (halimbawa, upang pagsamahin ang mga talaan ng accounting para sa dalawang organisasyon sa isang database).

12/21/2015 Platform 8.3.7.1805 at BP 3.0.43.29 ay inilabas, ayon sa pagkakabanggit isang bagong bersyon pagproseso 3.1:-) (paglalarawan sa ibaba). Bagong functionality - ang kakayahang maghambing ng mga balanse at turnover sa pagitan ng dalawang database ng BP (para sa lahat ng mga account, kung ang mga chart ng mga account ay nag-tutugma, o para sa mga indibidwal na tumutugmang accounting account, mayroon man o walang analytics).
01/03/2016 Bersyon 3.5 - ang mekanismo para sa pagkonekta sa source base ay binago - dinala sa pagsunod sa BSP 2.3.2.43. Naayos na ang mga menor de edad na bug. Platform 8.3.7.1845, BP 3.0.43.50
02/16/2016 Bersyon 3.6 - Idinagdag ang flag na "Itakda ang manu-manong pagwawasto" para sa mga dokumentong inilipat na may mga paggalaw. Nakapirming paglipat ng mga paggalaw - ang mga dokumento na may petsang mas mababa sa simula ng panahon ay inililipat nang walang paggalaw. Platform 8.3.7.1917, BP 3.0.43.116
03/22/2016 Bersyon 3.10 - Idinagdag ang flag na "Palaging i-overwrite ang mga sanggunian" para sa mandatoryong muling pagsulat ng mga na-reference na bagay (ang bilis ng paglipat ay makabuluhang nabawasan, ngunit kung minsan ay kinakailangan). Ang tab na "Paghahanda" ay naidagdag, kung saan maaari mong i-configure ang pagsusulatan ng pinagmulan at patutunguhan na mga chart ng mga account (sa parehong antas ng mga code ng account) at ang paglipat ng mga constant. Platform 8.3.7.1970, BP 3.0.43.148

04/03/2016 Bersyon 3.11 Ang pagpuno ng listahan ng mga dokumentong umiiral sa pinagmulan ay binago: ito ay napunan ng mga paggalaw ayon sa tsart ng mga account, ito ay ginawa lamang sa pamamagitan ng mga link para sa panahon, tulad ng sa // site/public/509628/

Ang pagproseso ay inilaan para sa paglilipat ng data para sa anumang panahon sa parehong paraan tulad ng "Pag-upload ng MXL" sa ITS, nang hindi gumagamit ng XML, JSON at iba pang mga intermediate na file - palitan mula sa database patungo sa database sa pamamagitan ng COM. Sa mga bersyon na mas matanda sa 3.10, ginagamit ang isang koneksyon gamit ang isang algorithm mula sa BSP, na nagbibigay para sa pagpaparehistro ng comcntr.dll (kung "pinapayagan" ng OS), pati na rin ang iba't ibang mga mensahe kapag imposibleng magtatag ng isang koneksyon, para sa halimbawa - "Ang base ng impormasyon ay nasa proseso ng pag-update," atbp. Idinagdag ang tseke para sa pagpili ng isang receiver bilang isang pinagmulan ng IS - isang babala ang ibinibigay.

Maaaring gamitin para sa:

1. Paglipat ng impormasyon sa sanggunian ng regulasyon (RNI) mula sa pinagmulan ng IS patungo sa patutunguhan ng IS (ang paglipat ng lahat ng impormasyon ng sanggunian ay isinasagawa sa kahilingan ng user, ang mga kinakailangang reference na aklat, atbp. ay inililipat sa pamamagitan ng mga link sa panahon ng anumang paglilipat).

2. Paglipat ng mga dokumento para sa anumang napiling panahon.

3. Paglipat ng lahat ng impormasyon mula sa isang "sirang" sistema ng seguridad ng impormasyon kung ito ay inilunsad sa 1C: Enterprise mode, at ang pag-upload ng data o paglulunsad ng Configurator ay imposible.

Tampok ng pagproseso - ang seguridad ng impormasyon ng tatanggap at ang pinagmulan ay maaaring magkaiba; ilipat mula 2.0 hanggang 3.0 - iba ang mga edisyon, ngunit gumagana ang paglipat!!! Binabalewala ang mga hindi tugmang detalye, o dapat tukuyin ang mga algorithm ng paglilipat para sa kanila.

Komento: HINDI GINAMIT ang conversion ng data! At wag mo ng itanong kung bakit!!! Para sa mga lalo na mapili - halos araw-araw nagbabago ang BP 3.0, wala nang lakas para panatilihing napapanahon ang mga panuntunan sa paglipat - mas simple ang lahat dito :-).

Ang isa pang tampok ng pagproseso ay na ito ay inilunsad sa seguridad ng impormasyon ng tatanggap (ang mga analogue na pinakamalapit sa pag-andar ay gumagana sa kabaligtaran - mula sa pinagmulan hanggang sa tatanggap).

Pagsisimula - kailangan mong tukuyin ang panahon ng pagproseso, tukuyin ang organisasyon mula sa pinagmulan, ililipat ito sa patutunguhan.

Kapag naglilipat ng isang organisasyon, ang mga patakaran sa accounting at "kaugnay" na mga rehistro ng impormasyon ay inililipat. Samakatuwid, kapag una kang pumili ng isang organisasyon sa pinagmulan, lilipas ang ilang oras bago ito lumitaw sa receiver.

Ang mga chart ng mga account ng pinagmulan at patutunguhan ay dapat na pareho, walang magkakaibang mga account sa bersyon 2.* ay inililipat sa patutunguhan, ito ay pinlano upang paganahin ang pagsasaayos ng mga tumutugmang account at analytics sa hinaharap. Ang mga account ay inililipat gamit ang mga code na hindi matatagpuan sa receiver ay HINDI MAAARI!!!

Ang natitirang mga bagay ay inililipat gamit ang mga panloob na identifier (GUID), kaya dapat mong bigyang pansin ang ilang mga pangunahing direktoryo, halimbawa - Mga Pera.

Kung plano mong makipagpalitan ng isang "malinis" na database, pagkatapos ay mas mahusay na tanggalin ang mga direktoryo na napunan sa unang paglulunsad bago ang palitan. Bakit mayroong isang pahina sa pagproseso kung saan maaari mong makuha ang mga elemento ng direktoryo at tanggalin ang mga ito. Sa pinakamababa, kailangan mong alisin ang "rub" na pera. - kasi Ang pagdoble ay halos hindi maiiwasan (sa prinsipyo, ito ay madaling naitama pagkatapos ibahagi ang paghahanap at pagpapalit ng mga duplicate na binuo sa BP 3.0).

Ang pagpoproseso ay nagbibigay para sa pagtawag sa pahina ng pagtanggal ng direktoryo kapag ang paunang form sa pagpuno ay bukas:

Kapag binuksan mo ang pagproseso, ang isang pahina para sa pagtanggal ng mga direktoryo na napunan sa panahon ng paunang pagpuno ay ipapakita:

Mula noong bersyon 3.22, ang interface ay nabago, ngayon ang lahat ng mga operasyon sa paghahanda ay naka-tab at palaging magagamit


Mahalagang suriin ang mga sulat ng Tsart ng Mga Account ng pinagmulan at tatanggap at tiyaking ipahiwatig ang mga sulat ng mga account.

Hindi na kailangang tanggalin ang mga paunang natukoy na elemento ng direktoryo - inililipat sila ng mga identifier ng pagsasaayos (hindi mga GUID).

Maaari kang pumili ng mga bagay para ilipat gamit ang selection form mula sa mga direktoryo at dokumento (Ang mga rehistro ng impormasyon na nauugnay sa mga bagay na ito ay awtomatikong ililipat, kaya hindi na kailangang piliin ang mga ito nang hiwalay).Ang paglipat ng mga rehistro, ang pagbabawas ay pansamantalang hindi pinagana - kailangan mong bumuo ng isang listahan ng mga rehistro para sa paglipat - isang bagay ay dapat ilipat, isang bagay ay hindi dapat, sa yugtong ito sapat na kung ano ang inilipat sa mga direktoryo, ang listahan ng mga rehistro para sa paglipat ay magiging sa template sa mga susunod na bersyon.

Kapag nakikipagpalitan sa 2.0, ang ilan sa mga detalye (halimbawa, Impormasyon sa Pakikipag-ugnayan) ay inilipat ayon sa algorithm na binuo sa pagproseso, dahil para sa 2.0 at 3.0 sila ay nakaimbak sa ibang paraan. Ang sitwasyon ay katulad sa isang bilang ng mga dokumento (halimbawa, Pagsasaayos ng Utang).

Ang listahan ng mga uri ng bagay ay maaaring mapunan nang iba sa bersyon 3.22, ito ay inilalagay sa isang submenu, ang mga pagbabago ay ipinahiwatig sa larawan:

Mayroong isang pagpapasimple ng paggamit ng pagproseso - hindi ka maaaring pumili ng mga direktoryo para sa palitan, ngunit punan lamang ang listahan ng mga uri sa receiver na may mga uri lamang ng mga direktoryo na mayroong hindi bababa sa isang entry sa pinagmulan.

Ang pagproseso ay may built-in na layout na naglilista ng mga direktoryo na hindi kailangang ilipat mula sa pinagmulan patungo sa patutunguhan (ang layout na "Ibukod mula sa paglipat"). Maaari kang magdagdag (mag-alis) ng anumang mga direktoryo sa layout na ito. Kung hindi mo kailangang ilipat ang lahat ng data ng sanggunian, sapat na upang ilipat ang mga dokumento, isang listahan na maaari ring makuha nang hindi pumipili ng mga uri, punan lamang ang lahat ng mga mapagkukunang dokumento kung saan umiiral ang mga transaksyon.

Ang paglipat ng mga dokumento na may mga paggalaw ay ibinigay; para sa mga palitan ng 3.0 hanggang 3.0 at ang pagsusulatan ng mga tsart ng mga account, gumagana ito nang isa-isa; kapag nagpapalitan ng 2.0 hanggang 3.0, posible ang mga error, kaya inirerekomenda na ilipat ang mga dokumento nang walang paggalaw, at pagkatapos ilipat lamang ang mga ito sa receiver. Kapag naglilipat ng mga dokumento na may mga paggalaw, nakatakda ang flag na "Manu-manong pagsasaayos".

Ang katangiang "Na-post" ay itinakda sa mga dokumento ng tatanggap sa parehong paraan tulad ng sa pinagmulan, ngunit ang mga paggalaw (kung hindi sila inilipat) ay lalabas lamang pagkatapos maproseso ang mga dokumento, halimbawa, gamit ang pagproseso na binuo sa BP 3.0 Group na pag-post ng mga dokumento (inirerekomendang opsyon), o mula sa pagpoproseso na ito (Mayroong "Post Documents" na buton dito).

Kung ang pagproseso ay binalak na gamitin para sa permanenteng pagpapalitan, maaari itong mairehistro sa seguridad ng impormasyon ng tatanggap (ang "Register" na buton). Para sa "isang beses" na paglilipat, maaari mo lamang itong gamitin sa pamamagitan ng File - Open.

12/21/2015 - Bersyon 3.1 platform 8.3.7.1805 at power supply unit 3.0.43.29 (bersyon 2.15 para sa 3.0.43.* ay hindi gumagana - ang configuration ay medyo nabago).

Binago:

Dialog para sa pagpili ng opsyon sa koneksyon, palaging available ang bandila ng Client-server, depende sa setting nito, alinman sa pagpili ng folder ng database ng file, o isang field na may pangalan ng database sa server at ang pangalan ng server mismo ay magagamit (isang bug sa dialog na bersyon 2.15 ay naayos na)

- BAGONG FUNCTIONALITY: Isang mekanismo para sa pag-reconcile ng mga balanse at turnover sa pagitan ng source at receiver database sa iba't ibang antas ng detalye:


Sa tingin ko ang pagpili ng mga opsyon sa pag-verify ay malinaw mula sa figure:


Mayroong mga pagkakaiba sa paggamit sa manipis at makapal na mga kliyente - sa makapal na kliyente, isang window ng paghahambing ng file ay agad na ipinapakita:


Sa manipis na kliyente, hindi ako nag-abala sa pagpindot sa programmatic ng mga pindutan; Iminumungkahi ko ang isang simpleng opsyon para sa pagpapakita ng window ng paghahambing:


Ang paghahambing sa isang thin client, IMHO, ay mas maginhawa, dahil... ay may mga pindutan ng nabigasyon para sa mga pagkakaiba, na mas maginhawa para sa malalaking talahanayan kaysa sa pag-scroll gamit ang mouse:

03/22/2016 Bersyon 3.10 - Idinagdag ang flag na "Palaging i-overwrite ang mga sanggunian" para sa mandatoryong muling pagsulat ng mga na-reference na bagay (ang bilis ng paglipat ay makabuluhang nabawasan, ngunit kung minsan ay kinakailangan). Ang tab na "Paghahanda" ay naidagdag, kung saan maaari mong i-configure ang pagsusulatan ng pinagmulan at patutunguhan na mga chart ng mga account (sa parehong antas ng mga code ng account) at ang paglipat ng mga constant. Platform 8.3.7.1970, BP 3.0.43.148

- BAGONG FUNCTIONALITY: Bago maglipat ng mga dokumento, inirerekumenda na suriin ang tsart ng mga account para sa pagkakapare-pareho sa pinagmulan at patutunguhan, pati na rin ang pagsunod sa mga itinatag na constants.

Para sa layuning ito, isang tab na "Paghahanda" ay idinagdag kung saan maaari mong itakda ang mga sulat na ito:


Ang algorithm para sa pagpuno sa talahanayan ng pagtutugma ng account ay simple - ang turnover na umiiral sa pinagmulan ay sinusuri, at para sa bawat account na matatagpuan doon, ang isang tugma ay matatagpuan sa receiver sa pamamagitan ng code; kung ang isang tugma ay hindi natagpuan, isang linya kasama ang account code ay ipinapakita sa talahanayan, kung saan kailangan mong piliin ang receiver account, ito ay gagamitin kapag inilipat. Ang pagsunod sa Poke ay itinatag sa antas ng code.

Upang suriin at ilipat ang mga sulat ng itinatag na mga constant, ginagamit ang kaukulang talahanayan:

Pinupunan namin ito at ililipat kung kinakailangan. Ang mga constant lamang na may markang bandila ang inililipat...

Ang stack ng programa ay isang espesyal na lugar ng memorya na inayos ayon sa prinsipyo ng pila ng LIFO (Last in, first out). Ang pangalan na "stack" ay nagmula sa pagkakatulad ng prinsipyo ng pagtatayo nito na may isang stack ng mga plato - maaari kang maglagay ng mga plato sa ibabaw ng bawat isa (ang paraan ng pagdaragdag sa stack, "push", "push"), at pagkatapos alisin ang mga ito, simula sa itaas (paraan ng pagkuha ng halaga mula sa stack, "popping", "pop"). Ang stack ng programa ay tinatawag ding call stack, execution stack, o machine stack (upang hindi ito malito sa "stack" - isang abstract na istraktura ng data).

Para saan ang stack? Pinapayagan ka nitong maginhawang ayusin ang tawag ng mga subroutine. Kapag tinawag, ang function ay tumatanggap ng ilang mga argumento; dapat din itong mag-imbak ng mga lokal na variable nito sa isang lugar. Bilang karagdagan, dapat nating isaalang-alang na ang isang function ay maaaring tumawag sa isa pang function, na kailangan ding pumasa sa mga parameter at mag-imbak ng mga variable nito. Gamit ang stack, kapag nagpasa ng mga parameter kailangan mo lamang ilagay ang mga ito sa stack, pagkatapos ay ang tinatawag na function ay maaaring "i-pop" ang mga ito mula doon at gamitin ang mga ito. Ang mga lokal na variable ay maaari ding maimbak doon - sa simula ng code nito, inilalaan ng function ang bahagi ng memorya ng stack, at kapag bumalik ang kontrol, nililinis at pinalaya ito. Ang mga programmer sa mataas na antas ng mga wika ay karaniwang hindi nag-iisip tungkol sa mga ganoong bagay - ang compiler ay bumubuo ng lahat ng kinakailangang regular na code para sa kanila.

Mga kahihinatnan ng isang pagkakamali

Ngayon ay halos malapit na tayo sa problema. Sa abstract, ang isang stack ay isang walang katapusang tindahan kung saan ang mga bagong item ay maaaring idagdag nang walang katapusang. Sa kasamaang palad, sa ating mundo ang lahat ay may hangganan - at ang stack memory ay walang pagbubukod. Ano ang mangyayari kung magtatapos ito kapag ang mga argumento ng function ay itinulak sa stack? O naglalaan ba ang function ng memorya para sa mga variable nito?

Magkakaroon ng error na tinatawag na stack overflow. Dahil ang stack ay kinakailangan upang ayusin ang pagtawag ng mga function na tinukoy ng gumagamit (at halos lahat ng mga programa sa mga modernong wika, kabilang ang mga object-oriented, ay binuo batay sa mga function sa isang paraan o iba pa), hindi na nila magagawang tatawagin. Samakatuwid, kinokontrol ng operating system, nililimas ang stack, at tinatapos ang programa. Dito maaari nating bigyang-diin ang pagkakaiba sa pagitan ng stack overflow at stack overflow - sa unang kaso, ang isang error ay nangyayari kapag nag-access sa isang hindi tamang lugar ng memorya, at kung walang proteksyon sa yugtong ito, hindi ito nagpapakita ng sarili sa sandaling iyon - na may matagumpay na kumbinasyon ng mga pangyayari, ang programa ay maaaring gumana nang normal. Kung protektado lang ang memory na ina-access, . Sa kaso ng isang stack, tiyak na magwawakas ang programa.

Upang maging ganap na tumpak, dapat tandaan na ang gayong paglalarawan ng mga kaganapan ay totoo lamang para sa mga compiler na nag-compile sa native code. Sa mga pinamamahalaang wika, ang virtual machine ay may sarili nitong stack para sa mga pinamamahalaang programa, ang estado kung saan ay mas madaling subaybayan, at maaari mo ring ibigay ang isang pagbubukod sa programa kapag may naganap na overflow. Sa mga wikang C at C++ ay hindi ka makakaasa sa gayong "karangyaan".

Mga dahilan para sa pagkakamali

Ano ang maaaring humantong sa gayong hindi kasiya-siyang sitwasyon? Batay sa mekanismong inilarawan sa itaas, ang isang posibilidad ay ang napakaraming nested function call. Ang sitwasyong ito ay partikular na malamang kapag gumagamit ng recursion. Ang walang katapusang recursion (sa kawalan ng isang tamad na mekanismo ng pagsusuri) ay naaantala sa ganitong paraan, kumpara sa , na kung minsan ay may mga kapaki-pakinabang na aplikasyon. Gayunpaman, sa isang maliit na halaga ng memorya na inilalaan sa stack (na, halimbawa, ay tipikal para sa mga microcontroller), ang isang simpleng pagkakasunud-sunod ng mga tawag ay maaaring sapat.

Ang isa pang pagpipilian ay ang mga lokal na variable, na nangangailangan ng maraming memorya. Ang pagkakaroon ng lokal na hanay ng isang milyong elemento, o isang milyong lokal na variable (hindi mo alam kung ano ang mangyayari) ay hindi ang pinakamagandang ideya. Kahit na ang isang tawag sa gayong matakaw na function ay madaling magdulot ng stack overflow. Upang makakuha ng malaking halaga ng data, mas mahusay na gumamit ng mga dynamic na mekanismo ng memorya, na magbibigay-daan sa iyo upang mahawakan ang error ng kakulangan nito.

Gayunpaman, ang dynamic na memorya ay medyo mabagal sa mga tuntunin ng alokasyon at deallocation (dahil ang operating system ang humahawak nito), at sa direktang pag-access kailangan mong manu-manong ilaan at i-deallocate ito. Ang memorya sa stack ay napakabilis na inilalaan (sa katunayan, kailangan mo lamang baguhin ang halaga ng isang rehistro); bilang karagdagan, ang mga bagay na inilalaan sa stack ay may mga destructors na awtomatikong tinatawag kapag ang kontrol ng function ay bumalik at ang stack ay na-clear. Siyempre, ang pagnanais na makakuha ng memorya mula sa stack ay agad na lumitaw. Samakatuwid, ang ikatlong paraan ng pag-apaw ay ang sariling paglalaan ng memorya ng programmer sa stack. Ang C library ay nagbibigay ng alloca function na partikular para sa layuning ito. Ito ay kagiliw-giliw na tandaan na kung ang function para sa paglalaan ng dynamic na memory malloc ay may sariling "kambal" para sa pagpapalaya nito, libre, kung gayon ang alloca function ay wala nito - ang memorya ay awtomatikong napalaya pagkatapos ng kontrol ng pagbabalik ng function. Marahil ito ay nagpapalubha lamang sa sitwasyon - pagkatapos ng lahat, hindi posible na palayain ang memorya bago lumabas sa pag-andar. Kahit na, ayon sa pahina ng tao, "ang pag-andar ng alloca ay nakasalalay sa makina at compiler; sa maraming mga sistema ang pagpapatupad nito ay may problema at maraming surot; ang paggamit nito ay napakawalang halaga at sinisimangot" - ginagamit pa rin ito.

Mga halimbawa

Bilang halimbawa, tingnan natin ang code para sa recursive file search na matatagpuan sa MSDN:

Void DirSearch(String* sDir) ( try ( // Hanapin ang mga subfolder sa folder na ipinasa. 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->Teksto); int numFiles = f->get_Length(); para sa (int j=0; j< numFiles; j++) { listBox1->Items->Add(f[j]); ) DirSearch(d[i]); ) ) catch (System::Exception* e) ( MessageBox::Show(e->Message); ) )

Ang function na ito ay nakakakuha ng isang listahan ng mga file sa tinukoy na direktoryo, at pagkatapos ay tumatawag sa sarili nito para sa mga elemento ng listahan na nangyari na mga direktoryo. Alinsunod dito, na may sapat na malalim na puno file system, nakakakuha tayo ng natural na resulta.

Isang halimbawa ng pangalawang diskarte, na kinuha mula sa tanong na "Bakit nangyayari ang stack overflow?" mula sa isang site na tinatawag na Stack Overflow (ang site ay isang koleksyon ng mga tanong at sagot sa anumang paksa ng programming, at hindi lamang Stack Overflow, tulad ng maaaring mukhang):

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

Tulad ng nakikita mo, ang pangunahing pag-andar ay naglalaan ng memorya sa stack para sa mga array ng mga uri ng int at float, bawat isa ay may isang milyong elemento, na sa kabuuan ay nagbibigay ng mas mababa sa 8 megabytes. Kung isasaalang-alang mo na bilang default, ang Visual C++ ay naglalaan lamang ng 1 megabyte para sa stack, kung gayon ang sagot ay nagiging halata.

At narito ang isang halimbawa na kinuha mula sa GitHub repository ng proyekto ng Lightspark Flash player:

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

Makakaasa ka na ang h.getLength()-7 ay hindi masyadong malaki bilang isang numero upang walang overflow sa susunod na linya. Ngunit ang oras ba na na-save sa paglalaan ng memorya ay nagkakahalaga ng "potensyal" na pag-crash ng programa?

Bottom line

Ang stack overflow ay isang nakamamatay na error na kadalasang nakakaapekto sa mga program na naglalaman ng mga recursive function. Gayunpaman, kahit na ang programa ay hindi naglalaman ng mga naturang pag-andar, ang isang overflow ay posible pa rin dahil sa malaking sukat ng mga lokal na variable o isang error sa manu-manong paglalaan ng memorya sa stack. Ang lahat ng mga klasikong panuntunan ay nananatiling may bisa: kung mayroong isang pagpipilian, mas mahusay na pumili ng pag-ulit sa halip na recursion, at hindi rin gumawa ng manu-manong trabaho sa halip na ang tagatala.

Bibliograpiya

  • E. Tanenbaum. Computer architecture.
  • Wikipedia. Stack overflow.
  • Stack Overflow. Stack overflow C++.

Ang stack, sa kontekstong ito, ay ang huli sa unang buffer na inilalaan mo sa panahon ng pagpapatupad ng iyong programa. Huli, Una (LIFO) ay nangangahulugan na ang huling bagay na inilagay mo ay palaging ang unang bagay na ibabalik mo - kung mag-pop ka ng 2 item sa stack, "A" at pagkatapos ay "B", kung gayon ang unang ilalabas mo sa stack ay magiging "B" at ang susunod na bagay ay magiging "A".

Kapag tumawag ka ng function sa iyong code, ang susunod na command pagkatapos ng function call ay iimbak sa stack at anumang memory space na maaaring ma-overwrit ng function call. Ang napiling function ay maaaring gumamit ng mas maraming stack para sa sarili nitong mga lokal na variable. Kapag tapos na ito, pakakawalan nito ang lokal na variable na espasyo na ginagamit nito at pagkatapos ay babalik sa dating function.

Stack Overflow

Ang stack overflow ay kapag gumamit ka ng mas maraming memory sa stack kaysa sa nilalayon na gamitin ng iyong program. Sa mga naka-embed na system, maaari ka lang magkaroon ng 256 byte para sa stack, at kung ang bawat function ay tumatagal ng 32 byte, maaari ka lamang magkaroon ng 8 function na tawag sa function 2 na may malalim na function 1 function, na tumatawag sa function 3, na tumatawag sa function 4. .na tumatawag sa function 8, na tumatawag sa function 9, ngunit ang function 9 ay nag-o-overwrite ng memorya sa labas ng stack. Maaaring ma-overwrite nito ang memorya, code, atbp.

Maraming programmer ang nagkakamali sa pamamagitan ng pagtawag sa function A, na pagkatapos ay tatawag sa function B, na pagkatapos ay tatawag sa function C, na pagkatapos ay tatawag sa function A. Ito ay maaaring gumana sa halos lahat ng oras, ngunit isang maling input lamang ang magiging dahilan upang ito ay umikot magpakailanman hanggang sa computer nalaman ni fails na puno na ang stack.

Ang mga recursive function ay isa ring sanhi nito, ngunit kung ikaw ay sumusulat ng recursively (ibig sabihin, ang iyong function ay tumatawag sa sarili nito) kailangan mong malaman ito at gumamit ng static/global variable upang maiwasan ang walang katapusang recursion.

Karaniwan, ang OS at programming language na iyong ginagamit ay namamahala sa stack, at wala ito sa iyong mga kamay. Dapat mong tingnan ang iyong call graph (isang istraktura ng puno na nagpapakita mula sa iyong pangunahing punto kung ano ang tinatawag ng bawat function) upang makita kung gaano kalalim ang iyong mga function na tawag, at tukuyin ang mga loop at recursion na hindi nilayon. Ang mga sinadyang loop at recursion ay dapat na artipisyal na suriin ang error kung masyadong maraming beses silang tumatawag sa isa't isa.

Bukod sa mahusay na mga kasanayan sa programming, static at dynamic na pagsubok, wala kang masyadong magagawa sa mga high level na system na ito.

Mga Naka-embed na Sistema

Sa naka-embed na mundo, lalo na sa high-assurance code (automotive, aerospace, aerospace), nagsasagawa ka ng malawak na pagsubok at pagsusuri ng code, ngunit ginagawa mo rin ang sumusunod:

  • Huwag paganahin ang recursion at mga loop - pagsunod sa patakaran at pagsubok
  • Panatilihin ang code at stack na magkalayo (code sa flash, stack sa RAM at hindi kailanman magtutugma sa isa't isa)
  • Maglagay ng mga guard bar sa paligid ng stack - isang walang laman na lugar ng memorya na pinupuno mo ng magic number (karaniwan ay ang nakakaabala na gawain, ngunit maraming mga pagkakaiba-iba dito) at daan-daan o libu-libong beses bawat segundo na tumitingin ka sa mga guard bar upang gumawa siguradong hindi sila na-overwrit.
  • Gumamit ng proteksyon sa memorya (ibig sabihin, huwag i-execute sa stack, huwag magbasa o sumulat nang direkta sa likod ng stack)
  • Ang mga interrupt ay hindi tumatawag sa mga pangalawang function - nagtatakda sila ng mga flag, kumopya ng data, at hinahayaan ang application na pangasiwaan ito (kung hindi, maaari kang mapunta sa 8 malalim sa iyong function na call tree, magkaroon ng interrupt, at pagkatapos ay magkaroon ng ilang higit pang mga function sa loob ang interrupt exit, na nagiging sanhi ng pagkahagis). Marami kang call tree - isa para sa mga pangunahing proseso at isa para sa bawat pagkagambala. Kung ang iyong mga pagkagambala ay maaaring makagambala sa isa't isa... aba, may mga dragon...

Mataas na antas ng mga wika at sistema

Ngunit sa mataas na antas ng mga wika na tumatakbo sa mga operating system:

  • Bawasan ang lokal na imbakan ng variable (ang mga lokal na variable ay nakaimbak sa stack), bagaman ang mga compiler ay medyo matalino tungkol dito at kung minsan ay maglalagay ng malalaking tipak sa heap kung ang iyong call tree ay mababaw)
  • Iwasan o mahigpit na limitahan ang recursion
  • Huwag abalahin ang iyong mga programa nang masyadong malayo sa mas maliliit at mas maliliit na function - kahit na hindi isinasaalang-alang ang mga lokal na variable, ang bawat function na tawag ay kumonsumo ng hanggang 64 bytes sa stack (32-bit na processor, na nagse-save ng kalahati ng mga rehistro ng processor, mga flag, atbp.).
  • Panatilihing mababaw ang call tree (katulad ng paglalarawan sa itaas)

Mga web server

Depende ito sa sandbox na mayroon ka kung maaari mong kontrolin o makita ang stack. Malamang na maaari mong pangasiwaan ang mga web server tulad ng anumang iba pang mataas na antas ng wika at operating system - ito ay halos wala sa iyong mga kamay, ngunit suriin ang wika at server stack na iyong ginagamit. Halimbawa, maaari mong hatiin ang stack sa iyong SQL server.

Ang Informix® DataBlade™ API Programmer's Guide ay magagamit para sa pag-download. Ang seksyong "Pamamahala ng Stack Space" ay naglalarawan sa paglikha ng mga function na tinukoy ng gumagamit (UDRs). Nagbibigay ang artikulong ito ng karagdagang impormasyon at mga tip sa pag-debug.

Nalalapat ang sumusunod na impormasyon kung tumatakbo ang UDR sa isang virtual processor (VP) na tinukoy ng gumagamit o sa isang VP CPU. Ang stack ng isang thread ay maaaring ilipat sa isang virtual na processor na tinukoy ng gumagamit kaagad bago isagawa ang UDR.

Anong laki ng stack ang inilalaan para sa UDR?

Ang laki ng stack na available sa isang UDR ay depende sa kung paano ginawa ang UDR:

    gamit ang STACK modifier, na nagpapahintulot sa UDR na gamitin ang espesyal na inilaan nitong stack,

    nang walang STACK modifier, na nangangahulugan na ibabahagi ng UDR ang stack na inilalaan ng server sa thread na gumagawa ng kahilingan. Ang laki ng stack sa kasong ito ay matutukoy ng halaga ng parameter na STACKSIZE sa onconfig configuration file.

STACK modifier

Ang CREATE PROCEDURE o CREATE FUNCTION na mga pahayag ay may opsyonal na STACK modifier na nagbibigay-daan sa iyong tukuyin ang dami ng stack space, sa mga byte, na kailangan upang maisagawa ang UDR.

Kung gagamitin mo ang STACK modifier kapag gumagawa ng UDR, ang server ay maglalaan at magdedeallocate ng stack space sa bawat oras na ang UDR ay isasagawa. Ang aktwal na magagamit na laki ay katumbas ng halaga ng STACK sa mga byte na binawasan ng ilang overhead depende sa bilang ng mga argumento ng function.

Kung ang halaga ng STACK ay mas mababa sa STACKSIZE na parameter sa onconfig file (tingnan ang susunod na seksyon), ang laki ng stack na inilalaan para sa UDR ay awtomatikong ibi-round up sa STACKSIZE na halaga.

Parameter ng pagsasaayos ng STACKSIZE

Ang onconfig configuration file ay may kasamang STACKSIZE parameter na tumutukoy sa default na laki ng stack para sa mga thread ng user.

Kung hindi mo tinukoy ang STACK kapag gumagawa ng UDR, hindi naglalaan ang server ng karagdagang stack space upang maisagawa ang UDR na iyon. Sa halip, ginagamit ng UDR ang stack space na inilaan para isagawa ang kahilingan. Ang magagamit na laki ng stack ay depende sa overhead ng pagpapatupad ng function sa antas ng SQL.

Ang stack sa bawat thread ay inilalaan nang isang beses para sa partikular na thread na nagpapatupad ng kahilingan. Ang pagganap ay mas mahusay kapag ang UDR ay nagbabahagi ng isang stack sa isang thread, dahil ang server ay hindi nag-aaksaya ng mga mapagkukunan sa paglalaan ng karagdagang stack para sa bawat UDR na tawag. Sa kabilang banda, kung ang laki ng stack na ginamit ng UDR ay lumalapit sa halaga ng STACKSIZE, maaari itong magdulot ng stack overflow kapag tinatawag ang function bilang bahagi ng isang kumplikadong query (kung saan mas kaunting espasyo ng stack ang magagamit para sa pagpapatupad ng UDR).

Pakitandaan na hindi mo dapat itakda ang halaga ng STACKSIZE na masyadong mataas, dahil makakaapekto ito sa lahat ng mga thread ng user.

Kailan kailangang kontrolin ang laki ng stack?

YDapat mong pamahalaan ang stack space kung ang UDR ay gagawa ng mga recursive na tawag o kung ang UDR ay nangangailangan ng mas maraming stack space kaysa sa available bilang default sa request thread's stack (STACKSIZE).

Mayroong dalawang paraan upang madagdagan ang stack para sa pagpapatupad ng UDR:

    Tukuyin ang STACK modifier kapag gumagawa ng UDR.

    Gamitin ang mi_call() upang gumawa ng mga recursive na tawag (tingnan ang Informix DataBlade API Programmer's Guide para sa isang halimbawa).

Kung hindi ka tumukoy ng laki sa pamamagitan ng STACK, at kung hindi ka gumagamit ng mi_call() para dagdagan ang kasalukuyang stack, at kung gumawa ang UDR ng isang bagay na nangangailangan ng maraming stack space, magdudulot ito ng stack overflow.

Tandaan na ang ilang mi_* function ay nagdaragdag ng bagong stack segment para sa sarili nilang pagpapatupad. Ang mga segment na ito ay libre kapag bumabalik sa pagtawag sa function na UDR.

Ano ang gagawin kung may mali?

Pagsubaybay sa Paggamit ng Stack

Ang layunin ng pagsubaybay ay tukuyin ang partikular na UDR na nagiging sanhi ng pag-apaw ng stack upang maaari mong baguhin ang halaga ng STACK partikular para sa partikular na UDR na iyon.

    Pagsubaybay sa paggamit ng stack gamit ang command na "onstat -g sts".

    Pagsubaybay sa isang session na nagpapatupad ng isang SQL query gamit ang "onstat -g ses session_id"

Pagkatapos matukoy ang isang SQL query na nagtatapos sa isang stack overflow, dapat mong matukoy ang paggamit ng stack sa pamamagitan ng hiwalay na pagpapatupad ng mga UDR query na bahagi ng orihinal na query.

Maaari mong dynamic na itakda ang halaga ng STACK para sa UDR. Halimbawa:

baguhin ang function na MyFoo (lvarchar,lvarchar) gamit ang (magdagdag ng stack=131072);

Pagkatapos baguhin ang halaga ng STACK, dapat mong subukan ang orihinal na kahilingan upang matiyak na ito ay matatag na ngayon.

Dagdagan ang STACKSIZE

Bilang kahalili, subukang taasan ang halaga ng STACKSIZE. Suriin kung malulutas nito ang problema. (Huwag kalimutang ibalik ang dating halaga sa ibang pagkakataon).

Kung ang pagtaas ng STACKSIZE ay hindi makakatulong, ang problema ay malamang na sira ang memorya. Narito ang ilang mungkahi:

    Paganahin ang memory scribble at memory pool checking. Ang seksyong "Mga Problema sa Pag-debug" sa artikulong Paglalaan ng Memory para sa mga UDR ay nagpapaliwanag kung paano ito gagawin.

    Muling isaalang-alang ang paggamit ng mi_lvarchar . Ang partikular na atensyon ay dapat ibigay sa mga lugar kung saan ipinapasa ang mi_lvarchar sa isang function na inaasahang makatanggap ng null-terminated string bilang argumento.

    Bawasan ang bilang ng mga CPU (o user) na VP sa isa para mas mabilis na mai-reproduce ang problema.

mi_print_stack() -- Solaris

Ang Informix Dynamic Server para sa Solaris OS ay may kasamang mi_print_stack() function na maaaring tawagan sa UDR. Bilang default, ini-save ng function na ito ang stack frame sa sumusunod na file:

/tmp/default.stack

Hindi mo maaaring baguhin ang pangalan ng output file, ngunit maaari mong baguhin ang lokasyon nito sa pamamagitan ng pagbabago ng halaga ng variable ng kapaligiran ng DBTEMP. Siguraduhin na ang direktoryo ng $DBTEMP ay maisusulat ng informix user. Ang anumang mga error na nakatagpo habang isinasagawa ang mi_print_stack() ay iniuulat sa $MSGPATH.

Available lang ang feature na ito para sa OC Solaris.

Talasalitaan

Mga termino at pagdadaglat na ginamit sa artikulong ito:

UDRRoutine na Tinukoy ng User
V.P.Virtual Processor

Ang artikulong ito ay muling nagpapakita na ang anumang hanay ng mga hakbang sa seguridad ay dapat sumaklaw sa lahat ng mga yugto ng pagpapatupad: pagbuo, pag-deploy, pangangasiwa ng system at, siyempre, mga hakbang sa organisasyon. Sa mga sistema ng impormasyon, ito ay ang "human factor" (kabilang ang mga gumagamit) na ang pangunahing banta sa seguridad. Ang hanay ng mga hakbang na ito ay dapat na makatwiran at balanse: ito ay hindi makatwiran at malamang na hindi sapat na pondo ang ilalaan upang ayusin ang proteksyon na lumalampas sa halaga ng data mismo.

Panimula

Ang 1C:Enterprise ay ang pinakakaraniwang sistema ng accounting sa Russia, ngunit sa kabila nito, hanggang sa bersyon 8.0 ang mga developer nito ay nagbigay ng napakakaunting pansin sa mga isyu sa seguridad. Karaniwan, siyempre, ito ay idinidikta ng angkop na presyo ng produkto at ang pagtutok sa mga maliliit na negosyo kung saan walang mga kwalipikadong espesyalista sa IT, at ang posibleng gastos sa pag-deploy at pagpapanatili ng isang secure na sistema ay magiging napakamahal para sa negosyo. Sa paglabas ng bersyon 8.0, ang diin ay kailangang baguhin: ang halaga ng mga solusyon ay tumaas nang malaki, ang sistema ay naging mas nasusukat at nababaluktot - ang mga kinakailangan ay nagbago nang malaki. Kung ang system ay naging sapat na maaasahan at secure ay isang napaka-indibidwal na tanong. Ang pangunahing sistema ng impormasyon ng isang modernong negosyo ay dapat matugunan ang hindi bababa sa mga sumusunod na kinakailangan sa seguridad:

  • Medyo mababa ang posibilidad ng pagkabigo ng system dahil sa mga panloob na dahilan.
  • Maaasahang awtorisasyon ng user at proteksyon ng data mula sa mga maling pagkilos.
  • Isang epektibong sistema para sa pagtatalaga ng mga karapatan ng gumagamit.
  • Online backup at recovery system kung sakaling mabigo.

Natutugunan ba ng mga solusyong batay sa 1C:Enterprise 8.0 ang mga kinakailangang ito? Walang malinaw na sagot. Sa kabila ng mga makabuluhang pagbabago sa sistema ng kontrol sa pag-access, maraming hindi nalutas na isyu ang nananatili. Depende sa kung paano idinisenyo at na-configure ang system, ang lahat ng mga kinakailangang ito ay maaaring hindi matugunan o matugunan sa isang sapat na lawak para sa isang naibigay na pagpapatupad, gayunpaman, ito ay nagkakahalaga ng pagbibigay pansin (at ito ay isang makabuluhang kahihinatnan ng "kabataan" ng platform ) na upang ganap na maisakatuparan ang mga nakalistang kundisyon ay kailangang ilapat ang tunay na Herculean na pagsisikap.

Ang artikulong ito ay inilaan para sa mga developer at nagpapatupad ng mga solusyon sa 1C:Enterprise platform, pati na rin sa mga system administrator ng mga organisasyon kung saan ginagamit ang 1C:Enterprise, at naglalarawan ng ilang aspeto ng pagbuo at pag-configure ng client-server na bersyon ng system mula sa punto sa pananaw ng organisasyon seguridad ng impormasyon. Ang artikulong ito ay hindi maaaring gamitin bilang kapalit para sa dokumentasyon, ngunit itinuturo lamang ang ilang mga punto na hindi pa naipapakita dito. At, siyempre, alinman sa artikulong ito o lahat ng dokumentasyon ay hindi makakapagpakita sa pagiging kumplikado ng problema ng pagbuo ng isang secure na sistema ng impormasyon, na sa parehong oras ay dapat matugunan ang magkasalungat na mga kinakailangan ng seguridad, pagganap, kaginhawahan at pag-andar.

Pag-uuri at terminolohiya

Ang pangunahing paksa ng pagsasaalang-alang sa artikulo ay mga banta sa impormasyon.

Banta sa impormasyon– ang posibilidad ng isang sitwasyon kung saan babasahin, kokopyahin, babaguhin o haharangan ang data nang walang pahintulot.

At, batay sa kahulugang ito, inuri ng artikulo ang mga banta sa impormasyon tulad ng sumusunod:

  • Hindi awtorisadong pagsira ng data
  • Hindi awtorisadong pagbabago ng data
  • Hindi awtorisadong pagkopya ng data
  • Hindi awtorisadong pagbabasa ng data
  • Unavailability ng data

Ang lahat ng pagbabanta ay nahahati sa sinadya at hindi sinasadya. Tatawag kami ng natanto na pagbabanta sa impormasyon pangyayari. Ang mga tampok ng system ay:

Mga kahinaan- mga tampok na humahantong sa mga insidente Mga hakbang sa proteksyon– mga tampok na humaharang sa posibilidad ng isang insidente

Karaniwan, ang mga kasong iyon lamang ang isinasaalang-alang, na ang posibilidad ay dahil sa paggamit ng 1C: Enterprise 8.0 teknolohikal na platform sa bersyon ng client-server (karagdagan, sa mga kaso kung saan hindi ito sumasalungat sa kahulugan ng simpleng 1C o 1C 8.0) . Tukuyin natin ang mga sumusunod na pangunahing tungkulin kaugnay ng paggamit ng system:

  • Mga operator– mga user na may mga karapatang tingnan at baguhin ang data na limitado ng isang tungkulin ng aplikasyon, ngunit walang mga administratibong function
  • Mga tagapangasiwa ng system– mga user na may mga karapatang pang-administratibo sa system, kabilang ang mga karapatang pang-administratibo sa mga operating system ng application server at MS SQL server, mga karapatang pang-administratibo sa MS SQL, atbp.
  • Mga tagapangasiwa ng seguridad ng impormasyon– mga user kung kanino itinalaga ang ilang partikular na administratibong function sa base ng impormasyon ng 1C (tulad ng pagdaragdag ng mga user, pagsubok at pag-aayos, backup, pag-set up ng solusyon sa application, atbp.)
  • Mga developer ng system– ang mga gumagamit ay bumubuo ng isang solusyon sa aplikasyon. Sa pangkalahatan, maaaring wala silang access sa gumaganang sistema.
  • Mga taong walang direktang access sa system– mga user na hindi pinagkalooban ng mga karapatan sa pag-access sa 1C, ngunit maaaring, sa isang antas o iba pa, makaimpluwensya sa pagpapatakbo ng system (kadalasan lahat ito ay mga user ng parehong domain ng Active Directory kung saan naka-install ang system). Ang kategoryang ito ay pangunahing isinasaalang-alang upang matukoy ang mga potensyal na mapanganib na paksa sa system.
  • Mga awtomatikong administratibong script– mga programa kung saan itinalaga ang ilang mga function, na idinisenyo upang awtomatikong magsagawa ng ilang mga aksyon (halimbawa, pag-import-export ng data)

Dalawang punto ang dapat tandaan dito: una, ang pag-uuri na ito ay masyadong magaspang at hindi isinasaalang-alang ang mga dibisyon sa loob ng bawat grupo - ang gayong dibisyon ay gagawin para sa ilang partikular na mga kaso, at pangalawa, ipinapalagay na ang ibang mga tao ay hindi makakaimpluwensya sa operasyon. ng system, na dapat ibigay sa pamamagitan ng panlabas na 1C.

Ang anumang sistema ng seguridad ay dapat na idinisenyo nang may iniisip na pagiging posible at halaga ng pagmamay-ari. Sa pangkalahatan, kapag bumubuo at nagpapatupad ng isang sistema ng impormasyon, kinakailangan na ang presyo ng pagprotekta sa sistema ay tumutugma sa:

  • ang halaga ng protektadong impormasyon;
  • mga gastos sa paglikha ng isang insidente (sa kaso ng isang sadyang pagbabanta);
  • mga panganib sa pananalapi sa kaso ng isang insidente

Walang kabuluhan at nakakapinsalang ayusin ang isang depensa na mas mahal kaysa sa pagtatasa ng pagiging epektibo nito sa pananalapi. Mayroong ilang mga pamamaraan para sa pagtatasa ng mga panganib ng pagkawala ng impormasyon, ngunit hindi sila tinalakay sa loob ng saklaw ng artikulong ito. Ang isa pang mahalagang aspeto ay ang pagpapanatili ng balanse ng madalas na magkasalungat na mga kinakailangan para sa seguridad ng impormasyon, pagganap ng system, kaginhawahan at kadalian ng pagtatrabaho sa system, bilis ng pag-unlad at pagpapatupad, at iba pang mga kinakailangan para sa mga sistema ng impormasyon ng enterprise.

Mga pangunahing tampok ng mekanismo ng seguridad ng impormasyon ng system

Ang 1C:Enterprise 8.0 ay may dalawang bersyon: file at client-server. Ang bersyon ng file ay hindi maaaring isaalang-alang upang matiyak ang seguridad ng impormasyon ng system para sa mga sumusunod na dahilan:

  • Ang data at configuration ay naka-imbak sa isang file na nababasa at nasusulat ng lahat ng user ng system.
  • Tulad ng ipapakita sa ibaba, ang awtorisasyon ng system ay napakadaling ma-bypass.
  • Ang integridad ng system ay sinisiguro lamang ng kernel ng bahagi ng kliyente.

Sa bersyon ng client-server, ginagamit ang MS SQL Server upang mag-imbak ng impormasyon, na nagbibigay ng:

  • Mas maaasahang imbakan ng data.
  • Paghihiwalay ng mga file mula sa direktang pag-access.
  • Mas advanced na mga mekanismo ng transaksyon at pag-lock.

Sa kabila ng mga makabuluhang pagkakaiba sa pagitan ng file at mga bersyon ng client-server ng system, mayroon silang pinag-isang pamamaraan ng kontrol sa pag-access sa antas ng solusyon sa aplikasyon, na nagbibigay ng mga sumusunod na kakayahan:

  • Awtorisasyon ng user gamit ang password na tinukoy sa 1C.
  • Awtorisasyon ng user batay sa kasalukuyang user ng Windows.
  • Pagtatalaga ng mga tungkulin sa mga user ng system.
  • Nililimitahan ang mga tungkuling pang-administratibo ayon sa tungkulin.
  • Pagtatalaga ng mga magagamit na interface ayon sa mga tungkulin.
  • Paghihigpit sa pag-access sa mga bagay ng metadata ayon sa tungkulin.
  • Paghihigpit sa pag-access sa mga detalye ng bagay ayon sa tungkulin.
  • Paghihigpit sa pag-access sa mga object ng data sa pamamagitan ng mga tungkulin at mga parameter ng session.
  • Paghihigpit sa interactive na pag-access sa data at mga executable na module.
  • Ang ilang mga paghihigpit sa pagpapatupad ng code.

Sa pangkalahatan, ang pamamaraan ng pag-access ng data na ginamit ay medyo pangkaraniwan para sa mga sistema ng impormasyon sa antas na ito. Gayunpaman, kaugnay ng pagpapatupad na ito ng isang three-tier na arkitektura ng client-server, mayroong ilang pangunahing aspeto na humahantong sa medyo malaking bilang ng mga kahinaan:

  1. Ang isang malaking bilang ng mga yugto ng pagproseso ng data, at sa bawat yugto ay maaaring mag-apply ang iba't ibang mga panuntunan para sa pag-access ng mga bagay.

    Ang isang medyo pinasimple na diagram ng mga yugto ng pagproseso ng data na makabuluhan mula sa isang punto ng seguridad ay ipinapakita sa Fig. 1. Pangkalahatang tuntunin para sa 1C ay upang bawasan ang mga paghihigpit habang binababa mo ang pamamaraang ito, samakatuwid, gamit ang isang kahinaan sa isa sa itaas na antas maaaring makagambala sa sistema sa lahat ng antas.

  2. Hindi sapat na itinatag na mga pamamaraan para sa pagsubaybay sa ipinadalang data kapag lumilipat mula sa antas patungo sa antas.

    Sa kasamaang palad, hindi lahat ng panloob na mekanismo ng system ay perpektong na-debug, lalo na para sa mga non-interactive na mekanismo, ang pag-debug nito ay palaging mas labor-intensive sa isang banda, ngunit mas responsable sa kabilang banda. Ang "sakit" na ito ay hindi isang problema lamang sa 1C; ito ay matatagpuan sa maraming produkto ng server mula sa karamihan ng mga vendor. Sa mga nagdaang taon lamang ang pansin sa mga problemang ito ay tumaas nang malaki.

  3. Hindi sapat na mataas na average na kwalipikasyon ng mga developer at system administrator, na minana mula sa nakaraang bersyon.

    Ang mga produkto ng 1C:Enterprise line ay unang nakatuon sa kadalian ng pag-unlad at suporta at sa pagtatrabaho sa maliliit na organisasyon, kaya hindi nakakagulat na sa kasaysayan ay nabuo na ang isang mahalagang bahagi ng "mga developer" ng mga solusyon sa aplikasyon at "mga administrator" ng ang mga system ay walang sapat na kaalaman at kasanayan upang gumana sa isang mas kumplikadong produkto, na bersyon 8.0. Ang problema ay pinalala ng kasanayan na pinagtibay ng mga kumpanya ng franchisee ng pagtuturo ng "sa labanan" sa kapinsalaan ng mga kliyente, nang hindi sistematikong lumalapit sa isyung ito. Kinakailangang magbigay pugay sa kumpanya ng 1C na sa nakalipas na ilang taon ang sitwasyong ito ay unti-unting naitama: ang mga seryosong kumpanya ng franchisee ay nagsimulang kumuha ng mas responsableng diskarte sa problema ng pagpili at pagsasanay ng mga tauhan, ang antas ng suporta sa teknolohiya ng impormasyon mula sa ang kumpanya ng 1C ay tumaas nang malaki, ang mga programa sa sertipikasyon ay lumitaw na naglalayong mataas na antas ng serbisyo; ngunit ang sitwasyon ay hindi maaaring itama kaagad, kaya ang kadahilanan na ito ay dapat isaalang-alang kapag sinusuri ang seguridad ng system.

  4. Ang plataporma ay medyo bata pa.

    Sa mga produktong may katulad na pokus at layunin ng paggamit, isa ito sa mga pinakabatang solusyon. Ang pag-andar ng platform ay higit pa o hindi gaanong naitatag wala pang isang taon ang nakalipas. Kasabay nito, ang bawat paglabas ng platform, simula sa 8.0.10 (nasa release na ito na halos lahat ng kasalukuyang mga kakayahan ng system ay ipinatupad) ay naging mas matatag kaysa sa mga nauna. Ang functionality ng mga karaniwang solusyon sa application ay lumalaki pa rin nang mabilis, bagama't kalahati lamang ng mga kakayahan ng platform ang ginagamit. Siyempre, sa ganitong mga kondisyon maaari nating pag-usapan ang tungkol sa katatagan sa halip na may kondisyon, ngunit sa pangkalahatan ay dapat itong kilalanin na sa maraming aspeto ang mga solusyon sa 1C 8.0 platform ay makabuluhang nauuna sa pag-andar at pagganap (at madalas sa katatagan) ng mga katulad na solusyon sa 1C 7.7 platform.

Kaya, ang system (at, marahil, isang karaniwang solusyon sa aplikasyon) ay na-deploy sa enterprise at naka-install sa mga computer. Una sa lahat, kinakailangan upang lumikha ng isang kapaligiran kung saan ang pag-set up ng seguridad ng 1C ay may katuturan, at para dito dapat itong i-configure sa paraang ang pagpapalagay na ang seguridad ng system ay makabuluhang apektado ng mga setting ng system ay natutupad.

Sundin ang mga pangkalahatang tuntunin para sa pag-set up ng seguridad.

Hindi maaaring pag-usapan ang anumang seguridad ng impormasyon ng isang sistema kung ang mga pangunahing prinsipyo ng paglikha ng mga secure na sistema ay hindi sinusunod. Siguraduhing tiyakin na hindi bababa sa mga sumusunod na kundisyon ay natutugunan:

  • Ang pag-access sa mga server ay pisikal na limitado at ang kanilang walang patid na operasyon ay sinisiguro:
    • ang kagamitan ng server ay nakakatugon sa mga kinakailangan sa pagiging maaasahan, ang pagpapalit ng mga sira na kagamitan sa server ay naayos, para sa partikular na mga kritikal na lugar, ang mga scheme na may duplikasyon ng hardware ay ginagamit (RAID, kapangyarihan mula sa maraming mga mapagkukunan, maraming mga channel ng komunikasyon, atbp.);
    • ang mga server ay matatagpuan sa isang naka-lock na silid, at ang silid na ito ay binuksan lamang para sa tagal ng trabaho na hindi maisagawa nang malayuan;
    • Isa o dalawang tao lamang ang may karapatang buksan ang silid ng server, kung sakaling may emergency, isang sistema ng pag-abiso para sa mga responsableng tao ang binuo;
    • Tinitiyak ang walang patid na supply ng kuryente sa mga server
    • ang normal na klimatiko na mga kondisyon ng pagpapatakbo ng kagamitan ay natiyak;
    • mayroong alarma sa sunog sa silid ng server, walang panganib ng pagbaha (lalo na para sa una at huling mga palapag);
  • Ang mga setting ng network at imprastraktura ng impormasyon ng negosyo ay nakumpleto nang tama:
    • Ang mga firewall ay naka-install at naka-configure sa lahat ng mga server;
    • lahat ng mga user at computer ay awtorisado sa network, ang mga password ay sapat na kumplikado na hindi sila mahulaan;
    • ang mga operator ng system ay may sapat na mga karapatan upang gumana nang normal dito, ngunit walang mga karapatan sa mga aksyong administratibo;
    • ang mga tool na anti-virus ay naka-install at pinagana sa lahat ng mga computer sa network;
    • Ito ay kanais-nais na ang mga gumagamit (maliban sa mga administrator ng network) ay walang mga karapatang pang-administratibo sa mga workstation ng kliyente;
    • ang pag-access sa Internet at ang naaalis na storage media ay dapat na regulahin at limitado;
    • dapat i-configure ang system auditing ng mga kaganapang panseguridad;
  • Ang mga pangunahing isyu sa organisasyon ay nalutas na:
    • ang mga gumagamit ay may sapat na mga kwalipikasyon upang gumana sa 1C at hardware;
    • ang mga gumagamit ay inaabisuhan ng responsibilidad para sa paglabag sa mga patakaran sa pagpapatakbo;
    • ang mga taong responsable sa pananalapi ay itinalaga para sa bawat materyal na elemento ng sistema ng impormasyon;
    • lahat ng mga yunit ng system ay selyadong at sarado;
    • Bigyang-pansin ang pagtuturo at pangangasiwa sa mga tagapaglinis, mga manggagawa sa konstruksiyon at mga elektrisyan. Ang mga taong ito ay maaaring, sa pamamagitan ng kapabayaan, ay magdulot ng pinsala na hindi maihahambing sa sinadyang pinsalang dulot ng isang walang prinsipyong gumagamit ng system.

Pansin! Ang listahang ito ay hindi kumpleto, ngunit inilalarawan lamang kung ano ang madalas na hindi nakuha kapag nag-deploy ng anumang medyo kumplikado at mahal na sistema ng impormasyon!

  • MS SQL Server, application server at bahagi ng kliyente ay tumatakbo sa iba't ibang mga computer, ang mga application ng server ay tumatakbo sa ilalim ng mga karapatan ng mga espesyal na nilikha na mga gumagamit ng Windows;
  • Para sa MS SQL Server
    • nakatakda ang mixed authorization mode
    • Ang mga gumagamit ng MS SQL na kasama sa tungkulin ng serveradmin ay hindi nakikilahok sa gawaing 1C,
    • para sa bawat IB 1C isang hiwalay na user ng MS SQL ang nilikha na walang privileged access sa server,
    • Ang gumagamit ng MS SQL ng isang IS ay walang access sa ibang IS;
  • Ang mga user ay walang direktang access sa application server at MS SQL server file
  • Ang mga workstation ng operator ay nilagyan ng Windows 2000/XP (hindi Windows 95/98/Me)

Huwag pabayaan ang mga rekomendasyon ng mga developer ng system at pagbabasa ng dokumentasyon. Ang mga mahahalagang materyales sa pag-set up ng system ay nai-publish sa mga disk ng ITS sa seksyong "Mga Rekomendasyon sa Pamamaraan". Bigyang-pansin ang mga sumusunod na artikulo:

  1. Mga tampok ng mga application na gumagana sa 1C:Enterprise server
  2. Paglalagay ng data 1C:Enterprise 8.0
  3. I-update ang 1C:Enterprise 8.0 ng mga user Microsoft Windows walang mga karapatan ng administrator
  4. Pag-edit sa listahan ng user sa ngalan ng isang user na walang mga karapatang pang-administratibo
  5. Pag-configure ng Windows XP SP2 Firewall Settings para Patakbuhin ang SQL Server 2000 at SQL Server Desktop Engine (MSDE)
  6. Pag-configure ng COM+ Windows XP SP2 na mga parameter para sa pagpapatakbo ng 1C:Enterprise 8.0 server
  7. Pag-configure ng mga setting ng firewall ng Windows XP SP2 para sa 1C:Enterprise 8.0 server
  8. Pag-configure ng mga setting ng firewall ng Windows XP SP2 para sa HASP License Manager
  9. Paglikha ng Backup base ng impormasyon gamit ang SQL Server 2000
  10. Mga isyu sa pag-install at pagsasaayos 1C:Enterprise 8.0 sa bersyon ng "client-server."(isa sa pinakamahalagang artikulo)
  11. Mga kakaiba Mga setting ng Windows Server 2003 kapag nag-i-install ng 1C:Enterprise 8.0 server
  12. Kinokontrol ang pag-access ng user sa base ng impormasyon sa bersyon ng client-server(isa sa pinakamahalagang artikulo)
  13. Server 1C: Enterprise at SQL server
  14. Detalyadong pamamaraan ng pag-install para sa 1C:Enterprise 8.0 sa bersyon ng "client-server".(isa sa pinakamahalagang artikulo)
  15. Gamit ang built-in na wika sa 1C:Enterprise server

Ngunit kapag nagbabasa ng dokumentasyon, maging mapanuri sa impormasyong natanggap, halimbawa, ang artikulong "Mga isyu sa pag-install at pag-configure ng 1C: Enterprise 8.0 sa bersyon ng client-server" ay hindi tumpak na naglalarawan ng mga karapatan na kinakailangan para sa user na USER1CV8SERVER. Magkakaroon ng mga link sa listahan sa ibaba, halimbawa [ITS1] ay nangangahulugang ang artikulong "Mga tampok ng mga application na gumagana sa 1C:Enterprise server". Ang lahat ng mga link sa mga artikulo ay ibinibigay sa pinakabagong isyu ng ITS sa oras ng pagsulat (Enero 2006)

Gumamit ng mga kakayahan sa awtorisasyon kasama ng awtorisasyon ng Windows para sa mga user

Sa dalawang posibleng mode ng awtorisasyon ng user: built-in na 1C at pinagsama sa awtorisasyon ng Windows OS, kung maaari, dapat kang pumili ng pinagsamang awtorisasyon. Papayagan nito ang mga user na hindi malito sa maraming password kapag nagtatrabaho, ngunit hindi nito babawasan ang antas ng seguridad ng system. Gayunpaman, kahit na para sa mga gumagamit na gumagamit lamang ng pahintulot ng Windows, lubos na ipinapayong magtakda ng isang password kapag ginagawa ito, at pagkatapos lamang na huwag paganahin ang 1C na awtorisasyon para sa user na ito. Upang matiyak ang pagbawi ng system kung sakaling masira ang istraktura ng Active Directory, kinakailangang mag-iwan ng kahit isang user na maaaring mag-log in sa system gamit ang 1C authorization.

Kapag gumagawa ng mga tungkulin sa solusyon sa aplikasyon, huwag magdagdag ng mga karapatan "na nakalaan"

Dapat ipakita ng bawat tungkulin ng solusyon sa aplikasyon ang minimum na kinakailangang hanay ng mga karapatan upang maisagawa ang mga pagkilos na tinukoy ng tungkuling ito. Gayunpaman, ang ilang mga tungkulin ay hindi maaaring gamitin nang nakapag-iisa. Halimbawa, para sa interactive na paglulunsad panlabas na paggamot Maaari kang lumikha ng isang hiwalay na tungkulin at idagdag ito sa lahat ng mga user na kailangang gumamit ng panlabas na pagproseso.

Regular na suriin ang mga log at mga protocol ng pagpapatakbo ng system

Kung maaari, ayusin at i-automate ang pagtingin sa mga log at mga protocol ng pagpapatakbo ng system. Sa wastong pagsasaayos at regular na pagsusuri ng mga log (pag-filter lamang ng mahahalagang kaganapan), ang mga hindi awtorisadong aksyon ay maaaring matukoy nang maaga o mapipigilan pa sa yugto ng paghahanda.

Ang ilang mga tampok ng bersyon ng client-server

Inilalarawan ng seksyong ito ang ilan sa mga operating feature ng opsyon sa client-server at ang epekto nito sa seguridad. Para sa higit na kadalian ng pagbabasa, ang mga sumusunod na notasyon ay ginagamit:

Pansin! paglalarawan ng kahinaan

Pag-iimbak ng impormasyon na kumokontrol sa pag-access sa system

Pag-iimbak ng listahan ng mga gumagamit ng seguridad ng impormasyon

Ang lahat ng impormasyon tungkol sa listahan ng mga gumagamit ng seguridad ng impormasyong ito at ang mga tungkuling magagamit nila dito ay nakaimbak sa talahanayan ng Params sa database ng MS SQL (tingnan ang [ITS2]). Sa pagtingin sa istraktura at mga nilalaman ng talahanayang ito, nagiging malinaw na ang lahat ng impormasyon ng user ay naka-imbak sa isang talaan na may halaga ng field ng FileName na "users.usr".

Dahil ipinapalagay namin na ang mga gumagamit ay walang access sa database ng MS SQL, ang katotohanang ito mismo ay hindi magagamit ng isang umaatake, gayunpaman, kung posible na magsagawa ng code sa MS SQL, ito ay "magbubukas ng pinto" upang makakuha ng anumang(! ) access mula sa 1C . Ang parehong mekanismo (na may mga menor de edad na pagbabago) ay maaari ding gamitin sa bersyon ng file ng system, na kung saan, isinasaalang-alang ang mga tampok ng bersyon ng file, ganap na hindi kasama ang pagiging angkop nito sa pagbuo ng mga secure na system.

Rekomendasyon: Sa ngayon, walang paraan upang ganap na maprotektahan ang application mula sa mga naturang pagbabago, maliban sa paggamit ng mga trigger sa antas ng MS SQL Server, na, sa kabilang banda, ay maaaring magdulot ng mga problema kapag ina-update ang bersyon ng platform o binabago ang listahan ng mga gumagamit. Upang subaybayan ang mga naturang pagbabago, maaari mong gamitin ang 1C log (pagbibigay-pansin sa mga "kahina-hinalang" pag-login sa configurator mode nang hindi tinukoy ang user) o panatilihing patuloy na tumatakbo ang SQL Profiler (na magkakaroon ng lubhang negatibong epekto sa pagganap ng system) o i-configure ang Mga Alerto mekanismo (malamang na magkasama gamit ang mga trigger)

Pag-iimbak ng impormasyon tungkol sa listahan ng IS sa server

Para sa bawat 1C application server, ang impormasyon ay naka-imbak tungkol sa listahan ng mga database ng MS SQL na konektado dito. Ang bawat infobase ay gumagamit ng sarili nitong connection string mula sa application server at MS SQL server para gumana. Ang impormasyon tungkol sa mga infobase na nakarehistro sa server ng application, kasama ang mga string ng koneksyon, ay naka-imbak sa file na srvrib.lst, na matatagpuan sa server sa direktoryo<Общие данные приложений>/1C/1Cv8 (halimbawa, C:/Mga Dokumento at Setting/Lahat ng User/Data ng Application/1C/1Cv8/srvrib.lst). Para sa bawat sistema ng seguridad ng impormasyon, isang kumpletong string ng koneksyon ang nakaimbak, kasama ang password ng user ng MS SQL kapag gumagamit ng pinaghalong modelo ng awtorisasyon ng MS SQL. Ang pagkakaroon ng file na ito ay ginagawang posible na matakot sa hindi awtorisadong pag-access sa database ng MS SQL, at kung, salungat sa mga rekomendasyon, ang isang may pribilehiyong gumagamit (halimbawa, "sa") ay ginagamit upang ma-access ang hindi bababa sa isang database, pagkatapos ay sa Bilang karagdagan sa banta sa isang seguridad ng impormasyon, mayroong banta sa buong sistema gamit ang MS SQL.

Nakatutuwang tandaan na ang paggamit ng halo-halong awtorisasyon at awtorisasyon ng Windows sa isang MS SQL server ay humahantong sa iba't ibang uri ng mga problema kapag nakakakuha ng access sa isang naibigay na file. Kaya ang mga pangunahing negatibong katangian ng awtorisasyon ng Windows ay:

  • Ang pagpapatakbo ng lahat ng seguridad ng impormasyon sa application server at sa MS SQL server sa ilalim ng isang hanay ng mga karapatan (malamang na kalabisan)
  • Mula sa proseso ng 1C application server (o sa pangkalahatan mula sa user na USER1CV8SERVER o katumbas nito) nang hindi tinukoy ang isang password, madali kang makakakonekta sa anumang seguridad ng impormasyon nang hindi tumutukoy ng isang password

Sa kabilang banda, maaaring mas mahirap para sa isang umaatake na magsagawa ng arbitrary na code mula sa konteksto ng user na USER1CV8SERVER kaysa makuha ang tinukoy na file. Sa pamamagitan ng paraan, ang pagkakaroon ng naturang file ay isa pang argumento para sa pamamahagi ng mga function ng server sa iba't ibang mga computer.

Rekomendasyon: Ang srvrib.lst file ay dapat lang ma-access ng proseso ng server. Tiyaking i-configure ang pag-audit upang baguhin ang file na ito.

Sa kasamaang palad, bilang default ang file na ito ay halos hindi protektado mula sa pagbabasa, na dapat isaalang-alang kapag nagde-deploy ng system. Ang perpektong opsyon ay para sa application server na pigilan ang pagbabasa at pagsulat ng file na ito habang tumatakbo (kabilang ang pagbabasa at pagsusulat ng mga koneksyon ng user na tumatakbo sa server na ito).

Kakulangan ng awtorisasyon kapag lumilikha ng seguridad ng impormasyon sa server

Pansin! Ang kakulangan ng error sa pahintulot ay naayos sa release 8.0.14 ng 1C:Enterprise platform. Sa release na ito, lumitaw ang konsepto ng "1C:Enterprise Server Administrator", ngunit hangga't ang listahan ng mga administrator ay tinukoy sa server, ang system ay gumagana tulad ng inilarawan sa ibaba, kaya huwag kalimutan ang tungkol sa posibleng tampok na ito.

Marahil ang pinakamalaking kahinaan mula sa seksyong ito ay ang kakayahang halos walang limitasyong magdagdag ng seguridad ng impormasyon sa server ng aplikasyon, bilang isang resulta kung saan ang sinumang gumagamit na nakakuha ng access sa isang koneksyon sa server ng aplikasyon ay awtomatikong nakakakuha ng kakayahang magpatakbo ng arbitrary code sa server ng aplikasyon. . Tingnan natin ito sa isang halimbawa.

Dapat na mai-install ang system tulad ng sumusunod

  • MS SQL Server 2000 (halimbawa, pangalan ng network SRV1)
  • Server 1C: Enterprise 8.0 (pangalan ng network SRV2)
  • Bahagi 1C ng kliyente: Enterprise 8.0 (pangalan ng network WS)

Ipinapalagay na ang user (mula rito ay tinutukoy bilang USER) na nagtatrabaho sa WS ay may hindi bababa sa minimal na access sa isa sa mga information security system na nakarehistro sa SRV2, ngunit walang privileged access sa SRV1 at SRV2. Sa pangkalahatan, ang kumbinasyon ng mga function ng nakalistang mga computer ay hindi nakakaapekto sa sitwasyon. Na-configure ang system na isinasaalang-alang ang mga rekomendasyon sa dokumentasyon at sa mga disk ng ITS. Ang sitwasyon ay ipinapakita sa Fig. 2.


  • i-configure ang seguridad ng COM+ sa server ng aplikasyon upang ang mga gumagamit lamang ng 1C ang may karapatang kumonekta sa proseso ng server ng aplikasyon (higit pang mga detalye [ITS12]);
  • ang srvrib.lst file ay dapat na read-only para sa user na USER1CV8SERVER (upang magdagdag ng bagong seguridad ng impormasyon sa server, pansamantalang payagan ang pagsusulat);
  • Upang kumonekta sa MS SQL, gamitin lamang ang TCP/IP protocol, sa kasong ito maaari mong:
    • paghigpitan ang mga koneksyon gamit ang isang firewall;
    • i-configure ang paggamit ng isang hindi karaniwang TCP port, na magpapalubha sa koneksyon ng "mga tagalabas" IB 1C;
    • gumamit ng encryption ng ipinadalang data sa pagitan ng application server at ng SQL server;
  • i-configure ang server firewall upang ang paggamit ng mga third-party na MS SQL server ay imposible;
  • gumamit ng mga tool sa seguridad ng intranet upang ibukod ang posibilidad ng isang hindi awtorisadong computer na lumitaw sa lokal na network (IPSec, mga patakaran sa seguridad ng grupo, mga firewall, atbp.);
  • Huwag bigyan ang user ng USER1CV8SERVER ng mga karapatang pang-administratibo sa application server sa anumang sitwasyon.

Paggamit ng code na tumatakbo sa server

Kapag ginagamit ang bersyon ng client-server ng 1C, maaaring ipamahagi ng developer ang code execution sa pagitan ng client at application server. Upang ang code (pamamaraan o pag-andar) ay maisakatuparan lamang sa server, kinakailangan na ilagay ito sa isang pangkalahatang module kung saan nakatakda ang "Server" na pag-aari at, sa kaso kung kailan pinapayagan ang pagpapatupad ng module hindi lamang sa ang server, ilagay ang code sa pinaghihigpitang seksyon na “#If Server ":

#Kung Server Pagkatapos
Function OnServer(Param1, Param2 = 0) Export // Ang function na ito, sa kabila ng pagiging simple nito, ay isinasagawa sa server
Param1 = Param1 + 12;
Ibalik ang Param1;
EndFunction
#Tapusin kung

Kapag gumagamit ng code na tumatakbo sa server, dapat mong isaalang-alang na:

  • tumatakbo ang code sa mga karapatan ng USER1CV8SERVER sa server ng application (magagamit ang mga bagay sa COM at mga file ng server);
  • ang lahat ng mga session ng user ay isinasagawa ng isang pagkakataon ng serbisyo, kaya, halimbawa, ang isang stack overflow sa server ay magsasanhi sa lahat ng aktibong user na madiskonekta;
  • Mahirap ang pag-debug ng mga module ng server (halimbawa, hindi ka makakapagtakda ng breakpoint sa debugger), ngunit dapat gawin;
  • ang paglilipat ng kontrol mula sa kliyente patungo sa server ng aplikasyon at pabalik ay maaaring mangailangan ng mga makabuluhang mapagkukunan na may malalaking volume ng inilipat na mga parameter;
  • paggamit ng mga interactive na tool (mga form, mga dokumento ng spreadsheet, mga dialog box), ang mga panlabas na ulat at pagproseso sa code sa server ng application ay imposible;
  • ang paggamit ng mga pandaigdigang variable (mga variable ng application module na ipinahayag na may indikasyon na "I-export") ay hindi pinapayagan;

Para sa higit pang mga detalye, tingnan ang [ITS15] at iba pang mga artikulo ng ITS.

Ang server ng application ay dapat magkaroon ng mga espesyal na kinakailangan sa pagiging maaasahan. Sa isang maayos na binuo na client-server system, ang mga sumusunod na kundisyon ay dapat matugunan:

  • walang mga aksyon ng aplikasyon ng kliyente ang dapat makagambala sa pagpapatakbo ng server (maliban sa mga kasong administratibo);
  • hindi maaaring isagawa ng server ang program code na natanggap mula sa kliyente;
  • ang mga mapagkukunan ay dapat na ipamahagi nang "patas" sa kabuuan mga koneksyon ng kliyente, tinitiyak ang pagkakaroon ng server anuman ang kasalukuyang pagkarga;
  • sa kawalan ng pagharang ng data, ang mga koneksyon ng kliyente ay hindi dapat makaapekto sa trabaho ng bawat isa;
  • wala sa server user interface, ngunit ang mga tool sa pagsubaybay at pag-log ay dapat na binuo;

Sa pangkalahatan, ang 1C system ay binuo sa paraang mas malapit sa mga kinakailangang ito (halimbawa, imposibleng pilitin ang panlabas na pagproseso na maisagawa sa server), ngunit maraming hindi kasiya-siyang tampok ang umiiral pa rin, samakatuwid:

Rekomendasyon: Kapag bumubuo ng isang runtime server, inirerekumenda na sumunod sa prinsipyo ng minimal na interface. Yung. ang bilang ng mga entry sa mga module ng server mula sa application ng kliyente ay dapat na napakalimitado, at ang mga parameter ay dapat na mahigpit na kinokontrol. Rekomendasyon: Kapag tumatanggap ng mga parameter ng mga pamamaraan at pag-andar sa server, kinakailangan upang patunayan ang mga parameter (suriin na ang mga parameter ay tumutugma sa inaasahang uri at hanay ng mga halaga). Hindi ito ginagawa sa mga karaniwang solusyon, ngunit lubos na kanais-nais na ipakilala ang mandatoryong pagpapatunay sa iyong sariling mga pag-unlad. Rekomendasyon: Kapag bumubuo ng teksto ng kahilingan (at lalo na ang Run command parameter) sa gilid ng server, huwag gumamit ng mga string na natanggap mula sa application ng kliyente.

Ang isang pangkalahatang rekomendasyon ay ang maging pamilyar sa mga prinsipyo ng secure na gusali web-database application at gumagana sa mga katulad na prinsipyo. Ang mga pagkakatulad ay talagang malaki: una, tulad ng isang web application, ang application server ay isang intermediate layer sa pagitan ng database at ng user interface (ang pangunahing pagkakaiba ay ang web server ay bumubuo ng user interface); pangalawa, mula sa isang punto ng seguridad, hindi mo mapagkakatiwalaan ang data na natanggap mula sa kliyente, dahil posibleng maglunsad ng mga panlabas na ulat at pagproseso.

Pagpasa ng mga parameter

Ang pagpasa ng mga parameter sa isang function (procedure) na isinagawa sa server ay medyo maselan na isyu. Pangunahing ito ay dahil sa pangangailangang ilipat ang mga ito sa pagitan ng server ng aplikasyon at mga proseso ng kliyente. Kapag ang kontrol ay pumasa mula sa bahagi ng kliyente patungo sa bahagi ng server, ang lahat ng ipinadala na mga parameter ay serialized, inilipat sa server, kung saan sila ay "na-unpack" at ginagamit. Kapag lumipat mula sa bahagi ng server patungo sa panig ng kliyente, ang proseso ay binabaligtad. Dapat tandaan dito na ang scheme na ito ay wastong humahawak ng mga passing parameter sa pamamagitan ng sanggunian at sa pamamagitan ng halaga. Kapag nagpapasa ng mga parameter, nalalapat ang mga sumusunod na paghihigpit:

  • Tanging ang mga hindi nababagong halaga (i.e., na ang mga halaga ay hindi mababago) ang maaaring ilipat sa pagitan ng kliyente at ng server (sa parehong direksyon): mga primitive na uri, mga sanggunian, mga unibersal na koleksyon, mga halaga ng enumeration ng system, imbakan ng halaga. Kung susubukan mong ipasa ang ibang bagay, nag-crash ang application ng kliyente (kahit na sinubukan ng server na magpasa ng maling parameter).
  • Hindi inirerekomenda na maglipat ng malaking halaga ng data kapag nagpapasa ng mga parameter (halimbawa, mga string na higit sa 1 milyong character), maaari itong negatibong makaapekto sa pagganap ng server.
  • Hindi ka maaaring magpasa ng mga parameter na naglalaman ng cyclic reference, mula sa server papunta sa client at pabalik. Kung susubukan mong ipasa ang naturang parameter, nag-crash ang application ng kliyente (kahit na sinubukan ng server na ipasa ang maling parameter).
  • Hindi inirerekomenda na maglipat ng napakakomplikadong mga koleksyon ng data. Kapag sinubukan mong ipasa ang isang parameter na may napakalaking antas ng nesting, nag-crash ang server (! ).

Pansin! Ang pinaka-nakakainis na tampok sa ngayon ay marahil ang error sa pagpasa ng mga kumplikadong koleksyon ng mga halaga. Kaya, halimbawa, ang code: Nesting Level = 1250;
M = Bagong Array;
PassedParameter = M;
Para sa Account = 1 Ayon sa Antas ng Nesting Cycle
MVInt = Bagong Array;
M.Add(MVInt);
M = MVint;
EndCycle;
ServerFunction(PassedParameter);

Humahantong sa isang emergency stop ng server na may pagdiskonekta ng lahat ng mga user, at ito ay nangyayari bago mailipat ang kontrol sa code sa built-in na wika.

Paggamit ng mga hindi ligtas na function sa gilid ng server.

Hindi lahat ng mga built-in na tool sa wika ay maaaring gamitin sa code na naisakatuparan sa application server, ngunit kahit na sa mga magagamit na tool ay may maraming "problema" na mga konstruksyon na maaaring halos uriin bilang mga sumusunod:

  • may kakayahang magbigay ng kakayahang mag-execute ng code na wala sa configuration ("Code Execution" group)
  • may kakayahang magbigay sa application ng kliyente ng impormasyon tungkol sa file at operating system user o magsagawa ng mga pagkilos na hindi nauugnay sa pagtatrabaho sa data (“Paglabag sa mga karapatan”)
  • may kakayahang magdulot ng pag-crash ng server o paggamit ng napakalaking mapagkukunan (pangkat na "Pag-crash ng server")
  • may kakayahang magdulot ng pagkabigo ng kliyente (pangkat ng pagkabigo ng kliyente) - hindi isinasaalang-alang ang ganitong uri. Halimbawa: pagpasa ng nababagong halaga sa server.
  • mga error sa programming algorithm (walang katapusang mga loop, walang limitasyong recursion, atbp.) (“Mga error sa programming”)

Ang mga pangunahing problemadong disenyo na kilala sa akin (na may mga halimbawa) ay nakalista sa ibaba:

Isagawa ang Pamamaraan(<Строка>)

Pagpapatupad ng code. Binibigyang-daan kang magsagawa ng isang piraso ng code na ipinapasa dito bilang isang halaga ng string. Kapag ginamit sa server, dapat mong tiyakin na ang data na natanggap mula sa kliyente ay hindi ginagamit bilang isang parameter. Halimbawa, hindi pinapayagan ang sumusunod na paggamit:

#Kung Server Pagkatapos
ProcedureOnServer(Param1) Export
Ipatupad(Param1);
Katapusan ng Pamamaraan
#Tapusin kung

I-type ang "COMObject" (constructor New COMObject(<Имя>, <Имя сервера>))

Lumilikha ng panlabas na application COM object na may mga karapatan ng USER1CV8SERVER sa application server (o iba pang tinukoy na computer). Kapag ginamit sa isang server, tiyaking hindi naipasa ang mga parameter mula sa application ng kliyente. Gayunpaman, sa panig ng server, epektibong gamitin ang feature na ito kapag nag-i-import/nag-e-export, nagpapadala ng data sa Internet, nagpapatupad ng mga hindi karaniwang function, atbp.

Function na GetCOMObject(<Имя файла>, <Имя класса COM>)
Paglabag sa mga karapatan at pagpapatupad ng code. Katulad ng nauna, ang pagkuha lamang ng COM object na naaayon sa file.
Mga pamamaraan at function ComputerName(), TemporaryFileDirectory(), ProgramDirectory(), WindowsUsers()
Paglabag sa mga karapatan. Sa pamamagitan ng pagpapatupad ng mga ito sa server, pinapayagan ka nitong malaman ang mga detalye ng organisasyon ng subsystem ng server. Kapag ginamit sa isang server, siguraduhin na ang data ay maaaring hindi inilipat sa kliyente o hindi naa-access ng mga operator nang walang naaangkop na pahintulot. Bigyang-pansin ang katotohanan na ang data ay maaaring maipasa pabalik sa isang parameter na ipinasa sa pamamagitan ng sanggunian.
Mga pamamaraan at function para sa pagtatrabaho sa mga file (CopyFile, FindFiles, MergeFiles at marami pang iba), pati na rin ang mga uri ng File.

Paglabag sa mga karapatan. Pinapayagan nila, sa pamamagitan ng pagsasagawa ng mga ito sa server, upang makakuha ng nakabahaging access sa mga lokal (at matatagpuan sa network) na mga file na naa-access sa ilalim ng mga karapatan ng user na USER1CV8SERVER. Kung ginamit nang sinasadya, posible na epektibong ipatupad ang mga gawain tulad ng pag-import/pag-export ng data sa server.

Tiyaking suriin ang iyong mga karapatan ng gumagamit ng 1C bago gamitin ang mga function na ito. Upang suriin ang mga karapatan ng gumagamit, maaari mong gamitin ang sumusunod na konstruksyon sa module ng server:

#Kung Server Pagkatapos
Procedure PerformWorkWithFile() Export
RoleAdministrator = Metadata.Role.Administrator;
User = SessionParameters.CurrentUser;
Kung User.Roles.Contains(RoleAdministrator) Pagkatapos
//Ang code para sa pagtatrabaho sa mga file ay pinaandar dito
tapusin kung;
#Tapusin kung

Siguraduhing suriin ang mga parameter kung gagamitin mo ang mga pamamaraan at pag-andar na ito, kung hindi man ay may panganib na hindi sinasadya o sadyang magdulot ng hindi malulunasan na pinsala sa 1C application server, halimbawa, kapag isinasagawa ang sumusunod na code sa server:

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

Matapos isagawa ang naturang code sa server, kung ang user na USER1CV8SERVER ay may mga karapatan na baguhin ito, tulad ng inilarawan sa itaas, at pagkatapos i-restart ang proseso ng server (bilang default, 3 minuto pagkatapos lumabas ang lahat ng mga user), isang MALAKING tanong ang lilitaw tungkol sa pagsisimula ng server . Ngunit posible ring ganap na tanggalin ang mga file...

Mga uri ng "XBase", "BinaryData", "XML Reader", "XML Writer", "XSL Transformation", "ZipFile Writer", "ZipFile Reader", "Text Reader", "Text Writer"
Paglabag sa mga karapatan. Pinapayagan nila, sa pamamagitan ng pagsasagawa ng mga ito sa server, ang pag-access sa mga lokal (at matatagpuan sa network) na mga file ng ilang partikular na uri at basahin/isulat ang mga ito sa ilalim ng mga karapatan ng gumagamit USER1CV8SERVER. Kung ginamit nang may kamalayan, posibleng epektibong ipatupad ang mga gawain tulad ng pag-import/pag-export ng data sa server, pag-log sa operasyon ng ilang function, at paglutas ng mga gawaing pang-administratibo. Sa pangkalahatan, ang mga rekomendasyon ay tumutugma sa nakaraang talata, ngunit dapat mong isaalang-alang ang posibilidad ng paglilipat ng data mula sa mga file na ito (ngunit hindi mga bagay ng lahat ng mga uri na ito) sa pagitan ng mga bahagi ng kliyente at server.
I-type ang "SystemInformation"
Paglabag sa mga karapatan. Binibigyang-daan kang makakuha ng data tungkol sa server ng application kung sakaling magkaroon ng maling paggamit at paglilipat ng data sa bahagi ng kliyente ng application. Maipapayo na limitahan ang karapatang gamitin kapag gumagamit.
Mga uri ng "InternetConnection", "InternetMail", "InternetProxy", "HTTPConnection", "FTPConnection"

Paglabag sa mga karapatan. Kapag ginamit sa isang server, kumokonekta ito sa isang malayuang PC mula sa isang server ng application sa ilalim ng mga karapatang USER1CV8SERVER. Mga Rekomendasyon:

  • Kontrol ng mga parameter kapag tumatawag ng mga pamamaraan.
  • Kontrol ng mga karapatan ng gumagamit ng 1C.
  • Matinding paghihigpit sa mga karapatan ng user na USER1CV8SERVER na ma-access ang network.
  • Tamang pagse-set up ng firewall sa 1C application server.

Kapag ginamit nang tama, ito ay maginhawa upang ayusin, halimbawa, pagpapadala ng mga email mula sa isang server ng application.

Mga uri ng "InformationBaseUserManager", "InformationBaseUser"

Paglabag sa mga karapatan. Kung ginamit nang hindi tama (sa isang may pribilehiyong module), posibleng magdagdag ng mga user o baguhin ang mga parameter ng awtorisasyon ng mga umiiral nang user.

Format ng Function

Pag-crash ng server. Oo! Ang tila hindi nakakapinsalang function na ito, kung ang mga parameter nito ay hindi kinokontrol at naisakatuparan sa server, ay maaaring maging sanhi ng pag-crash ng application ng server. Ang error ay nangyayari kapag nag-format ng mga numero at gumagamit ng mode para sa pagpapakita ng mga nangungunang zero at isang malaking bilang ng mga character, halimbawa

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

Umaasa ako na ang error na ito ay maitama sa susunod na mga paglabas ng platform, ngunit pansamantala, sa lahat ng mga tawag sa function na ito na maaaring isagawa sa server, suriin ang mga parameter ng tawag.

Mga pamamaraan at pag-andar para sa pag-save ng mga halaga (ValueInRowInt, ValueInFile)
Pag-crash ng server. Hindi pinangangasiwaan ng mga function na ito ang mga pabilog na sanggunian sa mga koleksyon o napakalalim na pugad, kaya maaaring mag-crash ang mga ito sa ilang napakaespesyal na kaso.

Mga error sa hangganan at mga espesyal na halaga ng parameter sa mga function. Kontrol sa pagpapatupad.

Ang isa sa mga problema na maaari mong makaharap kapag gumagamit ng isang server ay ang mataas na "responsibilidad" ng mga function ng server (ang posibilidad ng pag-crash ng buong application ng server dahil sa isang error sa isang koneksyon at ang paggamit ng isang "resource space" para sa lahat ng mga koneksyon) . Samakatuwid ang pangangailangan na kontrolin ang pangunahing mga parameter ng runtime:

  • Para sa mga built-in na function ng wika, suriin ang kanilang mga parameter ng paglunsad (isang magandang halimbawa ay ang function na "Format")
  • Kapag gumagamit ng mga loop, tiyaking nasiyahan ang kondisyon ng paglabas ng loop. Kung ang loop ay potensyal na walang katapusan, artipisyal na limitahan ang bilang ng mga pag-ulit: MaximumIterationCounterValue = 1000000;
    Counter ng Pag-ulit = 1;
    paalam
    FunctionWhichMayNotReturnFalseValue()
    AT (Bilang ng Pag-ulit<МаксимальноеЗначениеСчетчикаИтераций) Цикл

    //.... Katawan ng loop
    Iteration Counter = Iteration Counter + 1;
    EndCycle;
    Kung Iteration Counter>MaximumValue Ng Iteration Counter Pagkatapos
    //.... hawakan ang kaganapan ng isang labis na mahabang pagpapatupad ng loop
    tapusin kung;

  • Kapag gumagamit ng recursion, limitahan ang maximum na antas ng nesting.
  • Kapag bumubuo at nagsasagawa ng mga query, subukang pigilan ang napakahabang pagpili at pagpili ng malaking halaga ng impormasyon (halimbawa, kapag ginagamit ang kondisyong "IN HIERARCHY", huwag gumamit ng walang laman na halaga)
  • Kapag nagdidisenyo ng base ng impormasyon, magbigay ng sapat na malaking reserba ng bit depth para sa mga numero (kung hindi man, ang pagdaragdag at pagpaparami ay magiging non-commutative at non-associative, na nagpapahirap sa pag-debug)
  • Sa mga executable na query, suriin ang operation logic para sa pagkakaroon ng NULL values ​​at ang tamang operasyon ng query condition at expression gamit ang NULL.
  • Kapag gumagamit ng mga koleksyon, kontrolin ang kakayahang ilipat ang mga ito sa pagitan ng application server at ng client side.

Paggamit ng terminal access sa client side para paghigpitan ang access

Madalas kang makakahanap ng mga rekomendasyon na gumamit ng terminal access upang limitahan ang pag-access sa data at pagbutihin ang pagganap sa pamamagitan ng pag-execute ng client-side code sa terminal server. Oo, kung na-configure nang tama, ang paggamit ng terminal access ay maaari talagang mapataas ang pangkalahatang antas ng seguridad ng system, ngunit, sa kasamaang-palad, madalas mong mahaharap ang katotohanan na sa praktikal na paggamit, ang seguridad ng system ay bumababa lamang. Subukan nating alamin kung saan ito nauugnay. Ngayon ay may dalawang karaniwang paraan ng pag-aayos ng terminal access, ito ay ang Microsoft Terminal Services (RDP protocol) at Citrix Metaframe Server (ICA protocol). Sa pangkalahatan, ang mga tool ng Citrix ay nagbibigay ng mas nababaluktot na mga opsyon sa pangangasiwa sa pag-access, ngunit ang presyo ng mga solusyong ito ay mas mataas. Isasaalang-alang lamang namin ang mga pangunahing tampok na karaniwan sa parehong mga protocol na maaaring mabawasan ang pangkalahatang antas ng seguridad. Mayroon lamang tatlong pangunahing panganib kapag gumagamit ng terminal access:
  • Kakayahang harangan ang gawain ng iba pang mga gumagamit sa pamamagitan ng pag-agaw ng labis na dami ng mga mapagkukunan
  • Access sa data ng ibang user.
  • Hindi awtorisadong pagkopya ng data mula sa terminal server patungo sa computer ng user

Sa anumang kaso, pinapayagan ka ng Mga Serbisyo ng Terminal na:

  • Dagdagan ang pagiging maaasahan ng trabaho (kung may pagkabigo sa terminal computer, ang user ay maaaring magpatuloy sa pagtatrabaho mula sa parehong lugar)
  • Limitahan ang pag-access sa application ng kliyente at mga file na sine-save nito.
  • Ilipat ang computing load mula sa workstation ng user papunta sa terminal access server
  • Pamahalaan ang mga setting ng system nang mas sentral. Para sa mga user, ang mga naka-save na setting ay magiging wasto kahit saang computer sila nag-log in sa system.
  • Sa ilang mga kaso, maaari kang gumamit ng terminal solution para sa malayuang pag-access sa system.

Kinakailangang limitahan ang bilang ng mga posibleng koneksyon sa terminal server para sa isang user

Dahil sa "gluttony" ng 1C client application tungkol sa mga mapagkukunan, kinakailangang limitahan ang maximum na bilang ng sabay-sabay na koneksyon ng isang user (operator) sa terminal server. Ang aktibong ginagamit na koneksyon ay maaaring gumamit ng hanggang 300 MB ng memory sa isang pagkakataon lamang ng application. Bilang karagdagan sa memorya, ang oras ng CPU ay aktibong ginagamit, na hindi rin nakakatulong sa katatagan ng mga gumagamit ng server na ito. Kasabay ng pagpigil sa labis na paggamit ng mga mapagkukunan ng server, maaaring pigilan ng naturang paghihigpit ang paggamit ng ibang tao. account. Ipinatupad ng karaniwang mga setting ng terminal server.

Hindi mo dapat payagan ang higit sa isa o dalawang 1C client application na tumakbo nang sabay sa isang koneksyon

Dinidiktahan ng parehong mga dahilan tulad ng sa nakaraang talata, ngunit teknikal na mas mahirap ipatupad. Ang problema ay halos imposible na pigilan ang 1C mula sa pag-restart gamit ang mga tool sa terminal server (bakit ipapaliwanag sa ibaba), kaya kailangan mong ipatupad ang tampok na ito sa antas ng solusyon sa aplikasyon (na hindi rin isang magandang solusyon, dahil ang mga session ay maaaring manatiling "nakabitin" sa loob ng ilang panahon Kung ang aplikasyon ay hindi wastong tinapos, mayroong pangangailangan na pinuhin ang application solution sa application module at ilang mga reference na libro, na magpapalubha sa paggamit ng mga update mula sa 1C). Lubhang kanais-nais na iwanan ang user ng kakayahang magpatakbo ng 2 application upang makapagpatakbo ng ilang mga aksyon (halimbawa, pagbuo ng mga ulat) sa background - ang application ng kliyente, sa kasamaang-palad, ay talagang single-threaded.

Hindi inirerekumenda na magbigay ng mga karapatan sa pag-access sa terminal server sa mga user na may karapatang magpatakbo ng mga gawain sa pag-compute na masinsinang mapagkukunan sa 1C o upang maiwasan ang naturang paglulunsad habang ang ibang mga user ay aktibong nagtatrabaho.

Siyempre, mas mainam na iwanan lamang ang access sa terminal server sa mga user na hindi gumagamit ng mga gawain tulad ng data mining, geographic diagram, import/export, at iba pang mga gawain na seryosong naglo-load sa client na bahagi ng application. Kung mayroon pa ring pangangailangan na payagan ang mga ganoong gawain, kinakailangan na: abisuhan ang user na ang mga gawaing ito ay maaaring makaapekto sa pagganap ng iba pang mga user, itala ang simula at pagtatapos ng naturang proseso sa log, payagan ang pagpapatupad lamang sa isang regulated oras, atbp.

Kinakailangang tiyakin na ang bawat user ay may mga karapatan sa pagsulat lamang sa mga mahigpit na tinukoy na direktoryo sa terminal server at ang ibang mga user ay walang access sa kanila.

Una, kung hindi mo nililimitahan ang kakayahang sumulat sa mga nakabahaging direktoryo (tulad ng direktoryo kung saan naka-install ang 1C), mananatiling posible para sa isang umaatake na baguhin ang gawi ng programa para sa lahat ng mga user. Pangalawa, ang data ng isang user (pansamantalang mga file, mga file para sa pag-save ng mga setting ng ulat, atbp.) ay hindi dapat ma-access sa ibang user ng terminal server - sa pangkalahatan, sa panahon ng normal na pagsasaayos, sinusunod ang panuntunang ito. Pangatlo, ang umaatake ay mayroon pa ring pagkakataon na "magkalat" sa partisyon upang walang puwang na natitira sa hard drive. Alam kong tututol sila sa akin na ang Windows operating system, simula sa Windows 2000, ay may quota na mekanismo, ngunit ito ay medyo mahal na mekanismo, at halos hindi ko nakita ang anumang tunay na paggamit nito.

Kung ang mga nakaraang isyu ng pag-set up ng pag-access ay karaniwang madaling ipatupad, kung gayon ang isang (tila) simpleng gawain bilang pag-regulate ng pag-access ng user sa mga file ay hindi gaanong ipinapatupad. Una, kung hindi ginagamit ang mekanismo ng quota, maaaring ma-save ang malalaking file. Pangalawa, ang system ay binuo sa paraang halos palaging posible na i-save ang file upang ito ay magagamit sa isa pang user.

Isinasaalang-alang na ang gawain ay mahirap ganap na malutas, inirerekomenda na i-audit ang karamihan sa mga kaganapan sa file

Kinakailangang ipagbawal ang koneksyon (mapping) ng mga disk device, printer at clipboard ng workstation ng kliyente.

Sa RDP at ICA, posible na ayusin ang awtomatikong koneksyon ng mga disk, printer, clipboard com port ng terminal computer sa server. Kung umiiral ang pagkakataong ito, halos imposibleng pigilan ang paglulunsad ng dayuhang code sa terminal server at ang pag-save ng data mula sa 1C sa terminal access client. Payagan ang mga feature na ito para lang sa mga may karapatang pang-administratibo.

Dapat na limitado ang access sa network file mula sa terminal server.

Kung hindi ito nagawa, ang user ay muling makakapagpatakbo ng hindi gustong code o makakapag-save ng data. Dahil hindi sinusubaybayan ng regular na log ang mga kaganapan sa file (nga pala, isang magandang ideya para sa pagpapatupad ng mga developer ng platform), at halos imposibleng mag-set up ng system audit sa buong network (walang sapat na mapagkukunan upang mapanatili ito), ito ay mas mahusay na ang gumagamit ay maaaring magpadala ng data alinman upang i-print, o sa pamamagitan ng email. Magbayad ng espesyal na pansin sa pagtiyak na ang terminal server ay hindi gumagana nang direkta sa naaalis na media ng mga user.

Sa anumang pagkakataon dapat mong iwanan ang application server sa terminal server kapag gumagawa ng secure na system.

Kung ang application server ay tumatakbo sa parehong computer gaya ng mga client application, kung gayon mayroong maraming mga pagkakataon upang maputol ang normal na operasyon nito. Kung sa ilang kadahilanan imposibleng paghiwalayin ang mga function ng terminal server at application server, pagkatapos ay bigyang-pansin ang pag-access ng user sa mga file na ginagamit ng application server.

Kinakailangang ibukod ang posibilidad na patakbuhin ang lahat ng application maliban sa 1C:Enterprise sa terminal server.

Isa ito sa pinakamahirap na nais ipatupad. Magsimula tayo sa katotohanang kailangan mong i-configure nang tama ang patakaran sa Patakaran sa Seguridad ng Grupo sa domain. Lahat ng Administrative Templates at Software Restriction Policy ay dapat na i-configure nang tama. Upang subukan ang iyong sarili, tiyaking naka-block man lang ang mga sumusunod na feature:

Ang pagiging kumplikado ng pagpapatupad ng kinakailangang ito ay madalas na humahantong sa posibilidad ng paglunsad ng isang "dagdag" na 1C session sa terminal server (kahit na limitado ang iba pang mga application, sa panimula imposibleng ipagbawal ang paglunsad ng 1C gamit ang Windows).

Isaalang-alang ang mga limitasyon ng regular na log (lahat ng mga gumagamit ay gumagamit ng programa mula sa isang computer)

Malinaw, dahil ang mga gumagamit ay nagbukas ng 1C sa terminal mode, ang terminal server ay itatala sa log. Ang log ay hindi nagsasaad kung saang computer nakakonekta ang user.

Terminal Server – Proteksyon o Kahinaan?

Kaya, pagkatapos isaalang-alang ang mga pangunahing tampok ng terminal sa hilaga, maaari nating sabihin na ang terminal sa hilaga ay maaaring makatulong sa automation upang ipamahagi ang pagkarga ng computing, ngunit ang pagbuo ng isang secure na sistema ay medyo mahirap. Ang isa sa mga kaso kapag ang paggamit ng terminal server ay pinakaepektibo ay kapag nagpapatakbo ng 1C nang walang Windows Explorer sa full screen mode para sa mga user na may limitadong functionality at isang espesyal na interface.

Gawain ng bahagi ng kliyente

Paggamit ng Internet Explorer (IE)

Ang isa sa mga kondisyon para sa normal na operasyon ng bahagi ng 1C client ay ang paggamit ng mga bahagi Internet Explorer. Kailangan mong maging maingat sa mga sangkap na ito.

Pansin! Una, kung ang isang spyware o adware module ay "naka-attach" sa IE, pagkatapos ay maglo-load ito kahit na tingnan mo ang anumang mga HTML na file sa 1C. Sa ngayon ay wala pa akong nakikitang anumang sinasadyang paggamit ng tampok na ito, ngunit nakita ko sa isa sa mga organisasyon ang isang load na module na "espiya" mula sa isa sa mga pornograpikong network na may 1C na tumatakbo (ang antivirus program ay hindi na-update, ang mga sintomas kung saan ay nakita. : kapag nagse-set up ng firewall, malinaw na sinusubukan ng 1C ang port 80 na kumonekta sa isang porn site). Sa totoo lang, ito ay isa pang argumento na pabor sa katotohanan na ang proteksyon ay dapat na komprehensibo

Pansin! Pangalawa, pinapayagan ng 1C system ang paggamit ng mga Flash na pelikula, ActiveX object, VBScript sa mga ipinapakitang HTML na dokumento, pagpapadala ng data sa Internet, kahit na pagbubukas ng mga PDF file (!), bagaman sa huling kaso ay nagtatanong ito ng "buksan o i-save"... Sa pangkalahatan, lahat ng nais ng iyong puso. Isang halimbawa ng hindi lubos na makatwirang paggamit ng built-in na HTML na mga kakayahan sa pagtingin at pag-edit:

  • Lumikha ng bagong HTML na dokumento (File -> Bago -> HTML Document).
  • Pumunta sa tab na "Text" ng blangkong dokumento.
  • Alisin ang teksto (ganap).
  • Pumunta sa tab na "View" ng dokumentong ito
  • Gamit ang drag-n-drop, ilipat ang isang file na may extension ng SWF (ito ay mga Flash na file ng pelikula) mula sa isang bukas na Explorer patungo sa isang window ng dokumento, halimbawa mula sa cache ng browser, bagama't maaari ka ring gumamit ng FLASH na laruan para sa kasiyahan.
  • Napakaganda! Maaari kang magpatakbo ng laruan sa 1C!

Mula sa pananaw ng seguridad ng system, ito ay ganap na mali. Sa ngayon ay wala pa akong nakikitang anumang espesyal na pag-atake sa 1C sa pamamagitan ng kahinaang ito, ngunit malamang na ito ay isang bagay ng oras at ang halaga ng iyong impormasyon.

Mayroong ilang iba pang maliliit na isyu na lumitaw kapag nagtatrabaho sa isang field ng HTML na dokumento, ngunit ang mga pangunahing ay ang dalawang nakalista. Bagaman, kung malikhain mong lapitan ang mga feature na ito, maaari mong ayusin ang tunay na kamangha-manghang mga kakayahan sa interface para sa pagtatrabaho sa 1C.

Paggamit ng mga panlabas na ulat at pagproseso.

Pansin! Mga panlabas na ulat at pagproseso - sa isang banda - maginhawang paraan pagpapatupad ng mga karagdagang naka-print na form, pag-uulat ng regulasyon, mga espesyal na ulat, sa kabilang banda, isang potensyal na paraan upang laktawan ang maraming mga paghihigpit sa seguridad ng system at maabala ang pagpapatakbo ng server ng application (para sa isang halimbawa, tingnan sa itaas sa "Pagpapasa ng mga parameter"). Sa sistema ng 1C mayroong isang espesyal na parameter sa hanay ng mga karapatan para sa papel na "Interactive na pagbubukas ng panlabas na pagproseso", ngunit hindi nito ganap na malulutas ang problema - para sa isang kumpletong solusyon kinakailangan upang paliitin ang bilog ng mga gumagamit na maaaring pamahalaan panlabas na naka-print na mga form, mga ulat sa regulasyon at iba pang mga karaniwang kakayahan ng mga karaniwang solusyon na ipinatupad gamit ang mga panlabas na paggamot. Halimbawa, bilang default sa UPP, lahat ng pangunahing tungkulin ng user ay may kakayahang magtrabaho kasama ang isang direktoryo ng mga karagdagang naka-print na form, at ito, sa katunayan, ay ang kakayahang gumamit ng anumang panlabas na pagproseso.

Paggamit ng mga karaniwang mekanismo para sa mga karaniwang solusyon at platform (pagpapalitan ng data)

Ang ilan sa mga karaniwang mekanismo ay potensyal na mapanganib, at sa mga hindi inaasahang paraan.

Mga listahan ng pag-print

Anumang listahan (halimbawa, isang direktoryo o rehistro ng impormasyon) sa system ay maaaring i-print o i-save sa isang file. Upang gawin ito, gamitin lamang ang karaniwang tampok na magagamit mula sa menu ng konteksto at ang menu na "Mga Pagkilos":

Tandaan na halos lahat ng nakikita ng user sa mga listahan ay maaaring maging output sa mga external na file. Ang tanging bagay na maipapayo namin ay panatilihin ang isang log ng pag-print ng dokumento sa mga server ng pag-print. Para sa mga partikular na kritikal na anyo, kinakailangang i-configure ang panel ng pagkilos na nauugnay sa protektadong field ng talahanayan upang ang kakayahang magpakita ng listahan ay hindi magagamit mula sa panel na ito, at huwag paganahin ang menu ng konteksto (tingnan ang Figure 6).

Pagpapalitan ng data sa isang distributed database

Ang format ng palitan ng data ay medyo simple at inilarawan sa dokumentasyon. Kung ang gumagamit ay may kakayahang palitan ang ilang mga file, maaari siyang gumawa ng hindi awtorisadong mga pagbabago sa system (bagaman ito ay medyo isang labor-intensive na gawain). Ang kakayahang lumikha ng peripheral database kapag gumagamit ng mga distributed database exchange plan ay hindi dapat maging available sa mga ordinaryong operator.

Karaniwang XML Data Interchange

Sa karaniwang pagpapalitan ng data, na ginagamit para sa pagpapalitan sa pagitan ng mga karaniwang pagsasaayos (halimbawa, "Pamamahala ng Kalakalan" at "Enterprise Accounting"), posibleng tukuyin ang mga tagapangasiwa ng kaganapan para sa paglo-load at pagbabawas ng mga bagay sa mga panuntunan sa palitan. Ito ay ipinatupad sa pamamagitan ng pagkuha ng handler mula sa file at ang “Run()” procedure para sa standard processing ng file loading at unloading (ang “Run()” procedure ay inilunsad sa client side). Malinaw, hindi mahirap gumawa ng tulad ng isang pekeng exchange file na magsasagawa ng mga malisyosong aksyon. Para sa karamihan ng mga tungkulin ng user ng mga karaniwang solusyon, pinapayagan ang pagbabahagi bilang default.

Rekomendasyon: paghigpitan ang pag-access sa XML exchange para sa karamihan ng mga gumagamit (iiwan lamang ito sa mga administrator ng seguridad ng impormasyon). Panatilihin ang mga log ng mga pagpapatakbo ng pagpoprosesong ito, i-save ang exchange file, halimbawa, pagpapadala nito gamit ang email administrator ng seguridad ng impormasyon bago mag-download.

Paggamit ng mga generic na ulat, lalo na ang Reports Console

Ang isa pang isyu ay ang default na access ng user sa mga generic na ulat, lalo na ang ulat ng Report Console. Ang ulat na ito ay nailalarawan sa pamamagitan ng katotohanan na pinapayagan ka nitong magsagawa ng halos anumang mga kahilingan sa seguridad ng impormasyon, at, kahit na ang sistema ng mga karapatan ng 1C (kabilang ang RLS) ay na-configure nang mahigpit, pinapayagan nito ang gumagamit na makakuha ng maraming "dagdag" na impormasyon at pilitin ang server na magsagawa ng kahilingan na uubusin ang lahat ng mga sistema ng mapagkukunan.

Paggamit ng Full Screen Mode (Desktop Mode)

Ang isa sa mga epektibong paraan upang ayusin ang mga dalubhasang interface na may limitadong access sa functionality ng program ay ang full-screen mode ng pangunahing (at posibleng lamang) na anyo ng interface na ginamit. Sa kasong ito, walang mga isyu sa pagiging naa-access, halimbawa, ang menu na "File" at ang lahat ng pagkilos ng user ay limitado ng mga kakayahan ng form na ginamit. Para sa higit pang mga detalye, tingnan ang "Mga tampok ng pagpapatupad ng desktop mode" sa ITS disk.

Backup

Ang pag-backup para sa bersyon ng client-server ng 1C ay maaaring gawin sa dalawang paraan: pag-upload ng data sa isang file na may dt extension at paggawa ng mga backup na kopya gamit ang SQL. Ang unang pamamaraan ay may maraming mga kawalan: ang eksklusibong pag-access ay kinakailangan, ang paglikha ng isang kopya mismo ay tumatagal ng mas matagal, sa ilang mga kaso (kung ang istraktura ng seguridad ng impormasyon ay nilabag) ang paglikha ng isang archive ay imposible, ngunit mayroong isang kalamangan - ang minimum na laki ng ang archive. Para sa SQL backup, ang kabaligtaran ay totoo: ang paglikha ng isang kopya ay nangyayari sa background gamit ang SQL server, dahil sa simpleng istraktura at kakulangan ng compression - ito ay isang napakabilis na proseso, at hangga't ang pisikal na integridad ng SQL database ay hindi nasira, ang backup ay ginanap, ngunit ang laki ng kopya coincides sa tunay na ang laki ng seguridad ng impormasyon sa pinalawak na estado (compression ay hindi ginanap). Dahil sa mga karagdagang bentahe ng MS SQL backup system, mas ipinapayong gamitin ito (3 uri ng pag-backup ang pinapayagan: buo, kaugalian, kopya ng log ng transaksyon; posible na lumikha ng mga regular na naisakatuparan na trabaho; isang backup na kopya at isang backup mabilis na na-deploy ang system; posibleng mahulaan ang laki ng kinakailangang espasyo sa disk, atbp.). Ang mga pangunahing punto ng pag-aayos ng backup mula sa punto ng view ng seguridad ng system ay:

  • Ang pangangailangang pumili ng lokasyon ng imbakan para sa mga backup upang hindi ma-access ng mga user ang mga ito.
  • Ang pangangailangan na mag-imbak ng mga backup sa isang pisikal na distansya mula sa MS SQL server (sa kaso ng mga natural na sakuna, sunog, pag-atake, atbp.)
  • Ang kakayahang magbigay ng mga karapatan upang magsimula ng backup sa isang user na walang access sa mga backup.

Para sa higit pang mga detalye, mangyaring sumangguni sa dokumentasyon ng MS SQL.

Data Encryption

Upang protektahan ang data mula sa hindi awtorisadong pag-access, ang iba't ibang mga cryptographic na tool (parehong software at hardware) ay kadalasang ginagamit, ngunit ang kanilang pagiging posible ay higit na nakasalalay sa tamang aplikasyon at pangkalahatang seguridad ng system. Titingnan natin ang pag-encrypt ng data sa iba't ibang yugto ng paghahatid at pag-iimbak ng data gamit ang pinakakaraniwang paraan at ang mga pangunahing error sa disenyo ng system gamit ang mga cryptographic na tool.

Mayroong ilang mga pangunahing yugto ng pagproseso ng impormasyon na maaaring protektahan:

  • Paglipat ng data sa pagitan ng bahagi ng kliyente ng system at ng application server
  • Paglilipat ng data sa pagitan ng application server at MS SQL Server
  • Data na nakaimbak sa MS SQL Server (data file sa pisikal na disk)
  • Pag-encrypt ng data na nakaimbak sa seguridad ng impormasyon
  • Panlabas na data (kaugnay ng seguridad ng impormasyon)

Para sa data na nakaimbak sa panig ng kliyente at sa server ng application (naka-save na mga setting ng user, listahan ng seguridad ng impormasyon, atbp.), Ang pag-encrypt ay nabibigyang katwiran lamang sa mga bihirang kaso at samakatuwid ay hindi isinasaalang-alang dito. Kapag gumagamit ng mga cryptographic tool, hindi natin dapat kalimutan na ang kanilang paggamit ay maaaring makabuluhang bawasan ang pagganap ng system sa kabuuan.

Pangkalahatang impormasyon tungkol sa cryptographic na proteksyon ng mga koneksyon sa network kapag gumagamit ng TCP/IP protocol.

Kung walang seguridad, ang lahat ng koneksyon sa network ay mahina sa hindi awtorisadong pagsubaybay at pag-access. Upang protektahan ang mga ito, maaari mong gamitin ang pag-encrypt ng data sa antas ng network protocol. Upang i-encrypt ang data na ipinadala sa isang lokal na network, ang mga tool ng IPSec na ibinigay ng operating system ay kadalasang ginagamit.

Ang mga tool ng IPSec ay nagbibigay ng pag-encrypt ng ipinadalang data gamit ang DES at 3DES algorithm, pati na rin ang pag-verify ng integridad gamit ang MD5 o SHA1 hash functions. Maaaring gumana ang IPSec sa dalawang mode: transport mode at tunnel mode. Ang transport mode ay mas angkop para sa pag-secure ng mga koneksyon sa isang lokal na network. Maaaring gamitin ang tunnel mode upang ayusin ang mga koneksyon ng VPN sa pagitan ng magkahiwalay na mga segment ng network o protektahan ang isang malayuang koneksyon sa isang lokal na network sa mga bukas na channel ng data.

Ang pangunahing bentahe ng diskarteng ito ay:

  • Posibilidad ng sentralisadong pamamahala ng seguridad gamit ang mga tool ng Active Directory.
  • Ang kakayahang ibukod ang mga hindi awtorisadong koneksyon sa application server at MS SQL server (halimbawa, posibleng maprotektahan laban sa hindi awtorisadong pagdaragdag ng seguridad ng impormasyon sa application server).
  • Pag-aalis ng "pakikinig" ng trapiko sa network.
  • Hindi na kailangang baguhin ang pag-uugali ng mga programa ng aplikasyon (sa kasong ito 1C).
  • Ang karaniwang katangian ng naturang solusyon.

Gayunpaman, ang pamamaraang ito ay may mga limitasyon at disadvantages:

  • Hindi pinoprotektahan ng IPSec ang data mula sa interference at eavesdropping nang direkta sa pinagmulan at patutunguhang mga computer.
  • Ang dami ng data na inilipat sa network ay bahagyang mas malaki kaysa sa hindi gumagamit ng IPSec.
  • Kapag gumagamit ng IPSec, ang pagkarga sa gitnang processor ay bahagyang mas mataas.

Ang isang detalyadong paglalarawan ng pagpapatupad ng mga tool ng IPSec ay lampas sa saklaw ng artikulong ito at nangangailangan ng pag-unawa sa mga pangunahing prinsipyo ng paggana ng IP protocol. Upang maayos na i-configure ang seguridad ng koneksyon, pakibasa ang nauugnay na dokumentasyon.

Hiwalay, kinakailangang banggitin ang ilang aspeto ng kasunduan sa lisensya sa 1C kapag nag-aayos ng mga koneksyon sa VPN. Ang katotohanan ay, sa kabila ng kawalan ng mga teknikal na paghihigpit, kapag kumokonekta sa ilang mga segment ng isang lokal na network o malayuang pag-access ng isang indibidwal na computer sa isang lokal na network, maraming mga pangunahing supply ang karaniwang kinakailangan.

Pag-encrypt ng data kapag inilipat sa pagitan ng client na bahagi ng system at ng application server.

Bilang karagdagan sa pag-encrypt sa antas ng protocol ng network, posible na i-encrypt ang data sa antas ng COM+ protocol, na binanggit sa artikulong "Pag-regulate ng pag-access ng gumagamit sa base ng impormasyon sa bersyon ng client-server" ng ITS. Upang maipatupad ito, kailangan mong itakda ang antas ng Authentication para sa mga tawag sa “Packet Privacy” para sa 1CV8 application sa “Component Services”. Kapag nakatakda sa mode na ito, ang packet ay authenticated at naka-encrypt, kasama ang data at ang pagkakakilanlan at lagda ng nagpadala.

Pag-encrypt ng data kapag inilipat sa pagitan ng application server at MS SQL Server

Nagbibigay ang MS SQL Server ng mga sumusunod na tool para sa pag-encrypt ng data:

  • Posibleng gumamit ng Secure Sockets Layer (SSL) kapag naglilipat ng data sa pagitan ng application server at MS SQL Server.
  • Kapag gumagamit ng Multiprotocol network library, ginagamit ang pag-encrypt ng data sa antas ng RPC. Ito ay potensyal na mas mahinang pag-encrypt kaysa sa paggamit ng SSL.
  • Kung ang Shared Memory exchange protocol ay ginagamit (ito ay nangyayari kung ang application server at MS SQL Server ay matatagpuan sa parehong computer), kung gayon ang pag-encrypt ay hindi ginagamit sa anumang kaso.

Upang maitaguyod ang pangangailangang i-encrypt ang lahat ng ipinadalang data para sa isang partikular na MS SQL server, dapat mong gamitin ang utility na "Server Network Utility". Patakbuhin ito at sa tab na "General", lagyan ng check ang checkbox na "Force protocol encryption." Ang paraan ng pag-encrypt ay pinili depende sa ginamit ng client application (ibig sabihin, ang 1C application server). Upang magamit ang SSL, dapat mong i-configure nang tama ang serbisyo ng sertipiko sa iyong network.

Upang maitakda ang pangangailangang i-encrypt ang lahat ng ipinadalang data para sa isang partikular na server ng application, dapat mong gamitin ang utility na "Client Network Utility" (karaniwang matatagpuan sa "C:\WINNT\system32\cliconfg.exe"). Tulad ng sa nakaraang kaso, sa tab na "General", lagyan ng check ang checkbox na "Force protocol encryption".

Ito ay nagkakahalaga ng pagsasaalang-alang na ang paggamit ng pag-encrypt sa kasong ito ay maaaring magkaroon ng malaking epekto sa pagganap ng system, lalo na kapag gumagamit ng mga query na nagbabalik ng malaking halaga ng impormasyon.

Upang mas ganap na maprotektahan ang koneksyon sa pagitan ng application server at MS SQL Server kapag ginagamit ang TCP/IP protocol, maaari kaming magrekomenda ng ilang pagbabago sa mga default na setting.

Una, maaari kang magtakda ng isang port maliban sa karaniwang isa (port 1433 ay ginagamit bilang default). Kung magpasya kang gumamit ng hindi karaniwang TCP port para sa pagpapalitan ng data, pakitandaan na:

  • Ang MS SQL server at ang application server ay dapat gumamit ng parehong port.
  • Kapag gumagamit ng mga firewall, dapat pahintulutan ang port na ito.
  • Hindi ka makakapagtakda ng port na magagamit ng ibang mga application sa MS SQL server. Para sa sanggunian, maaari mong gamitin ang http://www.ise.edu/in-notes/iana/assignments/port-numbers (address na kinuha mula sa SQL Server Books Online).
  • Kapag gumagamit ng maraming pagkakataon ng serbisyo ng MS SQL Server, tiyaking basahin ang dokumentasyon ng MS SQL para sa pagsasaayos (seksyon "Pag-configure ng Mga Koneksyon sa Network").

Pangalawa, sa mga setting ng protocol ng TCP/IP sa MS SQL server, maaari mong itakda ang flag na "Itago ang server", na nagbabawal sa mga tugon sa mga kahilingan sa broadcast para sa pagkakataong ito ng serbisyo ng MS SQL Server.

Pag-encrypt ng data ng MS SQL na nakaimbak sa disk

Mayroong medyo malaking seleksyon ng software at hardware para sa pag-encrypt ng data na matatagpuan sa isang lokal na disk (kabilang dito ang karaniwang kakayahan ng Windows na gumamit ng EFS, ang paggamit ng mga eToken key, at mga third-party na programa tulad ng Jetico Bestcrypt o PGPDisk). Ang isa sa mga pangunahing gawain na ginagawa ng mga tool na ito ay upang protektahan ang data sa kaganapan ng pagkawala ng media (halimbawa, kung ang isang server ay ninakaw). Ito ay lalong nagkakahalaga na tandaan na hindi inirerekomenda ng Microsoft ang pag-imbak ng mga database ng MS SQL sa naka-encrypt na media, at ito ay lubos na makatwiran. Ang pangunahing problema sa kasong ito ay isang makabuluhang pagbaba sa produktibo at posibleng mga problema pagiging maaasahan mula sa mga pagkabigo. Ang pangalawang kadahilanan na nagpapalubha sa buhay ng administrator ng system ay ang pangangailangan upang matiyak ang pagkakaroon ng lahat ng mga file ng database sa oras na unang na-access ng serbisyo ng MS SQL ang mga ito (ibig sabihin, kanais-nais na ang mga interactive na aksyon ay hindi kasama kapag kumokonekta sa isang naka-encrypt na medium).

Upang maiwasan ang isang kapansin-pansing pagbaba sa pagganap ng system, maaari mong gamitin ang kakayahan ng MS SQL upang lumikha ng mga database sa ilang mga file. Siyempre, sa kasong ito, ang database ng MS SQL ay hindi dapat likhain ng 1C server kapag lumilikha ng infobase, ngunit dapat gawin nang hiwalay. Ang isang halimbawa ng isang TSQL script na may mga komento ay ibinigay sa ibaba:

GAMITIN master
GO
-- Lumikha ng database SomeData,
GUMAWA NG DATABASE SomeData
-- ang data na kung saan ay ganap na matatagpuan sa filegroup PRIMARY.
SA PRIMARY
-- Ang pangunahing file ng data ay matatagpuan sa naka-encrypt na media (lohikal na drive E:)
-- at may paunang sukat na 100 MB, maaaring awtomatikong tumaas sa 200 MB gamit ang
-- sa mga dagdag na 20 MB
(NAME = SomeData1,
FILENAME = "E:\SomeData1.mdf",
SIZE = 100MB,
MAXSIZE = 200,
FILEGROWTH = 2),
-- Ang pangalawang data file ay matatagpuan sa hindi naka-encrypt na media (logical drive C :)
-- at may paunang sukat na 100 MB, ay maaaring awtomatikong tumaas sa limitasyon
-- disk space sa mga pagtaas ng 5% ng kasalukuyang laki ng file (na bilugan hanggang 64 KB)
(NAME = SomeData2,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SomeData2.ndf",
SIZE = 100MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 5%)
MAG-LOG SA
-- Kahit na ang log ng transaksyon ay maaari ding hatiin sa mga bahagi, hindi ito dapat gawin,
-- kasi mas madalas na nagbabago ang file na ito at regular na nililinis (halimbawa, kapag
-- paglikha ng backup ng database).
(NAME = SomeDatalog,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SomeData.ldf",
SIZE = 10MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10)
GO
-- Mas mainam na agad na ibigay ang pagmamay-ari ng database sa user kung kaninong ngalan
-- Kokonekta ang 1C. Upang gawin ito, kailangan nating ideklara ang kasalukuyang base
- kakagawa lang,
GAMITIN ang SomeData
GO
-- at isagawa ang sp_changedbowner
EXEC sp_changedbowner @loginame = "SomeData_dbowner"

Isang maikling digression tungkol sa awtomatikong paglaki ng laki ng data file. Bilang default, ang mga laki ng file para sa mga bagong database ay tinataasan nang 10% ng kasalukuyang laki ng file. Ito ay isang ganap na katanggap-tanggap na solusyon para sa maliliit na database, ngunit hindi masyadong maganda para sa mga malalaking database: na may sukat ng database na, halimbawa, 20 GB, ang file ay dapat na agad na tumaas ng 2 GB. Bagama't ang kaganapang ito ay madalang mangyari, maaari itong tumagal ng ilang sampu-sampung segundo (lahat ng iba pang mga transaksyon ay epektibong walang ginagawa sa panahong ito), na, kung ito ay nangyayari sa panahon ng aktibong trabaho sa database, ay maaaring magdulot ng ilang mga pagkabigo. Ang pangalawang negatibong kahihinatnan ng proporsyonal na pagtaas, na nangyayari kapag ang puwang sa disk ay halos ganap na puno, ay ang posibilidad ng napaaga na pagkabigo dahil sa hindi sapat na libreng espasyo. Halimbawa, kung ang isang disk partition na may kapasidad na 40 GB ay ganap na nakatuon sa isang database (mas tiyak, sa isang file ng database na ito), kung gayon ang kritikal na sukat ng file ng database kung saan kinakailangan na mapilit (napaka-mapilit, hanggang sa punto ng pagkagambala sa normal na gawain ng mga gumagamit) upang muling ayusin ang imbakan ng impormasyon ay ang laki ng file ng data na 35 GB. Gamit ang laki ng pagtaas na itinakda sa 10-20 MB, maaari kang magpatuloy sa pagtatrabaho hanggang sa maabot mo ang 39 GB.

Samakatuwid, kahit na ang listahan sa itaas ay tumutukoy sa isang pagtaas sa laki ng isa sa mga file ng database sa mga pagtaas ng 5%, para sa malalaking sukat ng database mas mahusay na magtakda ng isang nakapirming pagtaas ng 10-20 MB. Kapag nagtatakda ng mga halaga ng pagtaas para sa paglaki ng laki ng file ng database, kinakailangang isaalang-alang na hanggang sa maabot ng isa sa mga file sa isang pangkat ng file ang pinakamataas na laki nito, nalalapat ang panuntunan: ang mga file sa isang pangkat ng file ay tumataas nang sabay-sabay oras, kapag sila ay ganap na napuno. Kaya sa halimbawa sa itaas, kapag ang SomeData1.mdf file ay umabot sa maximum na laki nitong 200 MB, ang SomeData2.ndf file ay magiging mga 1.1 GB ang laki.

Pagkatapos gumawa ng ganoong database, kahit na ang mga hindi protektadong file nito na SomeData2.ndf at SomeData.ldf ay naa-access ng isang attacker, napakahirap na ibalik ang tunay na estado ng database - ang data (kabilang ang impormasyon tungkol sa lohikal na istraktura ng database ) ay magkakalat sa ilang mga file, at ang pangunahing impormasyon (tungkol sa, halimbawa, kung aling mga file ang bumubuo sa database na ito) ay nasa naka-encrypt na file.

Siyempre, kung ang pag-iimbak ng mga file ng database gamit ang cryptographic na paraan ay ginagamit, kung gayon ang pag-backup (hindi bababa sa mga file na ito) ay hindi dapat isagawa sa hindi naka-encrypt na media. Upang i-back up ang mga indibidwal na file ng database, gamitin ang naaangkop na syntax ng command na BACKUP DATABASE. Pakitandaan na bagama't posibleng protektahan ang isang backup ng database gamit ang isang password (ang "PASSWORD = " at "MEDIAPASSWORD = " na mga opsyon ng command na "BACKUP DATABASE"), ang naturang backup ay hindi na-encrypt!

Pag-encrypt ng application server at data ng kliyente na nakaimbak sa mga disk

Sa karamihan ng mga kaso, hindi maituturing na makatwiran ang pag-imbak ng mga file na ginagamit ng 1C:Enterprise (bahagi ng kliyente at server ng aplikasyon) sa naka-encrypt na media dahil sa hindi makatwirang mataas na mga gastos, gayunpaman, kung mayroong ganoong pangangailangan, pakitandaan na ang server ng application at bahagi ng kliyente ng application ay madalas na lumikha ng mga pansamantalang file. Kadalasan, ang mga file na ito ay maaaring manatili pagkatapos tumakbo ang application, at halos imposibleng magarantiya ang kanilang pag-alis gamit ang 1C tool. Kaya, kinakailangan na i-encrypt ang direktoryo na ginamit para sa mga pansamantalang file sa 1C o hindi iimbak ito sa disk gamit ang isang RAM drive (ang huli na opsyon ay hindi laging posible dahil sa laki ng mga nabuong file at ang mga kinakailangan ng RAM ng 1C: Enterprise aplikasyon mismo).

Pag-encrypt ng data gamit ang built-in na 1C tool.

Ang mga karaniwang kakayahan para sa paggamit ng pag-encrypt sa 1C ay bumababa sa paggamit ng mga bagay para sa pagtatrabaho sa mga Zip file na may mga parameter ng pag-encrypt. Available ang mga sumusunod na mode ng pag-encrypt: AES algorithm na may key na 128, 192 o 256 bits at isang hindi na ginagamit na algorithm na orihinal na ginamit sa Zip archiver. Ang mga zip file na naka-encrypt gamit ang AES ay hindi nababasa ng maraming archiver (WinRAR, 7zip). Upang makabuo ng file na naglalaman ng naka-encrypt na data, dapat kang tumukoy ng password at algorithm ng pag-encrypt. Ang pinakasimpleng halimbawa ng mga function ng encryption-decryption batay sa feature na ito ay ibinigay sa ibaba:

Function EncryptData(Data, Password, Encryption Method = Undefined) Export

// Isulat ang data sa isang pansamantalang file. Sa katunayan, hindi lahat ng data ay maaaring i-save sa ganitong paraan.
ValueInFile(TemporaryFileName, Data);

// Sumulat ng pansamantalang data sa archive
Zip = Bagong ZipFileRecord(TemporaryArchiveFileName, Password, EncryptionMethod);
Zip.Add(TemporaryFileName);
Zip.Write();

// Basahin ang data mula sa natanggap na archive sa RAM
EncryptedData = NewValueStorage(NewBinaryData(ArchiveTemporaryFileName));

// Pansamantalang mga file - tanggalin

EndFunctions Function DecryptData(EncryptedData, Password) Export

// Pansin! Ang kawastuhan ng mga naipasa na parameter ay hindi sinusubaybayan

// Isulat ang naipasa na halaga sa isang file
ArchiveTemporaryFileName = GetTemporaryFileName("zip");
BinaryArchiveData = EncryptedData.Get();
BinaryArchiveData.Write(ArchiveTemporaryFileName);

// I-extract ang unang file ng kakasulat lang na archive
TemporaryFileName = GetTemporaryFileName();
Zip = Bagong ReadZipFile(TemporaryArchiveFileName, Password);
Zip.Extract(Zip.Items, TemporaryFileName, ZIPFilePathRecoveryMode.Do NotRecover);

// Basahin ang nakasulat na file
Data = ValueFromFile(TemporaryFileName + "\" + Zip.Items.Name);

// Tanggalin ang mga pansamantalang file
DeleteFiles(TemporaryFileName);
DeleteFiles(ArchiveTemporaryFileName);

Ibalik ang Data;

EndFunction

Siyempre, ang pamamaraang ito ay hindi matatawag na perpekto - ang data ay isinulat sa isang pansamantalang folder sa malinaw na teksto, ang pagganap ng pamamaraan, tapat na pagsasalita, ay mas masahol kaysa dati, ang imbakan sa database ay nangangailangan ng isang napakalaking puwang, ngunit ito ay ang tanging paraan na nakabatay lamang sa mga built-in na mekanismo ng platform. Bilang karagdagan, mayroon itong kalamangan sa maraming iba pang mga pamamaraan - ang pamamaraang ito ay sabay-sabay na nag-pack ng data kasama ang pag-encrypt. Kung gusto mong ipatupad ang pag-encrypt nang walang mga disadvantages na mayroon ang paraang ito, dapat mong ipatupad ang mga ito sa isang panlabas na bahagi, o bumaling sa mga umiiral nang library sa pamamagitan ng paglikha ng mga COM object, halimbawa, gamit ang Microsoft CryptoAPI. Bilang halimbawa, ibibigay namin ang mga function ng pag-encrypt/pag-decrypt ng isang string batay sa natanggap na password.

Function EncryptStringDES(UnencryptedString, Password)

CAPICOM_ENCRYPTION_ALGORITHM_DES = 2; // Ang constant na ito ay mula sa CryptoAPI


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

ibalik ang EncryptedString;

EndFunction // EncryptStringDES()

Function DecryptStringDES(EncryptedString, Password)

//Atensyon! Hindi sinusuri ang mga parameter!

Encryption Engine = Bagong COMObject("CAPICOM.EncryptedData");
EncryptionMechanism.SetSecret(Password);
Tangka
EncryptionMechanism.Decrypt(EncryptedString);
Exception
// Maling password!;
Bumalik na Hindi Natukoy;
EndAttempt;

ReturnEncryptionMechanism.Content;

EndFunction // DecryptStringDES()

Mangyaring tandaan na kapag naglilipat walang laman na halaga Ang pagpasok ng string o password sa mga function na ito ay bubuo ng mensahe ng error. Ang string na nakuha gamit ang pamamaraan ng pag-encrypt na ito ay bahagyang mas mahaba kaysa sa orihinal. Ang pagiging tiyak ng pag-encrypt na ito ay kung mag-e-encrypt ka ng isang string nang dalawang beses, HINDI magkakapareho ang mga resultang string.

Mga pangunahing pagkakamali kapag gumagamit ng mga tool sa cryptographic.

Kapag gumagamit ng mga cryptographic na tool, ang parehong mga pagkakamali ay madalas na ginagawa:

Minamaliit ang parusa sa pagganap kapag gumagamit ng cryptography.

Ang Cryptography ay isang gawain na nangangailangan ng medyo malaking bilang ng mga kalkulasyon (lalo na para sa mga algorithm tulad ng DES, 3DES, GOST, PGP). At kahit na gumagamit ng mataas na pagganap at na-optimize na mga algorithm (RC5, RC6, AES), walang pagtakas mula sa hindi kinakailangang paglipat ng data sa memorya at pagpoproseso ng computational. At halos tinatanggihan nito ang mga kakayahan ng maraming bahagi ng server (RAID arrays, network adapters). Kapag gumagamit ng hardware encryption o hardware derivation ng encryption key, mayroong karagdagang posibleng performance bottleneck: ang bilis ng paglipat ng data sa pagitan ng karagdagang device at memory (kung saan ang performance ng naturang device ay maaaring hindi kritikal). Kapag gumagamit ng pag-encrypt ng maliit na halaga ng data (halimbawa, isang mensahe sa email), ang pagtaas sa pag-load ng computing sa system ay hindi gaanong kapansin-pansin, ngunit sa kaso ng kabuuang pag-encrypt ng lahat, ito ay maaaring makaapekto nang malaki sa pagganap ng system sa kabuuan.

Pagmamaliit sa mga modernong kakayahan para sa pagpili ng mga password at key.

Sa ngayon, ang mga kakayahan ng teknolohiya ay tulad na ang isang susi na may haba na 40-48 bits ay maaaring mapili ng isang maliit na organisasyon, at isang susi na may haba na 56-64 bits ng isang malaking organisasyon. Yung. dapat gamitin ang mga algorithm na gumagamit ng key na hindi bababa sa 96 o 128 bits. Ngunit karamihan sa mga susi ay nabuo gamit ang mga hash algorithm (SHA-1, atbp.) batay sa mga password na ipinasok ng user. Sa kasong ito, maaaring hindi makatulong ang isang key na may haba na 1024 bits. Una, madalas na ginagamit ang isang madaling hulaan na password. Ang mga salik na nagpapadali sa pagpili ay: paggamit lamang ng isang kaso ng mga titik; paggamit ng mga salita, pangalan at expression sa mga password; paggamit ng mga kilalang petsa, kaarawan, atbp.; gamit ang "mga pattern" kapag bumubuo ng mga password (halimbawa, 3 titik, pagkatapos ay 2 numero, pagkatapos ay 3 titik sa buong organisasyon). Ang isang magandang password ay dapat na isang random na pagkakasunud-sunod ng parehong mga titik, numero, at mga bantas. Ang mga password na ipinasok mula sa keyboard hanggang sa 7-8 character ang haba, kahit na sinusunod ang mga panuntunang ito, ay maaaring hulaan sa isang makatwirang oras, kaya mas mabuti para sa password na hindi bababa sa 11-13 character. Ang perpektong solusyon ay upang maiwasan ang pagbuo ng isang susi gamit ang isang password, halimbawa, gamit ang iba't ibang mga smart card, atbp., ngunit sa kasong ito kinakailangan na magbigay ng posibilidad na maprotektahan laban sa pagkawala ng encryption key media.

Hindi secure na imbakan ng mga susi at password.

Ang mga karaniwang halimbawa ng error na ito ay:

  • mahaba at kumplikadong mga password na nakasulat sa mga sticky note na nakadikit sa monitor ng user.
  • pag-iimbak ng lahat ng mga password sa isang file na hindi protektado (o protektado ng mas mahina kaysa sa system mismo)
  • imbakan ng mga electronic key sa pampublikong domain.
  • madalas na paglilipat ng mga electronic key sa pagitan ng mga user.

Bakit gagawa ng nakabaluti na pinto kung ang susi nito ay nasa ilalim ng doormat?

Paglipat ng unang naka-encrypt na data sa isang hindi secure na kapaligiran.

Kapag nagse-set up ng isang sistema ng seguridad, tiyaking ginagawa nito ang trabaho nito. Halimbawa, nakatagpo ako ng isang sitwasyon (hindi nauugnay sa 1C) kapag ang isang unang naka-encrypt na file, kapag ang programa ay tumatakbo sa malinaw na anyo, ay inilagay sa isang pansamantalang folder, mula sa kung saan ito ay ligtas na mabasa. Kadalasan, ang mga backup na kopya ng naka-encrypt na data sa malinaw na anyo ay matatagpuan sa isang lugar na "hindi malayo" mula sa data na ito.

Paggamit ng mga cryptographic na tool para sa iba pang layunin

Sa pamamagitan ng pag-encrypt ng data sa pagpapadala, hindi mo maaasahan na ang data ay hindi naa-access kung saan ito ginagamit. Halimbawa, hindi pinipigilan ng mga serbisyo ng IPSec sa anumang paraan ang server ng application mula sa "pagsinghot" ng trapiko sa network sa antas ng aplikasyon.

Kaya, upang maiwasan ang mga pagkakamali kapag nagpapatupad ng mga cryptographic system, dapat mong (sa pinakamababa) gawin ang sumusunod bago ito i-deploy.

  • Malaman:
    • Ano ang kailangang protektahan?
    • Aling paraan ng proteksyon ang dapat mong gamitin?
    • Aling mga bahagi ng system ang kailangang i-secure?
    • Sino ang magkokontrol sa pag-access?
    • Gagana ba ang pag-encrypt sa lahat ng tamang lugar?
  • Tukuyin kung saan naka-imbak ang impormasyon, kung paano ito ipapadala sa network, at ang mga computer kung saan maa-access ang impormasyon. Magbibigay ito ng impormasyon tungkol sa bilis ng network, kapasidad, at paggamit bago ipatupad ang system, na kapaki-pakinabang para sa pag-optimize ng pagganap.
  • Suriin ang kahinaan ng system sa iba't ibang uri ng pag-atake.
  • Bumuo at magdokumento ng plano sa seguridad ng system.
  • Suriin ang kahusayan sa ekonomiya (katuwiran) ng paggamit ng sistema.

Konklusyon

Siyempre, sa isang mabilis na pagsusuri, imposibleng ipahiwatig ang lahat ng aspeto na nauugnay sa seguridad sa 1C, ngunit hayaan natin ang ating sarili na gumuhit ng ilang mga paunang konklusyon. Siyempre, ang platform na ito ay hindi matatawag na perpekto - ito, tulad ng marami pang iba, ay may sariling mga problema sa pag-aayos ng isang secure na sistema. Ngunit hindi ito nangangahulugan na ang mga problemang ito ay hindi maiiwasan; sa kabaligtaran, halos lahat ng mga pagkukulang ay maaaring alisin sa wastong pag-unlad, pagpapatupad at paggamit ng sistema. Karamihan sa mga problema ay lumitaw dahil sa hindi sapat na pag-unlad ng isang partikular na solusyon sa aplikasyon at kapaligiran ng pagpapatupad nito. Halimbawa, ang mga karaniwang solusyon na walang makabuluhang pagbabago ay hindi lamang nagpapahiwatig ng paglikha ng isang sapat na secure na sistema.

Ang artikulong ito ay muling nagpapakita na ang anumang hanay ng mga hakbang sa seguridad ay dapat sumaklaw sa lahat ng mga yugto ng pagpapatupad: pagbuo, pag-deploy, pangangasiwa ng system at, siyempre, mga hakbang sa organisasyon. Sa mga sistema ng impormasyon, ito ay ang "human factor" (kabilang ang mga gumagamit) na ang pangunahing banta sa seguridad. Ang hanay ng mga hakbang na ito ay dapat na makatwiran at balanse: ito ay hindi makatwiran at malamang na hindi sapat na pondo ang ilalaan upang ayusin ang proteksyon na lumalampas sa halaga ng data mismo.

kumpanya ay isang natatanging serbisyo para sa mga mamimili, developer, dealer at kaakibat na kasosyo. Bilang karagdagan, ito ay isa sa mga pinakamahusay na online na tindahan ng software sa Russia, Ukraine, at Kazakhstan, na nag-aalok sa mga customer ng malawak na hanay ng mga produkto, maraming paraan ng pagbabayad, mabilis (madalas na instant) na pagproseso ng order, at pagsubaybay sa proseso ng pag-order sa isang personal na seksyon .