Komputery Okna Internet

1c tryb bezpieczny przetwarzania zewnętrznego. Tryb awaryjny jest ustawiony. Operacja jest zabroniona. Uruchamianie przetwarzania zewnętrznego w normalnym trybie aplikacji

Programowe otwarcie przetwarzania zewnętrznego odbywa się za pomocą obiektu kontekstu globalnego OutsideProcessing, który ma typ Zewnętrzny menedżer przetwarzania. Dla każdego trybu działania platformy 1C (tryb zwykłej aplikacji i tryb aplikacji zarządzanej) do pracy z przetwarzaniem zewnętrznym stosowane są różne metody obiektowe.

Uruchamianie przetwarzania zewnętrznego w normalnym trybie aplikacji

W typowej aplikacji należy użyć metody Create() obiektu OutsideProcessing, do której przekazywana jest pełna nazwa pliku przetwarzania zewnętrznego. Metoda zwraca obiekt typu Przetwarzanie zewnętrzne, ten obiekt jest otwieranym przetwarzaniem zewnętrznym. Jeśli potrzebujesz otworzyć formularz przetwarzania zewnętrznego, to wywołaj na odebranym obiekcie metodę GetForm(), która zwróci formularz główny, a następnie wywołaj metodę Open() w celu jego otwarcia.


Przetwarzanie = OutsideProcessing.Create(FullFileName);
Przetwarzanie.GetForm().Open();

W przetwarzaniu zewnętrznym formularz główny musi być zawsze formularzem zwykłym, a formularz kontrolowany zawsze musi być formularzem dodatkowym, w przeciwnym razie metoda GetForm() nie będzie działać w normalnym trybie aplikacji.

Uruchamianie przetwarzania zewnętrznego w trybie aplikacji zarządzanej

W trybie formularzy zarządzanych algorytm jest dzielony według kontekstu wykonania. Na kliencie otrzymujemy dane binarne z wykorzystaniem pełnej nazwy zewnętrznego pliku przetwarzającego. Otrzymane dane binarne przesyłamy na serwer i umieszczamy w magazynie tymczasowym. Następnie należy wywołać metodę Connect() obiektu OutsideProcessing, do której przekazywany jest adres magazynu tymczasowego. Metoda zwraca nazwę podłączonego przetwarzania zewnętrznego. Zwracamy klientowi nazwę przetwarzania zewnętrznego, tworzymy ciąg znaków do formularza przetwarzania i za pomocą metody OpenForm() otwieramy formularz przetwarzania zewnętrznego.

&Na serwerze
Funkcja GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Zwróć externalProcessing.Connect(AddressInTemporaryStorage);
Funkcja końcowa

&Na kliencie
PełnaNazwaPliku = ""; // Pełna nazwa zewnętrznego pliku przetwarzania.
FileData = nowe BinaryData(FullFileName);
OutsideProcessingName = GetExternalProcessingName(FileData);
OpenForm("Przetwarzanie Zewnętrzne." + NazwaPrzetwarzania Zewnętrznego + ".Form");

Tryb awaryjny do przetwarzania zewnętrznego

Metody Create() i Connect() obiektu OutsideProcessing posiadają przychodzący parametr SafeMode - znak podłączenia zewnętrznego przetwarzania w trybie awaryjnym. Jeżeli parametr nie zostanie określony, połączenie zostanie nawiązane w trybie bezpiecznym.
Tryb awaryjny ma na celu ochronę systemu przed wykonaniem „niezaufanego” kodu programu na serwerze. Potencjalne zagrożenie wynika z zewnętrznego przetwarzania lub kodu programu wprowadzonego przez użytkownika do użycia w metodach Run() i Calculate().
Tryb awaryjny nakłada następujące ograniczenia:
  • tryb uprzywilejowany zostaje anulowany, jeśli został zainstalowany;
  • próby wejścia w tryb uprzywilejowany są ignorowane;
  • operacje na obiektach COM są zabronione;
  • ładowanie i podłączanie komponentów zewnętrznych jest zabronione;
  • dostęp do systemu plików jest zabroniony (z wyjątkiem plików tymczasowych);
  • Dostęp do Internetu jest zabroniony.
Procesy otwierane interaktywnie nie są wykonywane w trybie awaryjnym, dlatego zaleca się wdrożenie mechanizmu otwierania zewnętrznych procesorów w trybie awaryjnym, a także na poziomie uprawnień uniemożliwiającym użytkownikowi interaktywne otwieranie procesorów zewnętrznych.
Aby zabronić interaktywnego otwierania przetwarzania, we wszystkich rolach przypisanych użytkownikowi, należy usunąć uprawnienie „Interaktywne otwieranie przetwarzania zewnętrznego” (patrz rysunek 1).
Rysunek 1. Prawa do interaktywnego otwierania zewnętrznych procesów/raportów
Uprawnienie „Interaktywne otwarcie przetwarzania zewnętrznego” nie wpływa w żaden sposób na obiekt Przetwarzania zewnętrznego.

Programowe otwieranie raportów zewnętrznych jest podobne do przetwarzania zewnętrznego, z tą różnicą, że należy użyć obiektu kontekstu globalnego OutsideReports, który ma typ Menedżer raportów zewnętrznych.

Drukuj (Ctrl+P)

Obiekty konfiguracyjne

W przypadku konieczności wykorzystania na serwerze „niezaufanego” kodu programu: przetwarzania zewnętrznego lub kodu programu wprowadzonego przez użytkownika do wykorzystania w metodach Run() i Calculate(), można skorzystać z bezpiecznego trybu pracy.

W trybie awaryjnym:

  • Tryb uprzywilejowany odwołany.
  • Przełączanie do trybu uprzywilejowanego ignorowane.
  • Zabroniony operacje prowadzące do wykorzystania środków zewnętrznych w stosunku do platformy 1C:Enterprise (w tym nieblokujące analogi określonych metod):
  • Mechanizmy COM:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Ładowanie komponentów zewnętrznych:
    • Załaduj komponent zewnętrzny();
    • PołączKomponent Zewnętrzny().
  • Dostęp do systemu plików:
    • WartośćWPliku();
    • Skopiować plik();
    • Połącz pliki();
    • PrzenieśPlik();
    • Podział pliku();
    • Utworzyć katalog();
    • Usuń pliki();
    • Nowy plik;
    • Nowy xBase;
    • EntryHTML.OpenFile();
    • CzytajHTML.OpenFile();
    • CzytajXML.OpenFile();
    • ZapiszXML.OpenFile();
    • OdczytFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • CzytanieZipFile.Open();
    • New ReadText(), jeśli pierwszy parametr jest ciągiem znaków;
    • ReadText.Open(), jeśli pierwszy parametr jest ciągiem znaków;
    • NewTextRecord(), jeśli pierwszy parametr jest ciągiem znaków;
    • WriteText.Open(), jeśli pierwszy parametr jest ciągiem znaków;
    • NowyWyciąg Tekstu();
    • zmiana właściwości ExtractText.FileName;
    • Wyodrębnij tekst. Zapis();
    • New Picture(), jeśli pierwszym parametrem jest ciąg znaków;
    • Obraz.Zapisz();
    • noweDaneBinowe();
    • BinaryData.Write();
    • NewDataRecord(), jeśli pierwszy parametr jest ciągiem znaków;
    • New ReadData(), znajduje się pierwszy parametr - string;
    • wszystkie metody obiektu FileStreamManager;
    • Nowy strumień pliku();
    • Sformatowany dokument.Write();
    • Schemat geograficzny.Read();
    • Schemat geograficzny.Write();
    • Schemat geograficzny.Drukuj();
    • Dokument tabelaryczny.Read();
    • Dokument tabelaryczny.Write();
    • Dokument tabelaryczny.Drukuj(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • Dokument tekstowy.Read();
    • Dokument tekstowy. Zapis().
  • Dostęp do Internetu:
    • Nowe połączenie internetowe,
    • Nowa poczta internetowa,
    • Nowy internetowy serwer proxy,
    • Nowe połączenie HTTP,
    • Nowe połączenie FTP.

UWAGA! Podczas wykonywania zabronionych operacji w czasie wykonywania zgłaszany jest wyjątek.

Notatka. Zewnętrzne raporty i przetwarzanie otwierane za pomocą menu Plik - Otwórz są uruchamiane w trybie awaryjnym, jeśli użytkownik nie posiada uprawnień administracyjnych.

Liczba włączeń trybu awaryjnego musi odpowiadać liczbie jego wyłączeń. Jeśli jednak tryb awaryjny został włączony w ramach procedury lub funkcji (raz lub więcej), ale nie został wyłączony, system wyłączy się automatycznie tyle razy, ile pozostało niepełnych włączeń procedury lub funkcji.

Jeśli w procedurze lub funkcji wywołuje metodę Ustaw tryb awaryjny (fałsz) wykonało więcej niż tylko wywołania metod Ustaw tryb awaryjny (prawda), wówczas zostanie zgłoszony wyjątek.

Instalacja oprogramowania w trybie awaryjnym może być wymagana w przypadku, gdy twórca konfiguracji zamierza wykorzystać (w związku z konfiguracją) kod programu strony trzeciej, którego niezawodności programista nie może zagwarantować. Przykładem takiego kodu jest wykonanie metod Execute() i Compute() w przypadku uzyskania kodu wykonywalnego ze świata zewnętrznego. W takim przypadku dobrą praktyką byłoby ustawienie trybu awaryjnego przed wykonaniem poniższych metod:

// Generowany jest kod programu, który należy wykonać // Możliwe jest, że kod został załadowany ze źródeł zewnętrznych // lub wprowadzony ręcznie ExecutableCode = GetExecutedCodeFromExternalWorld(); // Włącz tryb awaryjny SetSafeMode(True); // Wykonaj potencjalnie niebezpieczny kod Execute(ExecutableCode); // Wyłącz tryb awaryjny SetSafeMode(False);

W niektórych przypadkach ustawienia trybu awaryjnego mogą powodować konflikt z ustawieniami trybu uprzywilejowanego. Przykładem takiego konfliktu jest wysłanie dokumentu, dla którego ustawiono właściwość Tryb uprzywilejowany podczas wysyłania, z kodu w języku wbudowanym, który jest wykonywany w trybie awaryjnym. W takim przypadku tryb uprzywilejowany jest wyłączony, a próby jego włączenia są ignorowane. W rezultacie kod w języku osadzonym, który „liczy” na włączony tryb uprzywilejowany, „napotyka” jego brak, co prowadzi do błędów o nieoczywistych przyczynach ich pojawienia się. Aby zapobiec takiej sytuacji, system 1C:Enterprise automatycznie wyłącza tryb awaryjny dla procedur obsługi zdarzeń dostępnych w module obiektowym lub module menedżera, pod warunkiem, że kod wykonywalny w wbudowanym języku nie znajduje się w rozszerzeniu konfiguracyjnym. Takie procedury obsługi są w specjalny sposób zaznaczane w asystencie składni.

Zapewnia także możliwość wyłączenia trybu awaryjnego z wbudowanego języka (jeśli kod programu, który próbuje go wyłączyć, nie znajduje się w rozszerzeniu konfiguracyjnym). Aby wyłączyć tryb awaryjny, istnieje metoda UstawWyłączSafeMode(). Możesz sprawdzić, czy tryb awaryjny jest obecnie wyłączony (automatycznie lub wywołując metodę), korzystając z metody GetDisableSafeMode().

W obrębie jednej metody w języku wbudowanym nie może występować więcej niż jeden poziom zagnieżdżenia ustawienia trybu awaryjnego (poprzez wywołanie metody SetSafeMode()) oraz ustawienia wyłączenia trybu bezpiecznego (automatycznie podczas wykonywania zdarzenia obiektu metadanych obsługi lub wywołując metodę SetSafeModeDisable()). Podczas próby zwiększenia zagnieżdżenia zgłaszany jest wyjątek:

// Poprawne użycie proceduryProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(Fałsz); SetDisableSafeMode(False); EndProcedure // Niepoprawne użycie proceduryProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Wyjątek EndProcedure ProceduraProcedureName() SetSafeMode(True); SetDisableSafeMode(False); //Procedura końcowa wyjątku

Programowe otwarcie przetwarzania zewnętrznego odbywa się za pomocą obiektu kontekstu globalnego OutsideProcessing, który ma typ Zewnętrzny menedżer przetwarzania. Dla każdego trybu działania platformy 1C (tryb zwykłej aplikacji i tryb aplikacji zarządzanej) do pracy z przetwarzaniem zewnętrznym stosowane są różne metody obiektowe.

Uruchamianie przetwarzania zewnętrznego w normalnym trybie aplikacji

W typowej aplikacji należy użyć metody Create() obiektu OutsideProcessing, do której przekazywana jest pełna nazwa pliku przetwarzania zewnętrznego. Metoda zwraca obiekt typu Przetwarzanie zewnętrzne, ten obiekt jest otwieranym przetwarzaniem zewnętrznym. Jeśli potrzebujesz otworzyć formularz przetwarzania zewnętrznego, to wywołaj na odebranym obiekcie metodę GetForm(), która zwróci formularz główny, a następnie wywołaj metodę Open() w celu jego otwarcia.


Przetwarzanie = OutsideProcessing.Create(FullFileName);
Przetwarzanie.GetForm().Open();

W przetwarzaniu zewnętrznym formularz główny musi być zawsze formularzem zwykłym, a formularz kontrolowany zawsze musi być formularzem dodatkowym, w przeciwnym razie metoda GetForm() nie będzie działać w normalnym trybie aplikacji.

Uruchamianie przetwarzania zewnętrznego w trybie aplikacji zarządzanej

W trybie formularzy zarządzanych algorytm jest dzielony według kontekstu wykonania. Na kliencie otrzymujemy dane binarne z wykorzystaniem pełnej nazwy zewnętrznego pliku przetwarzającego. Otrzymane dane binarne przesyłamy na serwer i umieszczamy w magazynie tymczasowym. Następnie należy wywołać metodę Connect() obiektu OutsideProcessing, do której przekazywany jest adres magazynu tymczasowego. Metoda zwraca nazwę podłączonego przetwarzania zewnętrznego. Zwracamy klientowi nazwę przetwarzania zewnętrznego, tworzymy ciąg znaków do formularza przetwarzania i za pomocą metody OpenForm() otwieramy formularz przetwarzania zewnętrznego.

&Na serwerze
Funkcja GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Zwróć externalProcessing.Connect(AddressInTemporaryStorage);
Funkcja końcowa

&Na kliencie
PełnaNazwaPliku = ""; // Pełna nazwa zewnętrznego pliku przetwarzania.
FileData = nowe BinaryData(FullFileName);
OutsideProcessingName = GetExternalProcessingName(FileData);
OpenForm("Przetwarzanie Zewnętrzne." + NazwaPrzetwarzania Zewnętrznego + ".Form");

Tryb awaryjny do przetwarzania zewnętrznego

Metody Create() i Connect() obiektu OutsideProcessing posiadają przychodzący parametr SafeMode - znak podłączenia zewnętrznego przetwarzania w trybie awaryjnym. Jeżeli parametr nie zostanie określony, połączenie zostanie nawiązane w trybie bezpiecznym.
Tryb awaryjny ma na celu ochronę systemu przed wykonaniem „niezaufanego” kodu programu na serwerze. Potencjalne zagrożenie wynika z zewnętrznego przetwarzania lub kodu programu wprowadzonego przez użytkownika do użycia w metodach Run() i Calculate().
Tryb awaryjny nakłada następujące ograniczenia:
  • tryb uprzywilejowany zostaje anulowany, jeśli został zainstalowany;
  • próby wejścia w tryb uprzywilejowany są ignorowane;
  • operacje na obiektach COM są zabronione;
  • ładowanie i podłączanie komponentów zewnętrznych jest zabronione;
  • dostęp do systemu plików jest zabroniony (z wyjątkiem plików tymczasowych);
  • Dostęp do Internetu jest zabroniony.
Procesy otwierane interaktywnie nie są wykonywane w trybie awaryjnym, dlatego zaleca się wdrożenie mechanizmu otwierania zewnętrznych procesorów w trybie awaryjnym, a także na poziomie uprawnień uniemożliwiającym użytkownikowi interaktywne otwieranie procesorów zewnętrznych.
Aby zabronić interaktywnego otwierania przetwarzania, we wszystkich rolach przypisanych użytkownikowi, należy usunąć uprawnienie „Interaktywne otwieranie przetwarzania zewnętrznego” (patrz rysunek 1).
Rysunek 1. Prawa do interaktywnego otwierania zewnętrznych procesów/raportów
Uprawnienie „Interaktywne otwarcie przetwarzania zewnętrznego” nie wpływa w żaden sposób na obiekt Przetwarzania zewnętrznego.

Programowe otwieranie raportów zewnętrznych jest podobne do przetwarzania zewnętrznego, z tą różnicą, że należy użyć obiektu kontekstu globalnego OutsideReports, który ma typ Menedżer raportów zewnętrznych.

Na przykładzie „Trade Management 11.3” rozważymy prosty proces podłączenia zewnętrznego formularza drukującego. Rozważymy także cechy nowego systemu bezpieczeństwa.

Szybkie przejście

Działania wstępne

Najpierw powinieneś włączyć funkcjonalność lub sprawdź jego dostępność

1. Zaloguj się z pełnymi uprawnieniami do bazy informacyjnej.

2. Przejdź do menu „Dane podstawowe i administracja”/Blok „Administracja”/Polecenie „Formularze drukowane, raporty i przetwarzanie”.

Dodatek

W sekcji, która zostanie otwarta:

Przetwarzanie dodajemy za pomocą przycisku „Utwórz” (to ważne) lub „Aktualizuj!” istniejący:

  • Wybierz go z listy (jeśli nie jest zaznaczony lub jest pusty, polecenie nie będzie działać, ale nic nie powie).
  • Kliknij przycisk „Załaduj z pliku”.

Po pojawieniu się 1C w przetwarzaniu zewnętrznym kontrole bezpieczeństwa pojawiły się w nowych konfiguracjach.

Należy instalować wyłącznie przetwarzanie stworzone samodzielnie lub otrzymane znanymi kanałami komunikacji (nie z poczty, tylko ze strony internetowej z ważnym certyfikatem lub dostarczone przez pracowników dewelopera, potwierdzone przez niego telefonicznie).

Jeśli programista przepisuje wszystko w przetwarzaniu, zostanie ustawione „Umieszczenie” - pojawią się obiekty, których dotyczyć będzie przetwarzanie, pojawią się polecenia.
Aby rozpocząć pracę, kliknij „Zapisz i zamknij”.

Badanie

Bezpośrednio po tym, w zależności od rodzaju zabiegu:

  • Wydrukowany formularz staje się dostępny w momencie otwarcia dokumentu lub z jego listy (w przypadku już otwartego przy ponownym otwarciu) po kliknięciu przycisku „Drukuj”.
  • Przetwarzanie dostępne jest w sekcjach „Przetwarzanie dodatkowe” w każdym podsystemie
  • Przetwarzanie wypełnienia za pomocą przycisku „Wypełnij” znajdującego się na liście lub z głównego panelu poleceń formularza obiektowego.

W przypadku powyższego przetwarzania uruchomienie będzie wyglądać następująco:

Jeżeli dokument jest nowy należy go spisać, zewnętrzny mechanizm przetwarzania ostrzeże Cię o tym:

Dalsze zachowanie zależy od wbudowanej funkcjonalności: możliwe jest otwarcie formularza lub po prostu przetworzenie danych.

Ostrzeżenia dotyczące bezpieczeństwa w 1C

Nowe wydania i konfiguracje platform zapewniają lepszą ochronę przed uruchamianiem szkodliwych programów.

Przetwarzanie może spowodować załadowanie programu Excel, w takim przypadku nowy podsystem zabezpieczeń wyświetli również ostrzeżenie:

W tym przypadku kod obsługi zostaje przerwany.

Jeśli klikniesz „Tak”, system poprosi Cię o ponowne uruchomienie polecenia:

Użytkownik bazy danych ma możliwość wyłączenia ochrony przed niebezpiecznymi działaniami za pomocą „Konfiguratora”:

Nie można tego zmienić z trybu „Enterprise”, być może zrobiono to celowo i może pojawić się po aktualizacji.

Należy również zaznaczyć, że jeśli przetwarzanie wykorzystuje Excel, musi działać w trybie niebezpiecznym (tak było przed wprowadzeniem nowego systemu, działa to równolegle):

„Nie można załadować MS EXCEL!!!” „Ustawiono tryb awaryjny. Operacja jest zabroniona”

W przetwarzaniu zewnętrznym wygląda to tak:

Programista powinien ustawić go na „False” w opisie wewnętrznego przetwarzania, wtedy wszystko będzie dobrze:

Funkcja InformationOnExternalProcessing() ExportRegistrationParameters = Nowa struktura; Parametry rejestracji.Insert("SafeMode", False);

Podczas aktualizacji konfiguracji pojawił się także komunikat ostrzegawczy o źródle, z którego pobrano plik konfiguracyjny: