Biztonságos üzemmód. Külső nyomtatási űrlap hozzáadása vagy feldolgozása Biztonságos üzemmód 1s 8.3

A külső feldolgozás programozott megnyitása az ExternalProcessing globális kontextusobjektum használatával történik, amelynek típusa ExternalProcessingManager. Az 1C platform minden egyes üzemmódjához (normál alkalmazási mód és felügyelt alkalmazásmód) különböző objektummódszereket használnak a külső feldolgozással való együttműködéshez.

Külső feldolgozás futtatása normál alkalmazás módban

Egy tipikus alkalmazásban az ExternalProcessing objektum Create() metódusát kell használnia, amely a külső feldolgozófájl teljes nevét adja át. A metódus egy típusú objektumot ad vissza Külső feldolgozás, ez az objektum a megnyitás alatt álló külső feldolgozás. Ha meg kell nyitnia egy külső feldolgozási űrlapot, akkor hívja meg a GetForm() metódust a kapott objektumon, amely visszaadja a fő űrlapot, majd hívja meg az Open() metódust a megnyitásához.


Feldolgozás = ExternalProcessing.Create(FullFileName);
Feldolgozás.GetForm().Open();

Külső feldolgozásnál a fő űrlapnak mindig szabályosnak, a vezérelt űrlapnak pedig egy továbbinak kell lennie, különben a GetForm() metódus nem fog működni normál alkalmazási módban.

Külső feldolgozás futtatása felügyelt alkalmazás módban

Felügyelt űrlapok módban az algoritmus végrehajtási kontextus szerint van felosztva. Az ügyfélen bináris adatokat kapunk a külső feldolgozó fájl teljes nevével. A kapott bináris adatokat a szerverre továbbítjuk és átmeneti tárhelyen helyezzük el. Ezután meg kell hívnia az ExternalProcessing objektum Connect() metódusát, amelyhez az ideiglenes tárolás címét továbbítják. A metódus visszaadja a csatlakoztatott külső feldolgozás nevét. Visszaküldjük a külső feldolgozás nevét az ügyfélnek, létrehozunk egy karakterlánc elérési utat a feldolgozási űrlaphoz, és az OpenForm() metódussal nyitjuk meg a külső feldolgozási űrlapot.

&OnServer
Függvény GetExternalProcessingName(bináris adat)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // A külső feldolgozófájl teljes neve.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Biztonságos mód külső feldolgozáshoz

Az ExternalProcessing objektum Create() és Connect() metódusainak bejövő SafeMode paramétere van - ez a külső feldolgozás csökkentett módban történő csatlakoztatásának jele. Ha a paraméter nincs megadva, a kapcsolat biztonságos módban jön létre.
A csökkentett mód célja, hogy megvédje a rendszert attól, hogy „nem megbízható” programkódot hajtson végre a szerveren. A potenciális veszély a felhasználó által a Run() és Calculate() metódusokban történő felhasználásra beírt külső feldolgozásból vagy programkódból ered.
A csökkentett mód a következő korlátozásokat írja elő:
  • privilegizált mód törlődik, ha telepítve volt;
  • a privilegizált módba való belépési kísérleteket figyelmen kívül hagyja;
  • COM objektumokkal végzett műveletek tilosak;
  • külső alkatrészek betöltése és csatlakoztatása tilos;
  • a fájlrendszerhez való hozzáférés tilos (kivéve az ideiglenes fájlokat);
  • Internet hozzáférés tilos.
Az interaktívan megnyitott folyamatok nem biztonságos módban kerülnek végrehajtásra, ezért javasolt egy olyan mechanizmust megvalósítani, amely lehetővé teszi a külső processzorok csökkentett módban történő megnyitását, valamint az engedély szintjén, hogy a felhasználó megtiltsa a külső processzorok interaktív megnyitását.
A feldolgozás interaktív megnyitásának tiltásához a felhasználóhoz rendelt összes szerepkörben el kell távolítani a „Külső feldolgozás interaktív megnyitása” jogot (lásd 1. ábra).
1. ábra: A külső feldolgozás/jelentések interaktív megnyitásának jogai
A „Külső feldolgozás interaktív megnyitása” jog semmilyen módon nem érinti az External Processing objektumot.

A külső jelentések automatizált megnyitása hasonló a külső feldolgozáshoz, de használja az ExternalReports globális kontextusobjektumot, amelynek típusa ExternalReportsManager.

Az a tény, hogy az 1C kliens-szerver verziójának használatakor a külső feldolgozás / jelentések biztonságos módban nyílnak meg, amelyben tilos a privilegizált mód használata. A privilegizált módot pedig nagyon gyakran használják tipikus konfigurációkban: nyomtatott űrlapok generálása, különféle szolgáltatás-ellenőrzések (cserék regisztrációja) stb. Ennek eredményeként még akkor is, ha rendszeres jelentést készít a beléptető rendszerről űrlap nélkül (alapértelmezés szerint a "Jelentésűrlap" általános űrlapot használja) és elmenti az egyéni jelentésbeállításokat (a megfelelő könyvtárba), hibaüzenet jelenik meg a nem megfelelő hozzáférésről. sor után különböző hivatalos célokra használt állandók és munkamenet-paraméterek jogai SetPrivilegedMode(True) ;

A „helyes” megoldás a külső feldolgozás és a jelentések összekapcsolása a BSP „További jelentések és feldolgozás” mechanizmusain keresztül a csökkentett mód letiltásával vagy engedélyek hozzáadásával (véleményem szerint a BSP 2.2.2.1-es verziójától). De ha valamilyen oknál fogva külső jelentéskészítési/feldolgozási fájlok használatára van szükség, akkor konfigurálhat egy fürt biztonsági profilt csökkentett módú biztonsági profilként egy adott információs bázishoz.

Azonnal szeretném megjegyezni, hogy ez a lehetőség nem előnyös, de különböző körülmények miatt ilyen egyszerűsített formában is használható. Például több adatbázisom van különböző városokban, egy közös helyi szigorúan korlátozott jogokkal, zárt USB-vel stb., valahol Accounting 2.0-t használok, valahol 3.0-t használok, szinte minden jelentést ACS eszközökkel készítek űrlapok nélkül, hogy azok mindkét változatban megnyílt. Mindezen jelentések karbantartása különböző verziókhoz és különböző adatbázisokhoz munkaigényes és hiábavaló, mert A tervek szerint egységes konfigurációra és alapra váltanak...

Hozzunk létre egy profilt.
A fürtkonzolban létrehozunk egy biztonsági profilt, amelyben beállítjuk a zászlókat "Használható csökkentett módú biztonsági profilként"és " a "Teljes hozzáférés engedélyezett:" részben "kiváltságos módba".

A jelentések és az egyszerű feldolgozás sok esetben ez a módszer alkalmazható. Bonyolultabb helyzeteknél nincs értelme a folyamat leírásának, mert a dokumentáció felvázolja (biztonsági profilok konfigurálása adott külső fájlokhoz a hash mennyiségének megadásával stb.).

P.S. Azt hittem, hogy a biztonsági profilok csak akkor működnek, ha CORP-szinten platform- és szerverlicenceket használunk, de ez a funkció az 1C:Enterprise 8.3 platformon is működik (feltételesen PROF-nak nevezhető, a Basic/PROF/CORP szabványos konfigurációkhoz hasonlóan)

A 8.3.9.2033 platform kiadásával egy új mechanizmus jelent meg "Védelem a veszélyes cselekedetekkel szemben".

Ennek az innovációnak köszönhetően az 1C most a feldolgozás (és nem csak) megnyitásakor esküdni kezdett:

Biztonsági figyelmeztetés

Megnyitja a „Saját külső feldolgozás” elemet a „My_External_Processing.epf” fájlból

Javasoljuk, hogy figyeljen arra a forrásra, ahonnan a fájl származott. Ha nincs megegyezés a forrással a további modulok fejlesztéséről, vagy kétségek merülnek fel a fájl tartalmával kapcsolatban, akkor nem ajánlott megnyitni, mert ez károsíthatja a számítógépet és az adatokat.

Megengedi, hogy megnyitjam ezt a fájlt?

Ezért az 1C úgy döntött, hogy felveszi a harcot a rosszindulatú kóddal!

Hogy ez a „rosszindulatú kód” honnan származik egy vállalaton belül, még mindig rejtély.)

A potenciálisan veszélyes tevékenységek a következők voltak:

  • Külső jelentés, feldolgozás vagy konfigurációs bővítmény betöltése.
  • Konfiguráció/bővítmény betöltése vagy frissítése.
  • Hozzáférés külső jelentésből/feldolgozóból vagy bővítményből a következő képességekhez:
  • Az operációs rendszer parancsának végrehajtása.
  • Felhasználókezelés (adatbázis-felhasználó adatainak rögzítése vagy törlése).
  • A külső feldolgozás (jelentések) menedzser Connect() metódusának meghívása.
  • Az ExtendConfiguration.Write() metódus meghívása.
  • Munka COM objektumokkal.

Hogyan lehet ezt a "csodát" kikapcsolni?

Ehhez el kell indítania az 1C Enterprise-t konfigurátor módban.
Válassza az „Adminisztráció” - „Felhasználók” menüt.
A felhasználóink ​​számára megnyíló ablakban meg kell nyitnia a felhasználói beállítások ablakot, és törölnie kell az „Alap” fület. "Védelem a veszélyes cselekedetekkel szemben"

Vannak más módok is ennek letiltására:

Mostantól megadható azoknak az információs bázisoknak a listája, amelyekkel a veszélyes műveletek elleni védelem letiltásra kerül.
Ez a funkció felelős a conf.cfg fájl DisableUnsafeActionProtection paraméteréért, amely lehetővé teszi a veszélyes műveletek elleni védelmi mechanizmus letiltását bizonyos információs bázisok összes olyan felhasználója számára, akiknek kapcsolati karakterláncai megfelelnek a DisableUnsafeActionProtection paraméterben megadott maszkoknak.

Ebben a paraméterben több maszkot is megadhat a „;” szimbólummal elválasztva, például:

DisableUnsafeActionProtection=teszt_.*;stage_.*;

Ezenkívül a veszélyes felhasználói műveletek elleni védelem programozottan letiltható, amelyhez a következő paraméterek és tulajdonságok állnak rendelkezésre:

  • Paramétervédelem a külső feldolgozási (jelentés-) kezelők Connect() metódusainak veszélyes műveletei ellen
  • A Configuration Extension objektum Veszélyes műveletek elleni védelem tulajdonsága az objektum Write() metódusának meghívása előtt.

A veszélyes tevékenységek elleni védelem szükségességének ellenőrzése a következő sorrendben történik:

1. Ha az aktuális felhasználó „Védelem a veszélyes tevékenységek ellen” jelölőnégyzetéből törlődik, akkor a védelem letiltottnak minősül.

2. Ha az infobase kapcsolati karakterlánca megegyezik a conf.cfg fájl DisableUnsafeActionProtection paraméterében megadott egyik mintával, akkor a védelem letiltottnak minősül.

3. Ha a védelem kifejezetten le van tiltva külső feldolgozás vagy jelentés Veszélyes műveletek elleni védelem paraméterével.

4. Ha a védelem kifejezetten le van tiltva a Védelem a veszélyes tevékenységektől tulajdonság használatával.

Az a tény, hogy az 1C kliens-szerver verziójának használatakor a külső feldolgozás / jelentések biztonságos módban nyílnak meg, amelyben tilos a privilegizált mód használata. A privilegizált módot pedig nagyon gyakran használják tipikus konfigurációkban: nyomtatott űrlapok generálása, különféle szolgáltatás-ellenőrzések (cserék regisztrációja) stb. Ennek eredményeként még akkor is, ha rendszeres jelentést készít a beléptető rendszerről űrlap nélkül (alapértelmezés szerint a "Jelentésűrlap" általános űrlapot használja) és elmenti az egyéni jelentésbeállításokat (a megfelelő könyvtárba), hibaüzenet jelenik meg a nem megfelelő hozzáférésről. sor után különböző hivatalos célokra használt állandók és munkamenet-paraméterek jogai SetPrivilegedMode(True) ;

A „helyes” megoldás a külső feldolgozás és a jelentések összekapcsolása a BSP „További jelentések és feldolgozás” mechanizmusain keresztül a csökkentett mód letiltásával vagy engedélyek hozzáadásával (véleményem szerint a BSP 2.2.2.1-es verziójától). De ha valamilyen oknál fogva külső jelentéskészítési/feldolgozási fájlok használatára van szükség, akkor konfigurálhat egy fürt biztonsági profilt csökkentett módú biztonsági profilként egy adott információs bázishoz.

Azonnal szeretném megjegyezni, hogy ez a lehetőség nem előnyös, de különböző körülmények miatt ilyen egyszerűsített formában is használható. Például több adatbázisom van különböző városokban, egy közös helyi szigorúan korlátozott jogokkal, zárt USB-vel stb., valahol Accounting 2.0-t használok, valahol 3.0-t használok, szinte minden jelentést ACS eszközökkel készítek űrlapok nélkül, hogy azok mindkét változatban megnyílt. Mindezen jelentések karbantartása különböző verziókhoz és különböző adatbázisokhoz munkaigényes és hiábavaló, mert A tervek szerint egységes konfigurációra és alapra váltanak...

Hozzunk létre egy profilt.
A fürtkonzolban létrehozunk egy biztonsági profilt, amelyben beállítjuk a zászlókat "Használható csökkentett módú biztonsági profilként"és " a "Teljes hozzáférés engedélyezett:" részben "kiváltságos módba".

A jelentések és az egyszerű feldolgozás sok esetben ez a módszer alkalmazható. Bonyolultabb helyzeteknél nincs értelme a folyamat leírásának, mert a dokumentáció felvázolja (biztonsági profilok konfigurálása adott külső fájlokhoz a hash mennyiségének megadásával stb.).

P.S. Azt hittem, hogy a biztonsági profilok csak akkor működnek, ha CORP-szinten platform- és szerverlicenceket használunk, de ez a funkció az 1C:Enterprise 8.3 platformon is működik (feltételesen PROF-nak nevezhető, a Basic/PROF/CORP szabványos konfigurációkhoz hasonlóan)

Nyomtatás (Ctrl+P)

Konfigurációs objektumok

Ha „nem megbízható” programkódot kell használni a szerveren: külső feldolgozást vagy a felhasználó által beírt programkódot a Run() és Calculate() metódusok használatához, használhatja a biztonságos üzemmódot.

Biztonságos módban:

  • Kiváltságos mód törölve.
  • Váltás kiemelt módba figyelmen kívül hagyva.
  • Tiltott külső eszközök használatához vezető műveletek az 1C:Enterprise platformmal kapcsolatban (beleértve a megadott módszerek nem blokkoló analógjait):
  • COM mechanizmusok:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Külső alkatrészek betöltése:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Fájlrendszer hozzáférés:
    • ValueInFile();
    • CopyFile();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • DeleteFiles();
    • Új fájl;
    • Új xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText(), ha az első paraméter egy karakterlánc;
    • ReadText.Open(), ha az első paraméter egy karakterlánc;
    • NewTextRecord(), ha az első paraméter egy karakterlánc;
    • WriteText.Open(), ha az első paraméter egy karakterlánc;
    • NewTextExtract();
    • az ExtractText.FileName tulajdonság megváltoztatása;
    • ExtractText.Write();
    • New Picture(), ha az első paraméter egy karakterlánc;
    • Picture.Write();
    • new BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), ha az első paraméter egy karakterlánc;
    • Új ReadData(), van egy első paraméter - egy karakterlánc;
    • a FileStreamManager objektum összes metódusa;
    • New FileStream();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Internet hozzáférés:
    • Új Internet kapcsolat,
    • Új InternetMail,
    • Új InternetProxy,
    • Új HTTP kapcsolat,
    • Új FTP Connection.

FIGYELEM! Tiltott műveletek végrehajtásakor a rendszer kivételt dob ​​futás közben.

Jegyzet. A Fájl - Megnyitás menüvel megnyitott külső jelentések és feldolgozás csökkentett módban történik, ha a felhasználó nem rendelkezik rendszergazdai hozzáférési jogokkal.

A csökkentett mód aktiválások számának meg kell egyeznie a letiltások számával. Ha azonban egy eljáráson vagy funkción belül (egyszer vagy többször) bekapcsolták a csökkentett módot, de nem kapcsolták ki, a rendszer automatikusan kikapcsol, ahányszor a hátralévő eljárásban vagy funkcióban nem volt teljesen bekapcsolva.

Ha egy eljárásban vagy függvényben meghív egy metódust SetSafeMode (hamis) több mint metódushívás történt SetSafeMode (igaz), akkor kivételt teszünk.

Csökkentett mód szoftveres telepítése akkor válhat szükségessé, ha a konfiguráció fejlesztője harmadik féltől származó (a konfigurációhoz kapcsolódó) programkódot kíván használni, amelynek megbízhatóságát a fejlesztő nem tudja garantálni. Ilyen kód például az Execute() és Compute() metódusok végrehajtása olyan esetekben, amikor a végrehajtható kódot a külvilágból szerezzük be. Ebben az esetben az lenne a jó gyakorlat, ha a következő módszerek végrehajtása előtt állítsa be a csökkentett módot:

// Programkód jön létre, amelyet végre kell hajtani // Lehetséges, hogy a kódot külső forrásból töltik be // vagy kézzel írják be ExecutableCode = GetExecutedCodeFromExternalWorld(); // Csökkentett mód engedélyezése SetSafeMode(True); // Potenciálisan veszélyes kód végrehajtása Execute(ExecutableCode); // A csökkentett mód kikapcsolása SetSafeMode(False);

Egyes esetekben a csökkentett mód beállításai ütközhetnek a Privileged Mode beállításokkal. Ilyen ütközés például egy olyan dokumentum feladása, amelyhez a Privilegizált mód feladáskor tulajdonság van beállítva, a csökkentett módban végrehajtott beépített nyelvű kódból. Ebben az esetben a privilegizált mód le van tiltva, és az engedélyezési kísérleteket figyelmen kívül hagyja. Ennek eredményeként a beágyazott nyelv kódja, amely „számít” az engedélyezett privilegizált módra, „találkozik” a hiányával, ami hibákhoz vezet, amelyek megjelenésének oka nem nyilvánvaló. Ennek a helyzetnek a megelőzése érdekében az 1C:Enterprise rendszer automatikusan letiltja a csökkentett módot az objektummodulban vagy a kezelőmodulban elérhető eseménykezelők számára, feltéve, hogy a beépített nyelv végrehajtható kódja nem található a konfigurációs bővítményben. Az ilyen kezelők speciális módon vannak megjelölve a szintaktikai asszisztensben.

Lehetővé teszi a csökkentett mód letiltását is a beépített nyelvről (ha a letiltani próbáló programkód nem egy konfigurációs bővítményben található). A csökkentett mód letiltására van egy módszer SetDisableSafeMode(). A módszer segítségével ellenőrizheti, hogy a csökkentett mód jelenleg le van-e tiltva (automatikusan vagy metódus hívásával). GetDisableSafeMode().

A beépített nyelvben egy metóduson belül nem lehet több szinten beágyazni a biztonságos mód beállítását (a SetSafeMode() metódus meghívásával) és a csökkentett mód letiltását (automatikusan a metaadat objektum esemény végrehajtása során kezelők vagy a SetSafeModeDisable() metódus meghívásával). Amikor megpróbálja növelni a beágyazást, kivételt dob:

// A ProcedureProcedureName() helyes használata SetDisableSafeMode(True);