Modul sigur este instalat 1s 8.3. Deschiderea software-ului de prelucrare externă

Deschiderea programatică a prelucrării externe se realizează folosind obiectul context global ExternalProcessing, care are tipul ExternalProcessingManager. Pentru fiecare mod de operare al platformei 1C (modul de aplicare obișnuit și modul de aplicație gestionată), sunt utilizate diferite metode obiect pentru a lucra cu procesare externă.

Rularea procesării externe în modul normal de aplicare

Într-o aplicație tipică, trebuie să utilizați metoda Create() a obiectului ExternalProcessing, căruia i se transmite numele complet al fișierului de procesare externă. Metoda returnează un obiect de tip Procesare externă, acest obiect este procesarea externă care se deschide. Dacă trebuie să deschideți un formular de procesare extern, atunci apelați metoda GetForm() pe obiectul primit, care va returna formularul principal, apoi apelați metoda Open() pentru a-l deschide.


Procesare = ExternalProcessing.Create(FullFileName);
Procesare.GetForm().Open();

În procesarea externă, forma principală trebuie să fie întotdeauna una obișnuită, iar forma controlată trebuie să fie întotdeauna una suplimentară, altfel metoda GetForm() nu va funcționa în modul de aplicare normal.

Rularea procesării externe în modul aplicație gestionată

În modul formulare gestionate, algoritmul este împărțit în funcție de contextul de execuție. Pe client, primim date binare folosind numele complet al fișierului de procesare extern. Transferăm datele binare primite pe server și le plasăm în stocare temporară. Apoi, trebuie să apelați metoda Connect() a obiectului ExternalProcessing, la care este transmisă adresa pentru stocarea temporară. Metoda returnează numele procesării externe conectate. Returnăm clientului numele procesării externe, creăm o cale de șir către formularul de procesare și folosim metoda OpenForm() pentru a deschide formularul de procesare externă.

&Pe server
Funcția GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Numele complet al fișierului de procesare externă.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Modul sigur pentru procesare externă

Metodele Create() și Connect() ale obiectului ExternalProcessing au un parametru de intrare SafeMode - un semn al conectării procesării externe în modul sigur. Dacă parametrul nu este specificat, conexiunea se va face în mod securizat.
Modul sigur este conceput pentru a proteja sistemul de executarea codului de program „neîncrezător” pe server. Potențialul pericol provine din procesarea externă sau codul de program introdus de utilizator pentru a fi utilizat în metodele Run() și Calculate().
Modul sigur impune următoarele restricții:
  • modul privilegiat este anulat dacă a fost instalat;
  • încercările de a intra în modul privilegiat sunt ignorate;
  • operațiunile cu obiecte COM sunt interzise;
  • este interzisă încărcarea și conectarea componentelor externe;
  • accesul la sistemul de fișiere este interzis (cu excepția fișierelor temporare);
  • Accesul la internet este interzis.
Procesele deschise interactiv nu se desfășoară în modul sigur, de aceea se recomandă implementarea unui mecanism de deschidere a procesoarelor externe în modul sigur, precum și la nivel de permisiune pentru a interzice utilizatorului deschiderea interactivă a procesoarelor externe.
Pentru a interzice deschiderea interactivă a prelucrării, în toate rolurile atribuite utilizatorului, este necesar să eliminați dreptul „Deschiderea interactivă a prelucrării externe” (vezi Figura 1).
Figura 1. Drepturi de a deschide interactiv procesări/rapoarte externe
Dreptul „Deschiderea interactivă a prelucrării externe” nu afectează în niciun fel obiectul Prelucrare externă.

Deschiderea programatică a rapoartelor externe este similară cu procesarea externă, dar ar trebui să utilizați obiectul context global ExternalReports, care are tipul ExternalReportsManager.

Imprimare (Ctrl+P)

Obiecte de configurare

Dacă este necesar să folosiți cod de program „neîncrezător” pe server: procesare externă sau cod de program introdus de utilizator pentru a fi utilizat în metodele Run() și Calculate(), puteți utiliza modul de operare sigur.

În modul sigur:

  • Mod privilegiat anulat.
  • Trecerea la modul privilegiat ignorat.
  • Interzis operațiuni care conduc la utilizarea mijloacelor externe în legătură cu platforma 1C:Enterprise (inclusiv analogi neblocatori ai metodelor specificate):
  • Mecanisme COM:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Încărcarea componentelor externe:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Acces la sistemul de fișiere:
    • ValueInFile();
    • Copiaza fisier();
    • MergeFiles();
    • MutareFișier();
    • SplitFile();
    • CreateDirectory();
    • Sterge fisierele();
    • Fișier nou;
    • xBase nou;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText(), dacă primul parametru este un șir;
    • ReadText.Open(), dacă primul parametru este un șir;
    • NewTextRecord(), dacă primul parametru este un șir;
    • WriteText.Open(), dacă primul parametru este un șir;
    • NewTextExtract();
    • modificarea proprietății ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), dacă primul parametru este un șir;
    • Imagine.Scrie();
    • nou BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), dacă primul parametru este un șir;
    • New ReadData(), există un prim parametru - un șir;
    • toate metodele obiectului FileStreamManager;
    • 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().
  • Acces la internet:
    • Noua conexiune la internet,
    • InternetMail nou,
    • InternetProxy nou,
    • Noua conexiune HTTP,
    • Noua conexiune FTP.

ATENŢIE! Când se efectuează operațiuni interzise, ​​se aruncă o excepție în timpul execuției.

Notă. Rapoartele externe și procesările deschise folosind meniul Fișier - Deschidere sunt executate în modul sigur dacă utilizatorul nu are drepturi de acces administrativ.

Numărul de ori când este activat modul sigur trebuie să corespundă cu numărul de ori dezactivat. Cu toate acestea, dacă modul sigur a fost activat în cadrul unei proceduri sau funcție (o dată sau mai multe), dar nu a fost oprit, sistemul se va opri automat de câte ori au fost porniri incomplete în procedura sau funcția rămasă.

Dacă într-o procedură sau funcție apelează o metodă SetSafeMode(False) a făcut mai mult decât apeluri de metodă SetSafeMode (Adevărat), atunci va fi aruncată o excepție.

Instalarea software-ului în modul sigur poate fi necesară în cazul în care dezvoltatorul de configurație intenționează să utilizeze cod de program terță parte (în legătură cu configurația), a cărui fiabilitate dezvoltatorul nu poate garanta. Un exemplu de astfel de cod este executarea metodelor Execute() și Compute() în cazurile în care codul executabil este obținut din lumea exterioară. În acest caz, o practică bună ar fi să setați modul sigur înainte de a executa aceste metode:

// Se generează cod de program care ar trebui executat // Este posibil ca codul să fie încărcat din surse externe // sau introdus manual ExecutableCode = GetExecutedCodeFromExternalWorld(); // Activează modul sigur SetSafeMode(True); // Executați cod potențial periculos Execute(ExecutableCode); // Dezactivează modul sigur SetSafeMode(False);

În unele cazuri, setările modului sigur pot intra în conflict cu setările modului privilegiat. Un exemplu de astfel de conflict este postarea unui document pentru care este setat modul Privilegiat la postare, din codul în limbajul încorporat care este executat în modul sigur. În acest caz, modul privilegiat este dezactivat și încercările de a-l activa sunt ignorate. Drept urmare, codul din limbajul încorporat, care „contează” pe modul privilegiat activat, „întâlnește” absența acestuia, ceea ce duce la erori cu motive neevidente ale apariției lor. Pentru a preveni această situație, sistemul 1C:Enterprise dezactivează automat modul sigur pentru gestionatorii de evenimente care sunt disponibili în modulul obiect sau modulul manager, cu condiția ca codul executabil în limbajul încorporat să nu fie localizat în extensia de configurare. Astfel de handlere sunt marcate într-un mod special în asistentul de sintaxă.

De asemenea, oferă posibilitatea de a dezactiva modul sigur din limbajul încorporat (dacă codul programului care încearcă să îl dezactiveze nu se află într-o extensie de configurare). Pentru a dezactiva modul sigur, există o metodă SetDisableSafeMode(). Puteți verifica dacă modul sigur este dezactivat în prezent (automat sau apelând o metodă) folosind metoda GetDisableSafeMode().

Într-o singură metodă în limbajul încorporat, nu poate exista mai mult de un nivel de imbricare de setare a modului sigur (prin apelarea metodei SetSafeMode()) și setarea dezactivării modului sigur (automat în timpul execuției evenimentului obiect metadate). handlere sau apelând metoda SetSafeModeDisable()). Când încercați să creșteți imbricarea, se face o excepție:

// Utilizarea corectă a ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode (adevărat); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Utilizarea incorectă a ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode (adevărat); SetDisableSafeMode(False); // Excepție EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Excepție EndProcedure

În versiunea 8.3.9.2170, securitatea a fost întărită - sistemul solicită acum confirmarea pentru a lansa procesări externe, extensii etc. Aparent după troian:

A fost implementat un mecanism de protecție împotriva acțiunilor periculoase. Când se efectuează o acțiune potențial periculoasă, sistemul emite un avertisment care conține informații despre acțiunea în curs și despre pericolul potențial al acestei acțiuni. Activitățile potențial periculoase includ:

  • Încărcarea unui raport extern, procesare sau extensie de configurare.
  • Se încarcă sau se actualizează configurația/extensia.
  • Acces de la un raport/procesor extern sau extensie la următoarele capabilități:
  • Executarea unei comenzi de sistem de operare.
  • Managementul utilizatorilor.

Utilizatorul are capacitatea de a permite sau de a respinge o acțiune potențial periculoasă. Dacă o acțiune este permisă, în unele cazuri poate fi necesar să reexecuți acțiunea permisă.

Mesajul arată astfel:

Avertizare de securitate

Deschide „” din fișierul „C:\.......epf”. Este recomandat să acordați atenție sursei din care a fost obținut acest fișier. Dacă nu există un acord cu sursa cu privire la dezvoltarea modulelor suplimentare sau există îndoieli cu privire la conținutul fișierului, atunci nu este recomandat să îl deschideți, deoarece acest lucru poate dăuna computerului și datelor. Permiteți deschiderea acestui fișier. NU CHIAR

Soluţie:

În configurator, în proprietățile utilizatorului de securitate a informațiilor, debifați caseta de selectare „Protecție împotriva acțiunilor periculoase”.

Din documentatie:Dezactivarea mecanismului de protecție a activităților periculoase

În unele cazuri, este necesară dezactivarea mecanismului de protecție împotriva acțiunilor periculoase. Pentru a face acest lucru, puteți utiliza următoarele opțiuni:

1. Dezactivați caseta de selectare Protecție împotriva acțiunilor periculoase (Protecție împotriva acțiunilor periculoase) din proprietățile unui anumit utilizator. Acest lucru va dezactiva protecția pentru acel utilizator.

2. Utilizați parametrul Protecție împotriva acțiunilor periculoase din metodele Connect() ale managerilor externi de procesare (rapoarte). În acest caz, este posibilă încărcarea procesării externe (raportului) fără solicitările utilizatorului.

3. Utilizați proprietatea Protecție împotriva acțiunilor periculoase a obiectului Extensie de configurare înainte de a apela metoda Write() a acestui obiect.

4. Utilizați parametrul DisableUnsafeActionProtection din fișierul conf.cfg. În acest caz, mecanismul de protecție împotriva acțiunilor periculoase va fi dezactivat pentru toți utilizatorii bazei de informații ale căror șiruri de conexiune satisfac măștile specificate.

Dezactivarea protecției împotriva acțiunilor periculoase se efectuează conform următoarelor reguli (în ordinea dată):

1. Protecția este considerată dezactivată dacă caseta de selectare Protecție împotriva activităților periculoase a utilizatorului curent este debifată.

2. Protecția este considerată dezactivată dacă șirul de conexiune la baza de informații se potrivește cu unul dintre modelele specificate în parametrul DisableUnsafeActionProtection al fișierului conf.cfg.

3. Dacă procesarea externă (raportul) este conectată cu protecția dezactivată în mod explicit folosind parametrul Protecție împotriva acțiunilor nesigure.

4. Dacă protecția este dezactivată în mod explicit folosind proprietatea extensiei Protecție împotriva acțiunilor periculoase.

Faptul este că atunci când se utilizează versiunea client-server a 1C, procesarea/rapoartele externe sunt deschise în modul sigur, în care utilizarea modului privilegiat este interzisă. Iar modul privilegiat este folosit foarte des în configurații tipice: generarea de formulare tipărite, diverse verificări de servicii (înregistrarea schimburilor), etc. Ca urmare, chiar și folosind un raport regulat asupra sistemului de control al accesului fără formular (în mod implicit, se folosește formularul general „ReportForm”) și salvarea setărilor personalizate ale raportului (în directorul corespunzător), veți primi o eroare despre acces insuficient drepturi la diferite constante și parametri de sesiune utilizați în scopuri oficiale după linie SetPrivilegedMode(True) ;

Soluția „corectă” ar fi conectarea prelucrărilor și rapoartelor externe prin mecanismele BSP „Rapoarte și procesare suplimentare” cu dezactivarea modului sigur sau adăugarea de permisiuni (în opinia mea, din versiunea BSP 2.2.2.1). Dar dacă dintr-un motiv oarecare este necesar să utilizați fișiere de raportare/procesare externe, atunci puteți configura un profil de securitate cluster utilizat ca profil de securitate în mod sigur pentru o anumită bază de informații.

Aș dori să observ imediat că această opțiune nu este de preferat, dar din cauza diverselor circumstanțe poate fi utilizată într-o formă atât de simplificată. De exemplu, am mai multe baze de date în diferite orașe, una comună locală cu drepturi strict limitate, USB închis etc., undeva folosesc Accounting 2.0, iar undeva 3.0, fac aproape toate rapoartele folosind instrumente ACS fără formulare, astfel încât acestea deschis în ambele versiuni. Menținerea tuturor acestor rapoarte pentru versiuni diferite și baze de date diferite este laborioasă și inutilă, deoarece Există planuri de a trece la o singură configurație și bază...

Să creăm un profil.
În consola clusterului, creăm un profil de securitate în care setăm steagurile „Poate fi folosit ca profil de securitate Safe Mode”și „ în secțiunea „Acces complet permis:” „în modul privilegiat”.

În multe cazuri de utilizare a rapoartelor și procesare simplă, această metodă va fi aplicabilă. Pentru situații mai complexe, nu are rost să descriem procesul, deoarece este subliniat în documentație (capacitatea de a configura profiluri de securitate pentru anumite fișiere externe prin specificarea cantității de hash, etc.).

P.S. Credeam că profilurile de securitate funcționează doar atunci când se folosesc licențe de platformă și server la nivel de CORP, dar această funcționalitate funcționează și pe platforma 1C:Enterprise 8.3 (se poate numi condiționat PROF, prin analogie cu configurațiile standard Basic/PROF/CORP)

Acțiune